OOP:为以下场景建议设计

时间:2011-06-15 09:37:37

标签: java oop

我有一个Product对象。产品在不同的地方/情况下以不同的税率征税。    有些产品根本没有征税(例如:医药)

例如,购买该产品可能在商店A中花费$ X而在商店B花费$ Y.在两种不同的州(州税不同)可能会有不同的成本。

我的问题是,我们是否可以使用属性来确定Product对象本身内的税收。

例如,拥有诸如

之类的属性是个好主意
                   Boolean isImported ;
                   Boolean isTaxable ;

或者我们有更好的设计模式来做到这一点吗?

3 个答案:

答案 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);
}

通过这种方式,您可以使用不同的界面实现,以不同的方式计算税收。产品无需知道它们是应纳税的。它将您销售的东西与您定价的方式分开。