Java EJB、JPA将业务方法转换为实体

Java EJB、JPA将业务方法转换为实体,java,jakarta-ee,jpa,entity,Java,Jakarta Ee,Jpa,Entity,我从projectant得到了uml图,在实体中我得到了getTotalPrice()方法 这是我的课: public class UOrder { @OneToMany private List<Product> products; .... public BigDecimal getTotalPrice(){ BigDecimal b = new BigDecimal(0.0); for(Product p : products){

我从projectant得到了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;

 }

}
公共类UOrder{
@独身癖
私人上市产品;
....
公共BigDecimal getTotalPrice(){
BigDecimal b=新的BigDecimal(0.0);
对于(产品p:产品){
b、 添加(p.getPrice());
}
返回b;
}
}
这样做是个好主意?逻辑业务进入实体?
我在uml图中只有一个函数,而不是字段totalPrice或类似的东西,所以我想它一定是这样的

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

公共类UOrder{
...
公共BigDecimal getTotalPrice(){
退货价格util.getTotalPrice(产品);
}
}
公共类PriceUtil{
公共静态BigDecimal getTotalPrice(列出产品){
产品的退货金额;
}
…其他用户和花哨的价格函数。。。
}
因为您通常需要:

  • 计算增值税或
  • 作为产品或服务的其他类别的价格
  • 其他类别中的价格为UOrder
  • 等等

我觉得不错,但我更喜欢(伪代码):

公共类UOrder{
...
公共BigDecimal getTotalPrice(){
退货价格util.getTotalPrice(产品);
}
}
公共类PriceUtil{
公共静态BigDecimal getTotalPrice(列出产品){
产品的退货金额;
}
…其他用户和花哨的价格函数。。。
}
因为您通常需要:

  • 计算增值税或
  • 作为产品或服务的其他类别的价格
  • 其他类别中的价格为UOrder
  • 等等

    • 这更像是一个品味问题。例如,如果你喜欢哲学,这确实是一个好主意,因为总价格属于
      UOrder
      类。

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

      作为另一种观点(活动记录样式的数据映射对象只是以方便的形式保存的数据-值对象),我认为:

      考虑到你说的方法是业务逻辑,考虑到@Anton谈论的众所周知的领域,这是个坏主意。如果您没有说这是业务逻辑,我会问您为什么在应用程序中关心这个总数


      作为一个实验,考虑重新命名映射的类UOrdDATA,将其视为一个值对象,并有一个在应用层实现业务逻辑的UORD类。< /P> < P>作为一个替代的观点(活动记录样式数据映射对象只是一个方便的形式的持久数据-一个值对象),这就是我所想的:

      考虑到你说的方法是业务逻辑,考虑到@Anton谈论的众所周知的领域,这是个坏主意。如果您没有说这是业务逻辑,我会问您为什么在应用程序中关心这个总数

      作为一个实验,考虑重新命名映射的类UOrdDATA,将其视为一个值对象,并有一个在应用层实现业务逻辑的UORD类。

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