簡體   English   中英

將用戶生成的查詢傳遞給n層應用程序

[英]Passing a user generated query down an n-tiered application

在我的應用程序中,我使用數據訪問層(DAL)生成計划舊CLR對象(PO​​CO),該對象將被發送到我的業務層(BL)。 然后,BL使用模型視圖ViewModel(MVVM)模式創建對象以綁定到我的表示層(PL)。

我想讓我的用戶能夠在列級別過濾數據。 例如http://demos.telerik.com/aspnet-ajax/grid/examples/generalfeatures/filtering/defaultcs.aspx

還有其他執行類似功能的網格控件,但總的來說,這就是我要提供的用戶體驗。

我有一個很大的數據集,所以我想在服務器端進行所有的分頁/排序/過濾。

將分頁/排序數據沿n層體系結構發送到我的DAL是微不足道的,因此我只提取我感興趣的記錄。

但是,我不確定如何將篩選器數據發送到我的DAL,因為用戶可以生成任意長的篩選器表達式。

我的問題是: 通過n累累的應用程序發送用戶生成的過濾器表達式的方法什么?

我的想法:

  • 如果我的數據結構與對象結構相同,並且與視圖向用戶展示的對象結構相同,那么我的生活將會更加輕松。 但是,我的數據結構無法像許多控件提供者所喜歡的那樣輕松地映射到用戶視圖。
  • 許多網格控制提供程序都提供服務器端功能,但它們需要一個才能使用其Linq提供程序。 這會破壞我的體系結構的許多元素。
  • Grid控件確實會生成一個表達式“字符串”,我可以將其傳遞給DAL並對其進行解釋。 但是,這會將我的DAL耦合到此特定的控制表達式字符串格式。
  • 我可以創建一個“表達式樹”,將其作為參數傳遞給我的DAL。 因此,我只需要為表達式樹編寫一次DAL解釋器。 然后,對於任何Grid控件,我都必須生成適當的表達式樹以將其傳遞下來。

只是一個意見,但我會不惜一切代價避免進行解析。 我也會盡可能鼓勵使用強類型數據。

我本人會接受“表達式樹”的想法。 我已經在大型應用程序中使用了它,沒有太大的問題。 由於我們使用的是.Net 2.0,因此我們構建了自己的實現來表示表達式,並且不需要太多的支持(僅用於平等)。 我無法從您的帖子中得知您是否考慮自己構建,但我們提出了以下內容:

class ValueTriple { 
    System.Type FieldType;
    string Field;
    object Value;
}

class AndCritieria {
    ValueTriple[] Criteria;
}

class OrCriteria {
    AndCriteria[] Criteria;
}

我們用特定於實體的豐富類型“查詢”類包裝了這些類,並最終通過排序/分頁信息擴展了OrCriteria。 上面的查詢結構使我們能夠通過本質上標准化輸入查詢結構來表達任何基於等式的條件,而無需考慮復雜性。 例如:

WHERE x = '1' AND (y = '2' OR z = '3')

也可以表示為:

WHERE (x = '1' AND y = '2') OR (x = '1' AND z = '3')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM