我正在寻找一个可以解决以下问题的可靠架构:
作为用户,我想通过动态添加标准来动态过滤某些人员数据库。 我还希望能够根据过滤器的结果将所选字段仅批量更新到数据库。
以下情况属实:
Repository<Person>
,Person
是域模型。IQueryable<T> GetAll()
我有一些想法:
解决方案理论:
所以,无论如何我想到GUI要求DomainModel描述自己(存在哪些属性,允许哪些运算符,以及允许的值类型是什么)
这样,我可以为属性和允许的运算符渲染一些级联下拉列表。
我正在考虑从模型中的方法描述属性,例如:DescribeMyself();
然后将其与使用Attributes装饰属性相结合。
问题:
那么如何描述模型的属性呢,你会怎么做?例如,属性string Name
应该可以使用Equals
的运算符或类似的运算符进行搜索。
枚举怎么样?想象一下MyGenderEnum Gender
。在进行Equals过滤器时,我需要描述它必须与给定枚举中的任何值匹配。
要考虑的事情!
答案 0 :(得分:0)
这是一个相当广泛的问题。
只是一些观点:
支持动态添加搜索条件到IQueryable<T>
。只需为Where
添加针对每个条件的调用:
repository.GetAll<Person>().Where(x => criteria1(x)).Where(x => criteria2(x));
让模型描述自己是我不会做的事情。我会创建一个新类,类似于Fluent NHibernates ClassMap<T>
或Fluent Validations AbstractValidator<T>
。