Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 持续规范_C#_Persistence_Dsl_Specification Pattern - Fatal编程技术网

C# 持续规范

C# 持续规范,c#,persistence,dsl,specification-pattern,C#,Persistence,Dsl,Specification Pattern,我正在构建一个系统,用户可以订阅项目,并定期收到新项目的通知用户应该通过过滤某些属性来定义他们想要的项目。 我正在使用规范模式筛选项目。我的想法是,用户应该在web gui中定义自己的规范 过滤过程很简单: ItemService { public IEnumerable<Item> GetMatching(IEnumerable<Item> items, IItemSpecification spec) { return items.Wh

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

我正在使用规范模式筛选项目。我的想法是,用户应该在web gui中定义自己的规范

过滤过程很简单:

ItemService
{
    public IEnumerable<Item> GetMatching(IEnumerable<Item> items, IItemSpecification spec)
    {
        return items.Where(spec.IsMatch);
    }
}

IItemSpecification
{
    IsMatch(Item item);
}
ItemService
{
公共IEnumerable GetMatching(IEnumerable项,IItemSpecification)
{
退货项目。其中(规格IsMatch);
}
}
项目规格
{
IsMatch(项目);
}
问题是,保持每个用户不同规范的最佳方法是什么?我对如何坚持没有任何要求。关系数据库、文档数据库、xml等等

我能想到:

  • 编写外部DSL(并将其存储在rdb中的一个简单列中)

  • 为规范中的每个属性存储一行(在rdb中),指示要过滤的内容和修饰符(等于,大于)。这将导致相当多的行

  • 为每个规范创建一个新表(不知道这是否现实)

DSL选项似乎是最干净的解决方案(我只需要编写一个
DSL规范
,它接受DSL并将其传递给我的Itemservice)。
也许我把事情复杂化了。

如果你在数据库中过滤数据,优化是你的主要目标,那么你应该使用方法2,这是在数据库过程中使用它来构建动态查询的最简单方法。如果所有的工作都是在c中完成的,你应该使用DSL,或者只是将其存储为XML的序列化IItemSpecificationobject@Silx所有的过滤都完成了在c#中。将我的规范存储为xml可能会起作用。我只需要一种将所有子句表示为属性的方法。将对此进行实验。谢谢。