我使用Spring启动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变成了一个我几乎无法处理的严重问题。有没有解决方案来坚持这种复杂的域实体?
答案 0 :(得分:0)
不幸的是,这不能用JPA完成,但Hibernate支持这种可能性。
答案 1 :(得分:0)
我会创建一个枚举
public enum Strategy {
public abstract StrategyObject getImplementation();
STRATEGY_1 {
public StrategyObject getImplementation() {
return new Strategy1();
},
STRATEGY_2 {
public StrategyObject getImplementation() {
return new Strategy2();
}
}
然后在您的实体中引用策略枚举:
@Entity
class ComplexEntity {
@Id
private String id;
@Enumerated(EnumType.STRING)
private Strategy strategy;
public void doLogic(OtherEntity other) {
strategy.getImplementation().performOn(other);
}
}
编辑:我想我错过了策略可能需要存储大量配置的部分。但也许这是一个开始。