【问题标题】:Passing DTOs around in the domain model在域模型中传递 DTO
【发布时间】:2010-07-15 01:02:23
【问题描述】:

我看到 DTO 类型在域模型中创建并在类型之间传递。这是好习惯吗?

我一直认为 DTO 主要用于上下文边界(即对象图的边缘)以解耦上下文实现(例如在域/ui 边界)。

【问题讨论】:

  • 根据我自己的感觉和目前的反应,我的目标是从域模型中分解出 DTO,并将它们推到我可以的边界,使用 Automapper 将域映射到 DTO。
  • +1 用于 AutoMapper,这就是我在 Entity Framework 模型中使用的。如果您将 EFv4 与 VS2010 一起使用,请告诉我。我有一些很棒的 T4 模板,可以自动创建 DTO 类、AutoMapper 配置以及类和扩展方法,以便在 DTO 和实体类型之间轻松转换(包括从 DTO 对象图中删除循环的能力,因此您可以轻松序列化为 JSON使用 DataContractJsonSerializer)。
  • @Samuel - 感谢 T4 的报价!不幸的是,我正在使用 NHibernate...

标签: dto software-design domain-model


【解决方案1】:

您的问题有点主观,但没关系。与大多数“硬性规定”一样,确实没有硬性规定。只有指导方针。总是有一个例外,或者一些特殊情况,最好的做法是做一些违背最佳实践的事情(比如使用goto 语句来立即跳出多个嵌套循环)。

话虽如此,不,在您的域模型中传递 DTO 类型并不是一个好习惯。 DTO 代表数据传输 对象,传输通常意味着跨越某个边界的传输。如果您停留在域模型中,则不应先转换为 DTO 类型,然后再转换回域类型。

【讨论】:

  • 谢谢。你的第一句话是“主观的”吗?不过,我必须同意你的观点——在域模型中创建 DTO 会限制灵活性,因为 DTO 缺乏封装功能的能力。
  • 哈!我的意思当然是“主观的”,感谢您理解(已编辑)。
【解决方案2】:

创建一个与您的域模型平行的 DTO 层次结构,只是为了分层纯度,对我来说似乎是一种反模式。我每次都会反对它。

EJB 1.0 鼓励以这种方式使用 DTO,因为传递健谈的实体 EJB 效率低下。人们会将数据加载到 DTO 中以避免网络流量。我觉得现在没必要了。

【讨论】:

    猜你喜欢
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 2010-10-28
    • 2019-08-03
    • 1970-01-01
    • 2011-07-16
    相关资源
    最近更新 更多