我想在POS系统中根据销售数据进行报告。
所以,我的ReportGenerator
有一个List <Ticket>
Ticket
类代表收银机中的注册。这可以是SalesTicket
(DirectSalesTicket
,InvoiceSalesTicket
,...)或CashRegisterMovementTicket
,用于在没有销售的情况下注册离开或进入收银台的资金(例如,取款到银行)。
InvoiceSalesTicket
有一个invoiceNumber
DirectSalesTicket
没有。所以我可以选择2个不同的课程。
对于CashRegisterMovementTicket
我可以创建2个类(CashInRegisterMovementTicket
和CashOutRegisterMovementTicket
)来自CashRegisterMovementTicket
(这是Ticket
)的固有代表金钱的类加入收银机或从登记册中取出的钱。
这将产生3个类,在内部并没有真正的不同。
如果我想使用从收银机取出的资金生成报告,我可以使用List <Ticket>
并仅使用CashOutRegisterMovementTicket
类型的报告。< / p>
另一个例子:
SalesTicket
有List <SalesLine>
某些报告基于具有礼券的SalesTicket
我有NormalSalesLine
和GiftCertificateSalesLine
,这两者都是SalesLine
固有的,但在内部它们是相同的。
感觉我有很多课程有时非常相似。 我错过了什么?
答案 0 :(得分:1)
我认为您的方法很好,但是如果您只有一个带有TransactionType属性的SalesTicket(发票,直接销售,现金等),那么您可以在报告中使用该属性进行显示或过滤。
如果您有一些抽象方法在各种SalesTicket类型(如CalculateTax()...)中实现不同,那么您有充分的理由选择多种类型。