我正在构建一个系统,用户可以在其中获取项目并定期获取新项目的通知。 用户应通过过滤某些属性来定义他们想要的项目。
我正在使用规范模式来过滤项目。我的想法是用户应该在web gui中定义自己的规范。
过滤只是:
ItemService
{
public IEnumerable<Item> GetMatching(IEnumerable<Item> items, IItemSpecification spec)
{
return items.Where(spec.IsMatch);
}
}
IItemSpecification
{
IsMatch(Item item);
}
问题是,持续使用不同规格的用户的最佳方法是什么?我对如何坚持它没有任何要求。关系数据库,文档数据库,xml,无论有效。
我能想到:
编写外部DSL(并将其存储在rdb中的简单列中)
为规范中的每个属性存储一行(在rdb中),指示要过滤的内容和修饰符(等于,大于)。这将导致很多行。
为每个规范创建一个新表(不知道这是否切合实际)
似乎DSL选项是最干净的解决方案(我只需要写一个DSLSpecification
,它接受一个dsl并将其传递给我的Itemservice。
也许我过于复杂了。