【发布时间】:2017-04-01 23:03:17
【问题描述】:
实现与从网站导出产品和导入订单的第 3 方系统的集成。
在设计中已经完成了一些 ddd 工作,我希望继续它。
是否应该用值对象覆盖订单和产品上的每个属性?
这意味着大约 100 个类来涵盖所有可能的属性,这似乎是多余的:
- ProductSku
- 产品名称
- 产品说明
- 产品价格
- 等等……
【问题讨论】:
实现与从网站导出产品和导入订单的第 3 方系统的集成。
在设计中已经完成了一些 ddd 工作,我希望继续它。
是否应该用值对象覆盖订单和产品上的每个属性?
这意味着大约 100 个类来涵盖所有可能的属性,这似乎是多余的:
【问题讨论】:
是否应覆盖订单和产品上的每个属性 一个值对象?
在我知道的任何语言中,原始值已经是值对象:不可变且没有标识(即字符串、数字等)。
如果您指的是“我是否应该创建一个新类来包含该数据 + 行为”,那么我会说 YAGNI。如果您找不到这样做的充分理由(您需要强类型,您需要隐式显式等),那么现在不要这样做。等到你需要它。
【讨论】:
是否应该用值对象覆盖订单和产品上的每个属性?
他们已经是了。真正的问题是,您是打算隐含地保留该覆盖,还是将其显式化。
这意味着大约 100 个类来涵盖所有可能的属性,这似乎是多余的:
哦,它有可能变得比这更纠结。例如,ProductPrice 包含了一个概念 Money(它与 ComputedTax 和 RoundedTax 相同),其中包括一个 Amount 和一个 CurrencyCode 来表示单位。
您可能需要认真考虑选择一种语言,在该语言中创建数百个不同的值类不会让人觉得过分。
另见:
【讨论】: