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

时间:2012-07-13 18:20:33

标签: c# design-patterns

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

  • 等于
  • GREATERTHAN
  • 包含

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

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

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

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


UPD:此任务暂时冻结,我开始认为任务定义本身存在问题。

2 个答案:

答案 0 :(得分:4)

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

有用的链接:

答案 1 :(得分:2)

你想要做的事情听起来就像Hibernate正在用criteria queries做的那样。您可以combine them但是您想要构建您感兴趣的过滤器。

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

此外,您可以在the same criteria queries上使用.NET(NHibernate)上的Hibernate端口(虽然我不确切知道API是否与Java相同)。