簡體   English   中英

一種允許對存儲庫進行動態過濾/查詢的體系結構<SomeDomainModel>

[英]An architecture that allows for dynamic filter/querying of Repository<SomeDomainModel>

我正在尋找一種能夠解決以下問題的可靠架構:

作為用戶,我想通過動態添加條件來動態過濾某些人員數據庫。 我還希望能夠根據過濾器的結果將選定的字段僅批量更新到數據庫。

以下是正確的:

  • 我有一個3層解決方案(GUI,業務層,數據訪問層)。
  • 假設我有一個Repository<Person> ,那么Person是域模型。
  • 該存儲庫支持linq並可以給我: IQueryable<T> GetAll()

我有一些想法:

  • 我正在考慮使用動態表達式API,該API擴展了LINQ功能,因此我可以動態添加搜索條件。
  • 我看過NHibernate QueryBuilder,這可能是可以借鑒的想法。

解決方案理論:
因此,無論如何,我想到的是GUI要求DomainModel描述自身(存在哪些屬性,允許哪些運算符以及允許的值類型)。這樣,我可以為屬性和允許的運算符提供一些級聯的下拉列表。 我正在考慮通過Model中的方法描述屬性,例如: DescribeMyself(); 然后結合使用Attributes裝飾屬性。

問題:
那么,描述模型的屬性又如何呢? 例如,應使用Equals運算符或Like運算符來搜索屬性: string Name
枚舉呢? 想象一下MyGenderEnum Gender 在做Equals過濾器時,我需要描述它必須與給定Enum中的任何值匹配。

想一想!

這是一個相當廣泛的問題。

幾點:

  • 開箱即IQueryable<T>支持將搜索條件動態添加到IQueryable<T> 只需為每個條件添加呼叫到Where

    repository.GetAll<Person>().Where(x => criteria1(x)).Where(x => criteria2(x));

  • 我不會做使模型描述自身的事情。 我將創建一個新類,類似於Fluent NHibernates ClassMap<T>或Fluent Validations AbstractValidator<T>

暫無
暫無

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

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