问题描述
|
我有一个产品对象。该产品在不同的地方/地区以不同的税率征税。
有些产品根本不需要征税(例如:药品)
例如,在商店A购买产品可能要花费$ X,在商店B可能要花费$ Y。在两个不同的州,其成本可能不同(州税不同)。
我的问题是,我们能否拥有确定Product对象本身内部税收的属性。
例如,拥有诸如
Boolean isImported ;
Boolean isTaxable ;
还是我们有更好的设计模式来做到这一点?
解决方法
首先,我相信对这个问题没有一个很好的答案。
您可以使用属性来确定ѭ1内的税款。但是,我建议使用一个单独的类(
TaxCalculator
?),该类将根据其来源,类型,交易等来计算Product
的税额。其动机是the1ѭ仅应代表产品数据。为什么要一瓶葡萄酒的保养税是多少?其他应该做的事情,就是专门根据产品计算税款的事情。
但这只是我的观点,我不认为这是最好的观点。我想听听一些经验丰富的用户的意见。
, 产品无需了解税金。税收在逻辑上与销售有关,产品价格也与销售有关。在我们的应用中,我们有以下内容(简化):
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{
....
}
, 您当然可以将这些属性放在Product类中。
或者,您可以创建一个单独的界面(TaxStrategy
?),该界面将花费Product
,并返回Money
税额:
public interface TaxStrategy {
Money calculateTax(Product p);
}
这样,您可以具有以不同方式计算税金的接口的不同实现。产品不必知道自己应纳税。它将您出售的商品与定价方式分开。