1

我从投影仪得到了 uml 图并进入了实体我有方法 getTotalPrice()

所以这是我的课:

public class UOrder {

   @OneToMany
   private List<Product> products;

   ....
   public BigDecimal getTotalPrice(){
   BigDecimal b = new BigDecimal(0.0);
   for(Product p : products){
   b.add(p.getPrice());
   }
   return b;

 }

}

这样做是个好主意吗?将逻辑业务转化为实体? 我在 uml 图中只有函数而不是字段 totalPrice 或类似的东西,所以我发现它一定是这样的......

4

3 回答 3

1

这更像是一个品味问题。例如,如果您喜欢领域驱动设计理念,这是一个非常好的主意,因为总价格属于UOrder该类。

于 2012-09-20T21:20:25.077 回答
0

我认为还不错,但我更喜欢(伪代码):

public class UOrder {
    ...
    public BigDecimal getTotalPrice() {
        return PriceUtil.getTotalPrice(products);
    }
}

public class PriceUtil {
    public static BigDecimal getTotalPrice(List<Product> products) {
        return sum-of-products;
    }
    ... other userful and fancy price functions ...
}

因为你通常需要:

  • 计算增值税或
  • 其他类别的价格作为产品或
  • 其他类别的价格为 UOrder
  • 等等。
于 2012-09-20T21:19:47.380 回答
0

作为另一种观点(活动记录样式数据映射对象只是方便形式的持久数据 - 值对象),这是我的想法:

鉴于您已经说过该方法业务逻辑,并且考虑到@Anton 谈到的众所周知的领域 - 这是一个坏主意。如果您没有说这是业务逻辑,我会质疑您为什么关心应用程序中的总数。

作为一个实验,考虑重新命名您的映射类 UOrderData,将其视为一个值对象,并拥有一个在应用程序级别实现业务逻辑的 UOrder 类。

于 2012-09-20T23:06:30.747 回答