2010-09-08 78 views
6

我有一个数据合同说用户。它是可序列化的并穿过电线。我想要一个Operation Contract SaveUser()。我可以将SaveUser(用户用户)保留在我的服务合同中作为操作合同。但是,我可以将它作为自己的行为保存在我的数据合同中吗?WCF数据契约可以在其中包含WCF操作契约吗?为什么?

保存()应理想地保存自己。所以按照面向对象的原则,每一份数据合同都应该知道如何自救,细节应该从外部世界中抽象出来。

这是可能的WCF?

回答

9

我会说不,并且正确如此。 尽管我同意你关于面向对象的原则和封装,WCF处理SO(面向服务)原则。 从CD播放机和CD的角度考虑这一点。 CD播放器是服务。 CD是数据合同。面向对象原则会要求CD具有Play方法以便能够自己演奏。但是,播放CD还有许多事情要比了解数据。有电子设备,输出插口的接口等,这些都是由CD播放器...服务提供的。 因此,这就是为什么你的服务合同有Play方法,并接受CD作为数据契约,告诉它玩什么(而不是如何玩)。

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

+1

所以如果我在每个类中平均有6个公共方法的34个类,我会在服务中使用204个包装方法吗?这个可以吗? – 2010-09-08 11:12:40

+0

好的回答...非常有帮助清除我的疑惑。 – Pranav 2013-06-17 09:18:59

相关问题