c# - 将 WCF 服务与 Entity Framework 4 和...DTO 一起使用?

标签 c# asp.net-mvc wcf dto

如上所述,我正在实现一个多层架构以使用 WCF 和 Entity Framework 4(使用 poco)。由于我已经对 POCO 有持久性的无知,我确实需要实现 DTO 或者我可以以其纯粹的方式使用 WCF?

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

你们推荐什么?

最佳答案

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

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

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

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

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

这是您可以使用 DTO 代替 POCO 实体通过网络发送的地方。唯一的缺点又是,重复逻辑,以及大量无所事事的样板仪式代码。真的取决于你的项目的大小。如果它很小,请忘记 DTO,但如果您有 20 个开发人员处理 200,000 个 LoC,那么 DTO 可能值得创建。

关于c# - 将 WCF 服务与 Entity Framework 4 和...DTO 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2006142/

相关文章:

c# - 将 double 值导出到 CSV

c# - 我收到 404 错误 - asp.net web api

c# - Moq - 使用 VerifySet 检查调用次数

javascript - 在mvc中使用datepicker不起作用

c# - 一次性上下文对象模式

c# - 是否可以自动为 SQL Server 和 LINQ to SQL 中的所有表名添加前缀?

asp.net-mvc - MVC 3 ninject 绑定(bind)惰性评估参数

c# - WCF 日志记录,设置最大文件大小?

.net - 托管实现通用接口(interface)的 C# 通用类的 WCF 服务

wcf - 开源 Web 服务/WCF 媒体流