首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OOPs :针对以下场景建议设计

OOPs :针对以下场景建议设计
EN

Stack Overflow用户
提问于 2011-06-15 17:37:37
回答 3查看 523关注 0票数 1

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

例如,购买产品可能会花费A店的$X和B店的$Y。在两个不同的州,它的成本可能不同(州的税收不同)。

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

例如,拥有如下属性是个好主意吗?

代码语言:javascript
复制
                   Boolean isImported ;
                   Boolean isTaxable ;

或者我们有更好的设计模式来做这件事?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-15 17:45:01

首先,我相信这个问题没有一个好的答案。

您可以使用这些属性来确定Product内部的税收。但是,我建议使用一个单独的类(TaxCalculator?)这将根据其原产地、类型、交易等来计算Product的税收。其动机是Product应该仅代表产品数据;例如,一瓶葡萄酒为什么要关心分配给它的税收?应该有其他东西来做这件事,一些专门根据产品计算税收的东西。

但这只是我的观点,我并不认为它是最好的。我希望听到一些更有经验的用户的意见。

票数 3
EN

Stack Overflow用户

发布于 2011-06-15 17:55:31

产品不需要知道税收。税收与销售有逻辑上的联系,产品价格也是如此。在我们的应用程序中,我们有以下内容(简化):

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2011-06-15 17:41:09

您当然可以将这些属性放在Product类中。

或者您可以创建一个单独的接口(TaxStrategy?)这将获取一个Product并返回一个Money tax amount:

代码语言:javascript
复制
public interface TaxStrategy {
    Money calculateTax(Product p);
}

这样,您就可以拥有不同的接口实现,从而以不同的方式计算税收。产品不需要知道它们是应税的。它将你销售的东西与你定价的方式分开。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6355758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档