什么时候 类 太相似了

When are classes too similar

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

所以,我有一个 ReportGenerator 有一个 List <Ticket> Ticket class 表示在收银机中登记。这可以是 SalesTicket (DirectSalesTicket, InvoiceSalesTicket,...) 或 CashRegisterMovementTicket 用于在没有销售的情况下离开或进入收银机的钱的登记(例如拿钱到银行)。

InvoiceSalesTicketinvoiceNumberDirectSalesTicket 没有。所以我可以接受 2 个不同的 classes.

对于 CashRegisterMovementTicket,我可以制作 2 classes(CashInRegisterMovementTicketCashOutRegisterMovementTicket),它们是 CashRegisterMovementTicket(这是一个 Ticket) 表示添加到收银机的钱或从收银机中取出的钱。 这将使 3 个 classes,它们在内部并没有真正的区别。

当我想生成一个包含所有从收银机中取出的钱的报告时,我可以只使用 List <Ticket> 并且只使用 CashOutRegisterMovementTicket 类型的那些.

另一个例子:

SalesTicketList <SalesLine>

一些报告基于 SalesTicket 有礼券 所以我有 NormalSalesLineGiftCertificateSalesLine,它们都是 SalesLine 固有的,但在内部它们是相同的。

感觉自己有很多class有时很相似。 我错过了什么?

我认为您的方法很好,但是如果您只有一个交易类型为 属性(发票、直销、现金等)的 SalesTicket,那么您可以在 属性用于显示或过滤的报告。

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