使用带有实体框架4的WCF服务和... DTO?

die*_*ego 8 c# asp.net-mvc wcf dto

如上所述,我正在实现一个多层体系结构,以便与WCF和实体框架4(使用poco)一起工作.既然我已经对POCO持续无知了,我确实需要实现DTO,或者我可以以纯粹的方式使用WCF吗?

主要的引用是 - 我确实需要DTO在网络上传递一个轻量级对象,或者我可以使用我的POCO实体.

你们推荐什么?

Joh*_*ell 3

除非你定义什么是“净道”,否则很难回答。我们是在谈论纯粹的 SOA 还是纯粹的 WCF?

WCF 代理在某种程度上已经是 DTO,因为它们不会在您的服务契约中带来任何业务逻辑。在 WCF 生成的代理类之上创建另一层 DTO 似乎是多余的。

您想要回答的最大问题是“这个解决方案是如何实现 SOA 的?”。如果您希望符合 SOA,则无法跨服务边界共享 POCO 实体。SOA 完全是关于不同的合同。

如果您完全基于 SOA,那么您会失去很多功能,因为您的 Web 层大多数时间使用的类将是愚蠢的代理。您必须重复大量逻辑,并且丢失了 MVC 2 提供的大量“元数据、约定优于配置”功能。

如果您将 SOA 流行语扔进粉碎机(您应该这样做(http://soafacts.com/)),那么您将可以更轻松地跨层共享业务逻辑和元数据信息。如果您的网络服务的唯一消费者是您自己,那么此方法可能是您的最佳选择。

您可以在此处使用 DTO 而不是 POCO 实体通过线路发送。唯一的缺点还是重复逻辑,以及大量毫无作用的样板仪式代码。实际上取决于您的项目的大小。如果规模很小,请忘记 DTO,但如果您有 20 名开发人员使用 200,000 LoC,则 DTO 可能值得创建。