bas*_*iat 1 design-patterns domain-driven-design
我开始阅读 E. Evans DDD 的第 5 章,并尝试对这些概念进行头或尾。
在 ddd 的上下文中,什么是实体,什么不是实体,什么是值对象?
在我的 Hibernate 映射中查看Value 对象或实体对象?- 但它是关于 Hibernate,而不是 DDD,我问的是 DDD
例如,如果我们使用了某个对象数据库,我们可能会将 Order 与其 OrderLines 一起存储,不是吗?
好的,现在还有其他疑问。假设我们有两个不同的系统,一个是 Java,另一个是 Python。一个用于计费,另一个用于营销。他们都有一个客户实体。
人们常说实体是可变的,而值对象是不可变的。
我们将如何使用 java 和 hibernate 在下面实现:
@Entity Person 有 @Embedded Address,Person 类有 getter 和 setter,而 Address 只有 getter ?要更改地址街道,我们会像 person.setAddress (Address.builder(person.getAddress()).setStreet("newStreet").build()) 那样做?
寻找所有这些的客观答案可能很困难,因为存在多种相互矛盾的解释。
一般来说,DDD 实体和值对象与 ORM 实体和值有一些相似之处,但它们是非常不同的概念。主要原因有两个:
由于这些点,可能还有其他点,ORM 永远不应该混入“真正的”业务对象中。
因此,考虑到所有这些,让我们回答您的问题:
BillingCustomer并且MarketingCustomer是概念上不同的东西,因此它们永远不会相等,即使它们背后的“真实”人类是相同的。一般而言,“真实”在软件设计中具有不同的含义。我们认为作为业务一部分(即无处不在语言的一部分)的一切都是“真实的”,即使其中一些甚至大部分不是传统意义上的“真实”。matches()、 或sameCustomer()等。哈。