什么时候 类 太相似了
When are classes too similar
我想根据 POS 系统中的销售数据生成报告。
所以,我有一个 ReportGenerator
有一个 List <Ticket>
Ticket
class 表示在收银机中登记。这可以是 SalesTicket
(DirectSalesTicket
, InvoiceSalesTicket
,...) 或 CashRegisterMovementTicket
用于在没有销售的情况下离开或进入收银机的钱的登记(例如拿钱到银行)。
InvoiceSalesTicket
有 invoiceNumber
而 DirectSalesTicket
没有。所以我可以接受 2 个不同的 classes.
对于 CashRegisterMovementTicket
,我可以制作 2 classes(CashInRegisterMovementTicket
和 CashOutRegisterMovementTicket
),它们是 CashRegisterMovementTicket
(这是一个 Ticket
) 表示添加到收银机的钱或从收银机中取出的钱。
这将使 3 个 classes,它们在内部并没有真正的区别。
当我想生成一个包含所有从收银机中取出的钱的报告时,我可以只使用 List <Ticket>
并且只使用 CashOutRegisterMovementTicket
类型的那些.
另一个例子:
SalesTicket
有 List <SalesLine>
一些报告基于 SalesTicket
有礼券
所以我有 NormalSalesLine
和 GiftCertificateSalesLine
,它们都是 SalesLine
固有的,但在内部它们是相同的。
感觉自己有很多class有时很相似。
我错过了什么?
我认为您的方法很好,但是如果您只有一个交易类型为 属性(发票、直销、现金等)的 SalesTicket,那么您可以在 属性用于显示或过滤的报告。
如果您有一些在各种 SalesTicket 类型中以不同方式实现的抽象方法(如 CalculateTax()...),那么您有多种类型的充分理由。
我想根据 POS 系统中的销售数据生成报告。
所以,我有一个 ReportGenerator
有一个 List <Ticket>
Ticket
class 表示在收银机中登记。这可以是 SalesTicket
(DirectSalesTicket
, InvoiceSalesTicket
,...) 或 CashRegisterMovementTicket
用于在没有销售的情况下离开或进入收银机的钱的登记(例如拿钱到银行)。
InvoiceSalesTicket
有 invoiceNumber
而 DirectSalesTicket
没有。所以我可以接受 2 个不同的 classes.
对于 CashRegisterMovementTicket
,我可以制作 2 classes(CashInRegisterMovementTicket
和 CashOutRegisterMovementTicket
),它们是 CashRegisterMovementTicket
(这是一个 Ticket
) 表示添加到收银机的钱或从收银机中取出的钱。
这将使 3 个 classes,它们在内部并没有真正的区别。
当我想生成一个包含所有从收银机中取出的钱的报告时,我可以只使用 List <Ticket>
并且只使用 CashOutRegisterMovementTicket
类型的那些.
另一个例子:
SalesTicket
有 List <SalesLine>
一些报告基于 SalesTicket
有礼券
所以我有 NormalSalesLine
和 GiftCertificateSalesLine
,它们都是 SalesLine
固有的,但在内部它们是相同的。
感觉自己有很多class有时很相似。 我错过了什么?
我认为您的方法很好,但是如果您只有一个交易类型为 属性(发票、直销、现金等)的 SalesTicket,那么您可以在 属性用于显示或过滤的报告。
如果您有一些在各种 SalesTicket 类型中以不同方式实现的抽象方法(如 CalculateTax()...),那么您有多种类型的充分理由。