将DataContract对象与my”分开是否是一种良好的做法;域名“;WCF服务中的对象?
我目前是一个项目的一部分,在这个项目中,我们托管了一个WCF服务,供某些客户访问。WCF解决方案分为4个不同的C#项目:将DataContract对象与my”分开是否是一种良好的做法;域名“;WCF服务中的对象?,wcf,domain-driven-design,datacontract,Wcf,Domain Driven Design,Datacontract,我目前是一个项目的一部分,在这个项目中,我们托管了一个WCF服务,供某些客户访问。WCF解决方案分为4个不同的C#项目: Host.csproj DataContracts.csproj Infrastructure.csproj Model.csproj 加入这个项目后,我立即想知道为什么有一个单独的项目用于“DataContract”对象,另一个用于“Model”对象。这两个项目基本上包含相同对象的副本。例如,在DataContract项目中,有一个具有4个属性的Customer对象,模型
Host.csproj
DataContracts.csproj
Infrastructure.csproj
Model.csproj
加入这个项目后,我立即想知道为什么有一个单独的项目用于“DataContract”对象,另一个用于“Model”对象。这两个项目基本上包含相同对象的副本。例如,在DataContract项目中,有一个具有4个属性的Customer对象,模型项目也有一个具有相同4个属性的Customer对象。。。我注意到,在应用程序代码中使用了很多automapper(映射),将datacontact对象映射到模型对象,然后在流经典型的服务存储库模式时将模型对象重新映射回数据契约对象。在该服务中生成结果所需的映射数量已经变得非常烦人
在询问了一些队友为什么选择这条路线后,我被告知DataContract不应该包含域逻辑,它们严格地说是用于通过线路发送的对象(所有域逻辑都应该使用对象的模型版本来完成)
我觉得这种方法有点不必要。难道我们不能放弃datacontracts项目,将我们的模型对象用于服务端的域逻辑和datacontracts吗
有人启发我
难道我们不能放弃datacontracts项目,使用我们的
为服务端上的域逻辑和
数据合同
是的,从物理上讲,您可以从服务中公开域对象,这可能会为您节省一两个映射
然而,让我们想象一下,在未来,域模型会根据业务需求而变化
- 现有的消费者对他们的合同很满意,不希望每次发布时都要更改,因此您只能进行一小部分可能的更改,或者您必须等到他们准备发布后才能进行更改
- 有一天,另一个商业消费者会出现,他们希望利用您的域功能。但他们不希望与现有消费者签订相同的合同。你如何在不破坏现有消费者的情况下为他们提供他们想要的
- 另一个开发团队希望在进程中使用您的域模型,因此您向它们发送一个程序集,但它们的部署服务器是.net 2.0,因此无法尝试加载System.Runtime.Serialization.dll