6

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

  • 平等的
  • 比...更棒
  • 包含

这些对象(让我称之为过滤器)不能包含任何逻辑(方法),只包含数据 - 过滤器类型和参数。并且必须有自然的方式将它们转换为服务器上的规范。这是从客户端看起来应该如何的示例:

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

所有标准操作(如 Equal、Greater、In、Between、StartsWith 等)都必须有过滤器类型,以及将它们与布尔运算符(and、or、not)组合的方法。

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


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

4

2 回答 2

4

只是一个高级答案-我相信您可以尝试支持您提到的所有逻辑和条件运算符的 LINQ 表达式。浏览System.Linq.Expressions命名空间以查看可用类型。

有用的链接:

于 2012-07-17T19:55:09.607 回答
2

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

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

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

于 2012-07-17T19:39:00.557 回答