2008-10-07 81 views
2

我已经构建了一个复杂的查询机制,我想提供一个工厂以帮助具有常见查询模式的人员。我的方法都是通过WCF作为SOAP Web服务公开的。什么是确保我的工厂易于在所有可能希望使用我的服务的客户端使用的最佳方式(因为我不指望我的所有客户都使用.net)?使用WCF时创建工厂方法的最佳方法是什么?

更新:我想编写一些工厂方法来协助针对我写的“查询系统”的常见模式。我目前有多个OperationContracts从我的服务中暴露出来,并且也暴露了多个DataContracts。我对构建Factory的某些东西的最佳方式有一个心理障碍,即返回我的自定义查询对象以支持我认为他们需要的常见模式。

一个具体的例子就是一个方法根据一个搜索请求对象返回命中我的数据库,该对象有多个匹配概念的多个组,我的代码将所有这些转换为LINQ表达式树,搜索请求对象将限制结果为美国原产地的来源,这实际上是一组大约20个匹配项,并且可以移位,所以我不想显示硬编码的代码示例,而是希望仅返回组对象根据有关项目来源的数据,然后可以在搜索请求对象中使用这些数据。这对于像“GroupFactory.CreateGroupOfSomethingOrOther”这样的工厂方法来说听起来很理想,但是对于我来说这是最好的地方呢?或者,我只是想让它变得更加复杂,而不是它本应该是的?

回答

1

除非您以各自的母语为您的每位消费者提供图书馆,否则您无法真正提供工厂。 而不是返回分组对象的工厂,请考虑过滤添加一些需要较少粒度配置的过滤对象。

例如,而不是:

GetMatches(new GetMatchRequest() { 
     Filter = new FilterByState() { 
      "AZ", "CA", "OH", ... }}); 

考虑:

GetMatches(new GetMatchRequest() { Filter = new FilterByCountry("USA") }); 

所有常用的过滤器从类似FilterBase获得或实现IFilter。在服务器端,调用类似FilterBase.ConstructQueryObject()来返回更细粒度的对象。

相关问题