我有一个Product对象。该产品在不同的地方/情况下征收不同的税率。有些产品根本不需要交税(例如:药品)
例如,购买产品可能会花费A店的$X和B店的$Y。在两个不同的州,它的成本可能不同(州的税收不同)。
我的问题是,我们是否可以使用属性来确定Product对象本身内部的税收。
例如,拥有如下属性是个好主意吗?
Boolean isImported ;
Boolean isTaxable ;或者我们有更好的设计模式来做这件事?
发布于 2011-06-15 17:45:01
首先,我相信这个问题没有一个好的答案。
您可以使用这些属性来确定Product内部的税收。但是,我建议使用一个单独的类(TaxCalculator?)这将根据其原产地、类型、交易等来计算Product的税收。其动机是Product应该仅代表产品数据;例如,一瓶葡萄酒为什么要关心分配给它的税收?应该有其他东西来做这件事,一些专门根据产品计算税收的东西。
但这只是我的观点,我并不认为它是最好的。我希望听到一些更有经验的用户的意见。
发布于 2011-06-15 17:55:31
产品不需要知道税收。税收与销售有逻辑上的联系,产品价格也是如此。在我们的应用程序中,我们有以下内容(简化):
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{
....
}发布于 2011-06-15 17:41:09
您当然可以将这些属性放在Product类中。
或者您可以创建一个单独的接口(TaxStrategy?)这将获取一个Product并返回一个Money tax amount:
public interface TaxStrategy {
Money calculateTax(Product p);
}这样,您就可以拥有不同的接口实现,从而以不同的方式计算税收。产品不需要知道它们是应税的。它将你销售的东西与你定价的方式分开。
https://stackoverflow.com/questions/6355758
复制相似问题