我正在构建一个系统,用户可以在其中订阅项目并定期收到新项目的通知。用户应该通过过滤某些属性来定义他们想要的项目。
我正在使用规范模式来过滤项目。我的想法是用户应该在 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 的方法。也许我把事情复杂化了。