1

我正在构建一个系统,用户可以在其中订阅项目并定期收到新项目的通知。用户应该通过过滤某些属性来定义他们想要的项目。

我正在使用规范模式来过滤项目。我的想法是用户应该在 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 的方法。也许我把事情复杂化了。

4

0 回答 0