坚持规范

时间:2011-03-08 17:22:13

标签: c# persistence dsl specification-pattern

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

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

0 个答案:

没有答案