我有一个数据契约叫做User,它是可序列化的并且可以在网络上传输。我想要一个操作契约SaveUser()。我可以在我的服务契约中将SaveUser(User user)作为操作契约保存。但是我能否将其保留在我的数据契约本身中作为自己的行为?
Save()应该理想地自我保存。因此按照面向对象原则,每个数据契约都应该知道如何保存自己,并且细节应该从外部世界抽象出来。
在WCF中是否可能实现这一点?
在您的评论中提出问题后进行编辑: 不,当然不会(希望如此)。最坏的情况是您将拥有34个服务合同,每个平均有6个方法。如果您确定每个类上的每个方法都必须作为服务操作发生,那么才会出现这种情况。您需要考虑两个方面。方面1:您的服务设计。您应将34个类分组为有意义的组,并为每个组创建一个服务合同。例如,您可能最终会得到一个InventoryManagement服务,一个SalesOrderProcessing服务和一个BackOfficeOperations服务。每个服务包含与其领域中分组的类相关的服务操作(和数据合同)。 方面2:客户端上正在发生什么。我提到您必须考虑每个类的方法是否必须是WCF服务操作。当然,有理由在客户端上拥有丰富的完全封装的业务类。并且当它们的操作不需要作为服务操作执行时,这些操作将在客户端域中执行其逻辑。问题变成如何通过服务将它们传递到客户端,在这里您有两个选择:a)在客户端上实例化一个实例,并从由服务操作返回的DataContract填充其属性。 b)像CSLA框架一样直接从服务操作返回对象(我认为DevForce遵循类似的方法返回业务类通过WCF服务)。 希望对您有所帮助。