将规范模式暴露给客户端代码的标准做法?

vor*_*rou 6 c# design-patterns

我有一个N层应用程序,我使用规范模式.现在,我想提供一些方法来构建客户端代码的规范.它必须是几个预定义的选项,如下所示:

  • 等于
  • 比...更棒
  • 包含

这些对象(我称之为过滤器)不能包含任何逻辑(方法),只能包含数据 - 过滤器类型和参数.并且必须有自然的方式将它们转换为服务器规范.以下是客户端的外观示例:

var serviceClient = new DataModuleService();
var equalFilter = new ContainsFilter<Book>("Title","Lord of the Rings");
var lordOfTheRingBooks = serviceClient.GetBooks(equalFilter);
Run Code Online (Sandbox Code Playgroud)

还必须有所有标准操作的过滤器类型(如Equal,Greater,In,Between,StartsWith for string等)以及将它们与布尔运算符(和,或不是)组合的方法.

是否有一些模式/标准实践来实现这样的事情?


UPD:任务现在被冻结了,我开始认为任务定义本身存在问题.

Bog*_*dan 2

在我看来,您尝试做的事情就像Hibernate正在使用其条件查询所做的事情一样。您可以将它们组合起来,以构建您感兴趣的过滤器。

这不是 C#,但Java 和 C#是类似的语言,所以也许你可以借鉴那里的一些想法。

此外,您可以使用 Hibernate 在 .NET 上的端口 (NHibernate) 来执行相同的条件查询(尽管我不完全知道 API 是否与 Java 的相同)。