domain-driven-design - POCO 与 DTO : Is it ok to partially hydrate a domain object?

标签 domain-driven-design poco dto

通常需要在 UI 上以各种方式显示域对象;列表、搜索结果、查看和编辑页面,以及页眉、页脚和弹出窗口。通常,域对象有几个不同的“ View ”,每个 View 都显示不同的字段。

大多数建议似乎是在您需要子集或超集时使用 DTO 来获取数据。维护 DTO 有很多开销。简单地填充每个场景所需的域对象的属性是否是一种不好的方法。例如,您可以使用配置文件来说明应该包含哪些属性,例如:

service.GetDomainObjects(int listID, Profile.ListProfile);
service.GetDomainObjects(string searchParam, Profile.SearchProfile);

最佳答案

对我来说,这归结为您希望开销在哪里,或者您将拥有一组不同的类来表示您的 DTO,或者您将拥有一组方法,每个方法都返回相同的域对象,但是不同的领域被“水化”。

我会问几个问题来帮助做出决定:

  • 为整个物体补水的开销是多少?增加的复杂性(DTO 或部分水合的对象)真的值得吗?
  • 其他人会使用您的代码吗?您不要将人们与部分水合对象混淆,当人们来维护您的代码时,DTO 可能会更清楚。

  • 我个人对 DTO 有点偏爱,因为我觉得你的系统的长期维护会更容易。如果你是一个单人乐队,或者这是一个一次性的应用程序,我完全可以理解不想引入一堆会使你的代码变得困惑的额外类。

    关于domain-driven-design - POCO 与 DTO : Is it ok to partially hydrate a domain object?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/825843/

    相关文章:

    c# - DDD 层 - 与实体的通信

    c# - 用于 C# POCO 的简单撤消/重做系统

    c# - 如何使用 AutoMapper 将数据填充回 DataTable?

    domain-driven-design - DDD 存储库中的过滤器

    domain-driven-design - 如何使用事件溯源实现复杂形式的命令和事件?

    c# - MVC 3-这将如何运作?

    c++ - POCO C++ 简单表单提交示例不起作用

    Python:快速和肮脏的数据类型(DTO)

    collections - AutoMapper 和接口(interface)类型的集合

    oop - 存储库、服务或域对象 - 逻辑属于哪里?