使用WCF时创建工厂方法的最佳方法是什么?

时间:2008-10-07 14:51:21

标签: c# .net wcf web-services

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

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

一个具体的例子是一个方法基于具有多个匹配概念的多个组的搜索请求对象返回我的数据库上的命中,我的代码将所有这些转换为LINQ表达式树,这个搜索中的一个公共组请求对象将结果限制为美国原点的源,这实际上是一组约20个匹配并且可以移位,因此我不想显示硬编码的代码示例,而是仅返回基于组对象关于物品来源的数据,然后他们可以在搜索请求对象中使用这些数据。对于像“GroupFactory.CreateGroupOfSomethingOrOther”这样的工厂方法来说,这听起来很理想,但对我来说这是最好的选择吗?或者我只是在脑子里做这个比它应该更复杂的事情了?

1 个答案:

答案 0 :(得分:1)

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

例如,而不是:

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

考虑:

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

所有常见过滤器都来自FilterBase或实现IFilter之类的内容。在服务器端,调用FilterBase.ConstructQueryObject()之类的东西来返回更细粒度的对象。