1

我有一个与持久性相关的 java-ee 代码,我需要重写它以使应用程序在 Google App Engine 及其数据存储上运行。当我使用 java-ee 持久性提供程序时,我会使用我的 IDE 生成持久性实体,并将它们保持原样,以防我需要重新生成它们。但是,为应用程序引擎存储自动生成实体类是不可能的,我想知道是否有充分的理由让我保持实体类干净并且不使用与持久性没有直接关系的字段和方法。如果重要的话,我会使用 objectify 作为持久性提供者。

这是一个例子:

public class Dog {
  @Id Long id;
  @Transient Integer barkCount;

  public String bark() {
    barkCount++;
    return "woof-woof";
  }

  public String getAgeEstimation() {
    switch(barkCount) {
      case 0:     return "unborn (or very lazy)";
      case 10000: return "this is very old dawg";
      default:    return "you get the idea :)";
    }
  } 
}
4

1 回答 1

1

我想知道是否有任何充分的理由让我保持实体类的清洁并且不使用与持久性没有直接关系的字段和方法。

添加与持久性不直接相关但使用从数据存储中检索到的数据进行业务处理的方法并实际实现富域模型(与贫血域模型相比)并没有错。

因此,与其拥有过程式服务,不如将业务逻辑移动到富领域对象中。例如(取自使用 Java EE 6 的领域驱动设计):

@Entity
public class Load {

    @OneToMany(cascade = CascadeType.ALL)
    private List<OrderItem> orderItems;
    @Id
    private Long id;

    protected Load() {
        this.orderItems = new ArrayList<OrderItem>();
    }

    public int getShippingCosts() {
        int shippingCosts = 0;
        for (OrderItem orderItem : orderItems) {
            shippingCosts += orderItem.getShippingCost();
        }
        return shippingCosts;
    }
//...
}
于 2010-10-28T01:43:00.937 回答