2012-01-27 69 views
2

我看到一些人推荐WCF服务调用数据层,让对象包含返回的数据,然后将其放入数据合同中。我的问题是为什么不把数据合约粘贴在数据层本身中,而只是将它们返回呢?这样做有缺点吗?我想问的原因是我的数据层只是一个类库,我希望能够从可能不使用web服务的多个平台调用它。我似乎无法找到有关这方面的最佳做法。有任何想法吗?将数据契约放在哪里WCF?确定要放入数据层?

回答

5

把你的合同放到你的数据层中的缺点是你要把你的数据层连接到你的服务合约上,而事实上他们不需要关心彼此。理想情况下,你的数据层应该负责完成它所说的内容。你可能要找的是Data Transfer Objects(DTO's)。他们只是将数据传输给客户。在你的服务层中,你可以将它们转换回它们各自的实体以完成任何需要的操作。这确实会产生开销,但是您需要一种映射DTO和实体来回的方法,例如使用AutoMapper

+0

谢谢,我会看看这个。感觉多余,虽然创造两个对象基本上做同样的事情。 – KingOfHypocrites 2012-01-27 19:24:18

+0

他们可能看起来一样,但他们不会做同样的事情。 DTO只做一件事,传输数据。他们是'愚蠢的',他们不应该包含任何行为,因为他们只用于传输数据到您的表示层。您的实体(或POCO的可能)通常会描述您的域模型的外观。 AutoMapper使得它很容易实现,所以这是一个不用担心的问题。 – diggingforfire 2012-01-27 19:28:11

+0

不要说它死亡......但不是说DataContracts没有行为,只用于存储数据?这不会让他们成为DTO吗?所以基本上你说的是,我返回在我的DAL中定义的类型是耦合问题?因此,您将所有数据合同定义在与服务层相同的图层中? – KingOfHypocrites 2012-01-27 19:36:07