[英]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.