Hibernate实体和领域模型是同一个吗?
看下面的例子。
方法1 - 领域模型和实体是同一个类。领域模型“是一个”实体
@Entity
@Table(name = "agent")
class Agent
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "agent_number", unique = true, nullable = false)
private String agentNumber;
@Column(name = "agent_name", nullable = false)
private String agentName;
// Busines logic methods
}
方法2 - 域和实体是不同的函数。 域模型“具有”实体
class Agent
{
// Hibernate entity for this domain model
private AgentEntity agentEntity;
// Getters and setters to set the agentEntity attributes
// Business logic
}
从上述两种方法中,哪一种是实现DDD的正确方法?我认为第二种方式是正确的,因为您基本上控制了对敏感对象和封装对象(领域模型)的访问,而封装对象拥有领域模型的所有业务逻辑/操作。
但是我的同事们认为它们本质上是相同的。根据他们的说法,Hibernate Entity 的目的是在给定系统中代表领域模型。将实体建模为领域模型实际上使设计更简单。这是因为存储库接受实体来执行CRUD操作。
因此,如果模型“拥有”实体,则必须将存储库注入到领域模型中以保存实体。这会使设计变得不必要地复杂。