我有一个Product对象。产品在不同的地方/情况下以不同的税率征税。 有些产品根本没有征税(例如:医药)
例如,购买该产品可能在商店A中花费$ X而在商店B花费$ Y.在两种不同的州(州税不同)可能会有不同的成本。
我的问题是,我们是否可以使用属性来确定Product对象本身内的税收。
例如,拥有诸如
之类的属性是个好主意 Boolean isImported ;
Boolean isTaxable ;
或者我们有更好的设计模式来做到这一点吗?
答案 0 :(得分:3)
首先,我认为这个问题没有一个好的答案。
您可以使用属性来确定Product
内的税金。但是,我建议有一个单独的类(TaxCalculator
?),根据其来源,类型,交易等计算Product
的税。动机是{{1} }应仅代表产品数据;为什么要这样一瓶葡萄酒护理分配给它的税收是多少?还有别的东西应该做,专门根据产品计算税收。
但这只是我的意见,我并不认为这是最好的。我想听听一些更有经验的用户。
答案 1 :(得分:2)
产品无需了解税收。税收在逻辑上与销售相关,产品价格也是如此。在我们的应用程序中,我们有以下(简化):
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{
....
}
答案 2 :(得分:1)
您当然可以将这些属性放在Product类中。
或者您可以创建一个单独的界面(TaxStrategy
?),该界面需要Product
并返回Money
税额:
public interface TaxStrategy {
Money calculateTax(Product p);
}
通过这种方式,您可以使用不同的界面实现,以不同的方式计算税收。产品无需知道它们是应纳税的。它将您销售的东西与您定价的方式分开。