我有一個Product對象。產品在不同的地點/場合以不同的稅率徵稅。 部分產品根本不需要納稅(例如:醫藥)OOPs:針對以下情況建議設計
例如,購買產品可能會在A店購買$ X,在B店購買$ Y。它在兩個不同的州可以有不同的成本(州稅是不同的)。
我的問題是,我們可以有屬性來確定產品對象本身的稅收。
例如它是一個好主意,有屬性,如
Boolean isImported ;
Boolean isTaxable ;
或者我們有更好的設計模式來做到這一點?
我有一個Product對象。產品在不同的地點/場合以不同的稅率徵稅。 部分產品根本不需要納稅(例如:醫藥)OOPs:針對以下情況建議設計
例如,購買產品可能會在A店購買$ X,在B店購買$ Y。它在兩個不同的州可以有不同的成本(州稅是不同的)。
我的問題是,我們可以有屬性來確定產品對象本身的稅收。
例如它是一個好主意,有屬性,如
Boolean isImported ;
Boolean isTaxable ;
或者我們有更好的設計模式來做到這一點?
首先,我相信這個問題沒有單一的,很好的答案。
您可以通過屬性來確定Product
中的稅額。但是,我建議有一個單獨的類(TaxCalculator
?),根據其來源,類型,交易等計算Product
的稅額。動機是Product
應該僅代表產品數據;爲什麼要一瓶酒護理分配給它什麼稅?還有些東西應該這樣做,這是專門用於根據產品計算稅款的東西。
但這只是我的看法,我並不認爲它是最好的。我想聽聽一些更有經驗的用戶。
你當然可以把這些屬性放在Product類中。
或者你可以創建一個單獨的接口(TaxStrategy
?),將採取Product
並返回一個Money
稅額:
public interface TaxStrategy {
Money calculateTax(Product p);
}
這樣,你可以有不同的方式計算稅款接口的不同實現。產品不需要知道他們是應稅的。它將您銷售的東西與您定價的方式分開。
產品無需瞭解稅。稅收在邏輯上與銷售有關,產品價格也是如此。在我們的應用程序中,我們有以下(簡化):
public class Invoice {
private InvoiceItem[] invoiceItems;
}
public class InvoiceItem{
private ProductPrice productPrice;
private BigDecimal taxRate;
}
public class ProductPrice{
private Product product;
private BigDecimal price;
private String currencyCode;
}
public class Product{
....
}
它是否像戰略模式? – vinoth 2011-06-15 09:42:54
我選擇的班級名稱無疑表明了這一點。答案會改變你對這個建議的感覺嗎? – duffymo 2011-06-15 09:51:10
我的問題是,即使我有一個類似於上面建議的界面的界面,我仍然會傳遞產品,並且產品必須包含一些關於(例如)是否已導入或應稅等信息? – vinoth 2011-06-15 09:53:05