2010-01-05 31 views
8

如上所述,我正在实现一个多层体系结构,以便与WCF和Entity Framework 4(使用poco)一起工作。由于我已经对POCO持久性无知,我需要实现DTO,或者我可以以纯粹的方式使用WCF?在Entity Framework 4和... DTO中使用WCF服务?

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

你们推荐什么?

+1

DTO和POCO是不一样的。看看[这个不错的帖子](http://rlacovara.blogspot.com/2009/03/what-is-difference-between-dto-and-poco.html?m=1)。如果最终使用DTO,请考虑使用[EntitiesToDTOs](http://entitiestodtos.codeplex.com)从Entity Framework EDMX文件中自动生成DTO。 – kzfabi 2013-01-24 02:33:13

回答

3

除非您定义“纯粹的方式”,否则很难回答。我们在谈论SOA纯粹还是纯粹WCF?

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

您想回答的最大问题是“SOA如何解决这个问题?”。如果你想成为符合SOA的标准,你不能跨服务边界共享你的POCO实体。 SOA完全是关于不同的合同。

如果你所有的SOA都基于SOA而不是你失去了很多功能,因为你的Web层将在大多数时间工作的类将是愚蠢的代理。你必须重复很多逻辑,并且你失去了很多MVC 2提供的“元数据,约定配置”功能。

如果您将SOA流行词放入粉碎机中,您应该这么做(http://soafacts.com/),那么跨层的业务逻辑和元数据信息共享将更容易。如果您的Web服务的唯一使用者是您自己而不是此方法,那么您可能是您的最佳选择。

这是您可以使用DTO通过电线发送而不是POCO实体的地方。唯一的缺点是,重复逻辑,大量的锅炉仪式代码什么都不做。真的取决于你的项目的大小。如果它很小,忘记DTO,但是如果你有20个开发人员使用200,000个LoC而不是DTO,那么可能值得创建。

1

正如jfar所说,它取决于你是否只是一个服务的消费者,或者表示层是否只是你。

如果你正在做的更晚,它只会是你使用你的服务,那么你可以连载你的POCOs跨越wcf服务的边界。这是我最近做的事,并写了这个blog post关于它的工作。这将允许您在应用层和表示层中使用相同的实体。

希望它有帮助。

1

当在EF中使用WCF时推荐DTO的最强有力的理由是EF数据库优先级将实现依赖性拖拽到您的代理类中。如果您使用POCO类首先使用代码,那么应该没有实现依赖关系。

尝试仅返回您的POCO类,但仔细查看生成的代理类。确保EF基础结构的这些类中没有任何内容。如果代理类是干净的,那么你应该全部设置好。

相关问题