Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 什么时候课程太相似了_Oop_Design Patterns_Language Agnostic - Fatal编程技术网

Oop 什么时候课程太相似了

Oop 什么时候课程太相似了,oop,design-patterns,language-agnostic,Oop,Design Patterns,Language Agnostic,我想从POS系统中的销售数据生成报告 因此,我有一个ReportGenerator,它有一个列表 Ticket类表示收银机中的注册。这可以是销售票(直接销售票,发票销售票,…)或现金登记移动票,用于登记未经销售(例如,将钱带到银行)而离开或进入现金登记机的资金 InvoiceSalesTicket有一个invoiceNumber,而DirectSalesTicket没有。所以我可以上两门不同的课 对于CashInRegisterMovementTicket我可以创建两个类(CashInRegis

我想从POS系统中的销售数据生成报告

因此,我有一个
ReportGenerator
,它有一个
列表
Ticket
类表示收银机中的注册。这可以是
销售票
直接销售票
发票销售票
,…)或
现金登记移动票
,用于登记未经销售(例如,将钱带到银行)而离开或进入现金登记机的资金

InvoiceSalesTicket
有一个
invoiceNumber
,而
DirectSalesTicket
没有。所以我可以上两门不同的课

对于
CashInRegisterMovementTicket
我可以创建两个类(
CashInRegisterMovementTicket
CashOutRegisterMovementTicket
),它们是
CashInRegisterMovementTicket
固有的表示添加到收银机的钱或从收银机中取出的钱。 这将形成3个类,它们之间在内部没有真正的区别

当我想生成一份包含所有从收银机中取出的钱的报告时,我可以只取
列表
,并且只使用
现金出纳注册表移动票据
类型的报告

另一个例子:

销售票
列表

有些报告基于带有礼券的
salestick
因此,我有
NormalSalesLine
GiftCertificateSalesLine
,它们都是
SalesLine
固有的,但它们在内部是相同的

我觉得我有很多课程有时非常相似。
我遗漏了什么?

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


如果您有一些抽象方法在不同的SalesTicket类型(如CalculateTax()…)中实现不同,那么您就有理由使用多种类型。

如果在类之间重复测试,您就会知道类的行为太相似了。