Oop 什么时候课程太相似了
我想从POS系统中的销售数据生成报告 因此,我有一个Oop 什么时候课程太相似了,oop,design-patterns,language-agnostic,Oop,Design Patterns,Language Agnostic,我想从POS系统中的销售数据生成报告 因此,我有一个ReportGenerator,它有一个列表 Ticket类表示收银机中的注册。这可以是销售票(直接销售票,发票销售票,…)或现金登记移动票,用于登记未经销售(例如,将钱带到银行)而离开或进入现金登记机的资金 InvoiceSalesTicket有一个invoiceNumber,而DirectSalesTicket没有。所以我可以上两门不同的课 对于CashInRegisterMovementTicket我可以创建两个类(CashInRegis
ReportGenerator
,它有一个列表
Ticket
类表示收银机中的注册。这可以是销售票
(直接销售票
,发票销售票
,…)或现金登记移动票
,用于登记未经销售(例如,将钱带到银行)而离开或进入现金登记机的资金
InvoiceSalesTicket
有一个invoiceNumber
,而DirectSalesTicket
没有。所以我可以上两门不同的课
对于CashInRegisterMovementTicket
我可以创建两个类(CashInRegisterMovementTicket
和CashOutRegisterMovementTicket
),它们是CashInRegisterMovementTicket
固有的表示添加到收银机的钱或从收银机中取出的钱。
这将形成3个类,它们之间在内部没有真正的区别
当我想生成一份包含所有从收银机中取出的钱的报告时,我可以只取列表
,并且只使用现金出纳注册表移动票据
类型的报告
另一个例子:
销售票
有列表
有些报告基于带有礼券的salestick
因此,我有NormalSalesLine
和GiftCertificateSalesLine
,它们都是SalesLine
固有的,但它们在内部是相同的
我觉得我有很多课程有时非常相似。
我遗漏了什么?我认为您的方法很好,但是如果您只有一张带有TransactionType属性(发票、直销、现金等)的SalesTicket,那么您可以在报告中使用该属性进行显示或筛选
如果您有一些抽象方法在不同的SalesTicket类型(如CalculateTax()…)中实现不同,那么您就有理由使用多种类型。如果在类之间重复测试,您就会知道类的行为太相似了。