wcf - Entity Framework 代码优先 DTO 还是 UI 模型?

标签 wcf model entity-framework-4.1 dto

我正在创建一个全新的应用程序,包括数据库,并且我将使用 Entity Framework 代码优先。这还将使用 WCF 来提供服务,从而为不同设备的多个 UI 打开它,并使服务 API 可从其他未知应用程序中使用。

我在 SO 上的几篇文章中看到了这一点,但我没有看到与 Code First 相关的直接问题或答案,尽管有一些提到了 POCO。我要再次问这个问题,所以这里是 - 我真的需要使用 Entity Framework Code First 的 DTO 还是我可以使用该模型作为所有边界的一组公共(public)实体?我真的很想遵循 YAGNI 的思路,所以当我有一张干净的纸时,我想我会先解决这个问题。

谢谢, 保罗·斯佩兰萨

最佳答案

这个问题没有明确的答案,这也是您没有找到答案的原因。

您要构建提供 CRUD 操作的服务吗?这通常意味着您的服务将能够按原样返回、插入、更新和删除实体 = 您将始终向所有客户端公开整个实体或实体的单个精确定义的可序列化部分。但是,一旦您执行此操作,可能值得检查 WCF 数据服务。

您要公开与实体一起使用的业务外观吗?外观将提供真正的业务方法,而不仅仅是 CRUD 操作。这些业务方法将获取一些数据对象并将其分解为包装业务逻辑中的多个实体。在这里,为每个操作使用特定的 DTO 是有意义的。 DTO 将仅传输操作所需的数据,并仅返回允许的日期给客户端。

非常简单的例子。假设您的实体保留诸如 LastModifiedBy 之类的信息。这可能是您想要传回客户端的信息。在第一个场景中,您有单个可序列化集,因此您将其传递回客户端,客户端将其修改后传递回服务。现在您必须验证客户没有更改该字段,因为他可能没有这样做的权限。您必须对客户端无权更改的每个字段执行此操作。在第二种情况下,具有更新数据的 DTO 将根本不包含此属性(= 用于您的操作的专用 DTO),因此客户端将根本无法向您发送新值。

它可能与您处理数据的方式以及应用实际逻辑的位置有关。是在服务端还是在客户端?您如何确保客户不会发布无效数据?您想通过逻辑或特定传输对象来限制无效数据的传递吗?

关于wcf - Entity Framework 代码优先 DTO 还是 UI 模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7284138/

相关文章:

c# - 空 reference.cs 文件添加服务引用并选中重用类型选项

jquery - 在 MVC3 中使用 jQuery 函数和模型

python - 如何更新()由 Django ORM 上的 get()检索的单个模型实例?

c# - 在 Entity Framework 中,如何在保存之前调用实体上的方法

linq - 我应该将 DDD 聚合根存储库与 EF 4.1 + LINQ 一起使用吗?

wcf - 套接字连接被中止 - WCF

c# - WCF 中的动态对象不可能吗?

c# - 如何在 native C++ 程序中托管 WCF 服务

ruby-on-rails - 我应该将模型计算保存为属性吗?

c# - Entity Framework 以不确定的方式未经许可删除有效内容?