WCF数据合同中是否包含WCF操作合同?为什么?

时间:2010-09-08 06:01:34

标签: wcf devforce

我有一个数据合同说用户。它是可序列化的,并且可以跨越线路。我想要一个Operation Contract SaveUser()。我可以将SaveUser(用户用户)作为操作合同保存在我的服务合同中。但是我可以将它作为自己的行为保存在我的数据合同中吗?

Save()理想情况下应该保存自己。因此,根据OO原则,每个数据合同都应该知道如何保存自己,并且细节应该从外部世界中抽象出来。

这可以在WCF中使用吗?

1 个答案:

答案 0 :(得分:9)

我会说不,这是正确的。 虽然我同意你的OO原则和封装,但WCF处理SO(面向服务)原则。 根据CD播放器和CD来考虑这一点。 CD播放器就是服务。 CD是数据合同。 OO原则要求CD具有Play方法以便能够自己发挥作用。但是,播放CD要比知道它的数据要多得多。有电子设备,输出插孔的接口等。这些都是由CD播放器......服务提供的。 这就是为什么您的服务合同具有Play方法,并接受CD作为数据合同,告诉它播放什么(而不是如何播放)。

在评论中的问题之后编辑: 当然没有(希望)没有。最糟糕的情况是,您将拥有34个服务合同,每个服务合同平均有6种方法。如果您确定每个类的每个方法都必须作为服务操作发生,那么情况就是这样。您需要考虑两个方面。方面1:您的服务设计。您应该将34个类分组为有意义的分组,而不是34个服务合同,并为每个组创建1个服务合同。例如,您最终可能会获得InventoryManagement服务,SalesOrderProcessing服务和BackOfficeOperations服务。这些服务中的每一个都包含与分组到其域中的类的范围相关的服务操作(和数据合同)。 方面2:客户端发生了什么。我提到你必须考虑每个类的方法是否必须是WCF服务操作。肯定有一种情况是在客户端上拥有丰富的完全封装的业务类。在他们的操作不需要作为服务操作执行的地方,这些操作在客户端域中执行他们的逻辑。问题变成了如何通过服务将它们传递给客户端,这里有两种选择:a)在客户端实例化一个实例,并从服务操作返回的DataContract中填充它的属性。 b)直接从服务操作返回对象,就像在CSLA这样的框架中完成(我认为DevForce遵循类似的方法通过WCF服务返回业务类)。 HTH