繁体   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