面向对象:建议针对以下场景进行设计

问题描述

| 我有一个产品对象。该产品在不同的地方/地区以不同的税率征税。    有些产品根本不需要征税(例如:药品) 例如,在商店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);
}
这样,您可以具有以不同方式计算税金的接口的不同实现。产品不必知道自己应纳税。它将您出售的商品与定价方式分开。