【问题标题】:Are DTO anemic model/anemic value object?DTO 贫血模型/贫血值是对象吗?
【发布时间】:2017-10-29 07:49:32
【问题描述】:

贫血模型是没有...的模型

“贫血域模型是使用软件域模型,其中域对象包含很少或不包含业务逻辑(验证、计算、业务规则等)。”

DTO 是没有业务逻辑的贫乏模型吗?而且,又是一个没有业务逻辑的小对象?

【问题讨论】:

  • 有两种对象。 Data structures and "real" Objects。 DTO 只是一种数据结构,OO 设计指南不适用于这些结构。
  • 我同意 p|a|x。它与意图有关。如果一个数据结构仅用于传输数据并且意图是这样使用它,那么它不能被归类为“贫血”。如果打算在你的领域模型中使用这样的结构,它肯定贫血的。
  • @sensorario martinfowler.com/eaaCatalog/dataTransferObject.html (关于第 3d 段的评论:历史证明了 Fowler 对价值对象的定义是正确的,而“Sun 社区的”是错误的)

标签: domain-driven-design dto value-objects anemic-domain-model


【解决方案1】:

首先,让我们将行为分为两部分:读取行为和写入行为,因此我们说的是同一种语言。

DTO 是没有业务逻辑的贫乏模型吗?

你不能说 DTO 是贫血的或不是,因为 DTO 是不可变的,而且贫血仅在架构的变异/写入方面才有意义(例如 CQRS 中的命令方面),但如果我们稍微强加一下这个术语是的,根据定义,DTO 是贫血的并且没有行为(既不读也不写):“DTO does not have any behavior except for storage and retrieval of its own data”。

Value object 具有行为(读取行为)。例如,它实现了测试两个值对象是否相等的行为。

为了稍微扩展答案,Aggregate roots 和嵌套的Entities 具有写入端的行为(各种验证)。

【讨论】:

    猜你喜欢
    • 2011-09-19
    • 2010-10-28
    • 1970-01-01
    • 2018-12-14
    • 2010-11-04
    • 1970-01-01
    • 2010-12-26
    • 2011-08-17
    • 2020-01-29
    相关资源
    最近更新 更多