我开始阅读E. Evans DDD的第5章,并尝试使这些概念引人注目。
在ddd中,什么是实体,什么不是实体,什么是值对象?
看着Value object or entity object in my Hibernate mapping?-但这是关于Hibernate而不是DDD的,我问DDD
例如,如果我们使用了某个对象数据库,我们可能会将Order togeter与OrderLines一起存储,不是吗?
好,现在还有其他疑问。可以说我们有两个不同的系统,一个是Java,另一个是Python。一种用于计费,另一种用于营销。他们两个都有一个客户实体。
通常写成实体是可变的,而值对象是 一成不变的。
我们如何在下面用java和hibernate实现:
@Entity Person具有@Embedded Address,Person类具有getter和 设置者和仅地址获取者?并更改地址街道,我们 会像person.setAddress这样 (Address.builder(person.getAddress())。setStreet(“ newStreet”)。build()) ?
答案 0 :(得分:1)
由于存在多种矛盾的解释,因此很难找到所有答案的客观答案。
尽管通常,DDD实体和值对象与ORM实体和值有些相似,但是它们是非常不同的概念。两个主要原因是:
由于这些要点,也许还有其他要点,所以永远不要将ORM混入“真实”业务对象中。
请记住所有这些,让我们回答您的问题:
BillingCustomer
和MarketingCustomer
在概念上是不同的事物,因此即使它们背后的“真实”人是相同的,它们也永远不会相等。通常,“真实”在软件设计中具有不同的含义。我们认为属于业务一部分(即无所不在语言的一部分)的所有“真实”内容,即使从传统意义上讲,甚至部分甚至大部分都不是“真实”的。matches()
或sameCustomer()
等。HTH。