我对用于开发wcf的设计模式感兴趣。作为我正在寻找的一个例子:ChannelFactory类用于创建客户端和服务之间的通道;这表示抽象工厂模式或构建器模式的实现吗?还是两者的结合?我提出这个问题的原因是,在设计模式的记录中,其使用的例子经常被设计,特别是在如何将设计模式组合在一起的领域。在我看来,查看正在生产的现有软件的实际示例(例如wcf,尤其是因为一个人可以使用Reflector来对类及其对象模型进行详细检查)将极大地进一步理解设计模式。
答案 0 :(得分:3)
Abstract Factory基于Builder模式构建。它不知道如何创建一种类型的对象,而是知道如何创建许多不同但相关的对象类型。 Builder是模式的基本构建块,它将另一个对象的初始化封装在与对象或消费者代码不同的位置。 Abstract Factory使用Builder创建纯粹的制作,其唯一目的是创建对象。
更重要的是:
一般而言,服务(尤其是WCF)会大量使用适配器样式的模式,例如Proxy。 WCF服务创建一个看起来像服务端点后面的类的“代理”,但实际上是一个非常不同类型的类;代理类是代码(需要基本服务类)和服务实现(维护通信通道,序列化/反序列化等依赖类不应该知道的)之间的“适配器”,它位于类的顶层这是真正的工作。
正如您所发现的,任何必须处理通信渠道的事情通常都涉及工厂初始化代表数据通道的对象。这些对象很昂贵,并且需要了解消费类不应该知道的实现细节。
在幕后,服务调用表示使用Command模式。通过线路发送的消息封装了要调用的服务方法,该方法由Web服务器消化并转换为对附加到该服务端点的方法的调用。但是,因为看起来你实际上在调用方法,而不是封装要执行的操作并调用泛型方法,所以你可能不会认为它属于那个系列。
SOA中也存在异步和消息传递模式。