C# 在哪里放置数据合同WCF?可以放入数据层吗?

C# 在哪里放置数据合同WCF?可以放入数据层吗?,c#,wcf,web-services,C#,Wcf,Web Services,我看到一些人建议WCF服务调用数据层,返回包含数据的对象,然后将其放入数据契约中。我的问题是,为什么不将数据契约粘贴在数据层本身,然后返回它们呢?这样做有缺点吗?我问这个问题的原因是,我的数据层只是一个类库,我希望能够从可能不使用webservice的多个平台调用它。我似乎找不到关于这个的最佳实践。有什么想法吗?将合同放在数据层中的缺点是,您将数据层与服务合同耦合在一起,而实际上它们不需要相互关心。理想情况下,您的数据层应该负责按照tin上的说明进行操作。您可能正在寻找的是(DTO)。他们只是想

我看到一些人建议WCF服务调用数据层,返回包含数据的对象,然后将其放入数据契约中。我的问题是,为什么不将数据契约粘贴在数据层本身,然后返回它们呢?这样做有缺点吗?我问这个问题的原因是,我的数据层只是一个类库,我希望能够从可能不使用webservice的多个平台调用它。我似乎找不到关于这个的最佳实践。有什么想法吗?

将合同放在数据层中的缺点是,您将数据层与服务合同耦合在一起,而实际上它们不需要相互关心。理想情况下,您的数据层应该负责按照tin上的说明进行操作。您可能正在寻找的是(DTO)。他们只是想把数据传送给你的客户。在servicelayer中,您可以将它们转换回各自的实体,以便执行任何需要执行的操作。不过,这确实会产生开销,您需要一种来回映射DTO和实体的方法,例如使用

谢谢,我将对此进行介绍。虽然创建两个基本上做相同事情的对象,但感觉多余。它们看起来可能相同,但做的事情不同。DTO只做一件事,传输数据。它们是“哑的”,不应该包含任何行为,因为它们只用于将数据传输到表示层。您的实体(或者POCO)通常描述域模型的外观。而且AutoMapper使实现这一点变得非常容易,所以这就不用担心了。不要把它说得死去活来。。。但是,您不认为数据契约没有行为,只用于存储数据吗?这难道不会让他们成为DTO吗?所以本质上你是说我返回DAL中定义的类型是耦合问题?因此,您将所有数据契约定义在与服务层相同的层中?您的DAL对使用您的服务的任何人都没有任何意义。如果您从服务中从DAL返回一个实体,那么您将客户机耦合到DAL。对DAL的所有更改都将反映在您的客户身上。如果将它们解耦,就不会出现这些问题。我会在服务层中定义契约,因为服务所做的是由契约描述的。