【发布时间】:2018-09-17 17:00:51
【问题描述】:
我正在使用 Spring Boot JPA 开发一个 DDD 项目。我使用基于注释的 orm 将域对象保存在 DAO 中。但是现在领域模型变得如此复杂,我考虑在领域实体上执行策略模式。
这是一个例子:
@Entity
class ComplexEntity {
@Id
private String id;
// ... other simple fields
// Example of a strategy object
// Which deals with complex logics
private StrategyObject strategyObject;
// Business methods here
public void doLogic(OtherEntity other) {
strategyObject.performOn(other);
// other logics...
}
}
当我像这样重构域对象时,orm 变成了一个我几乎无法处理的严重问题。有没有办法持久化这种复杂的域实体?
【问题讨论】:
-
数据库中的 StrategyObject 应该是什么样的?它是一个单独的表,引用当前表中的当前值还是一个/多个值?
-
我想在当前表中使其成为多个值,主要是因为策略对象通常取自具有太多字段和逻辑的原始类。策略对象的抽象有两个原因: 1. 原始类的缩写; 2. 轻松创建新类,只更改一小部分逻辑,而其他部分保持不变。
-
StrategyObject 是如何注解的?StrategyObject 应该在 ComplexEntity 中使用@OneToOne 进行注解,首先。请包含 StrategyObject 代码,以便了解需要保留哪些字段
-
StrategyObject 只是一些可能被其他类重用或扩展的字段和方法的包装。例如:原始类可能有这些东西:class Original { private int a;私人字符串 b; public void doSomething() { // 用 a, b 做某事... } class WithStrategy { private StrategyObject so; public void doSomething() { so.doSomething; }
标签: java orm domain-driven-design