课程何时太相似

时间:2017-06-27 12:41:47

标签: oop design-patterns language-agnostic

我想在POS系统中根据销售数据进行报告。

所以,我的ReportGenerator有一个List <Ticket> Ticket类代表收银机中的注册。这可以是SalesTicketDirectSalesTicketInvoiceSalesTicket,...)或CashRegisterMovementTicket,用于在没有销售的情况下注册离开或进入收银台的资金(例如,取款到银行)。

InvoiceSalesTicket有一个invoiceNumber DirectSalesTicket没有。所以我可以选择2个不同的课程。

对于CashRegisterMovementTicket我可以创建2个类(CashInRegisterMovementTicketCashOutRegisterMovementTicket)来自CashRegisterMovementTicket(这是Ticket)的固有代表金钱的类加入收银机或从登记册中取出的钱。 这将产生3个类,在内部并没有真正的不同。

如果我想使用从收银机取出的资金生成报告,我可以使用List <Ticket>并仅使用CashOutRegisterMovementTicket类型的报告。< / p>

另一个例子:

SalesTicketList <SalesLine>

某些报告基于具有礼券的SalesTicket 我有NormalSalesLineGiftCertificateSalesLine,这两者都是SalesLine固有的,但在内部它们是相同的。

感觉我有很多课程有时非常相似。 我错过了什么?

1 个答案:

答案 0 :(得分:1)

我认为您的方法很好,但是如果您只有一个带有TransactionType属性的SalesTicket(发票,直接销售,现金等),那么您可以在报告中使用该属性进行显示或过滤。

如果您有一些抽象方法在各种SalesTicket类型(如CalculateTax()...)中实现不同,那么您有充分的理由选择多种类型。