[英]An architecture that allows for dynamic filter/querying of Repository<SomeDomainModel>
我正在尋找一種能夠解決以下問題的可靠架構:
作為用戶,我想通過動態添加條件來動態過濾某些人員數據庫。 我還希望能夠根據過濾器的結果將選定的字段僅批量更新到數據庫。
以下是正確的:
Repository<Person>
,那么Person
是域模型。 IQueryable<T> GetAll()
我有一些想法:
解決方案理論:
因此,無論如何,我想到的是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.