2012-09-20 71 views
1

我从projectant了UML图,进入实体我有方法getTotalPrice()EJB,JPA业务方法进入实体

所以这是我的课:

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或类似的东西,所以我知道它必须是这样的...

回答

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 ... 
} 

,因为你通常需要:

  • 到calcuate增值税或
  • 价格等类的如产品或
  • 其他类价格如UOrder
  • 等。
1

这更像是一种品味问题。例如,如果您喜欢Domain Driven Design哲学,这是一个非常好的主意,因为总价格属于UOrder课程。

0

由于视图交替点(活动记录风格的数据映射对象是只是一个方便的形式持续的数据 - 值对象),这里就是我想:

既然你说,方法商业逻辑,并给予@安顿谈到的着名域名 - 这是一个坏主意。如果你的没有说这是业务逻辑,我会质疑你为什么在你的应用程序中关心这个总数。

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