2012-09-20 67 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類。