有几个关于这个问题的问题,阅读它们并没有帮助我。在Eric Evans DDD中,他举了地址在某些情况下是值类型的例子。对于一个邮购公司来说,地址是一个值类型,因为地址是否共享,谁还住在这个地址上并不重要,重要的是包裹能够到达这个地址。
这对我来说很有道理,直到我开始考虑如何设计它。根据第99页的图表,他将其设计如下:
+------------+
|Customer |
+------------+
|customerId |
|name |
|street |
|city |
|state |
+------------+
这将变为:
+------------+
|Customer | (entity)
+------------+
|customerId |
|name |
|address |
+------------+
+------------+
|Address | (value object)
+------------+
|street |
|city |
|state |
+------------+
如果这些是表格,地址将拥有自己的ID以便与客户建立关系,从而将其转化为实体。
在关系数据库中,这些内容将保留在同一张表中,例如第一个示例中,您可以使用ORM的功能将地址抽象为值对象(例如nHibernate的组件功能)。
我意识到他几页之后谈到了去规范化,我只是想确保我正确理解了这个概念。