2017-06-27 11 views
2

私はPOSシステムの販売データからレポートを作成したいと思います。クラスがあまりにも似ている場合

だから、私はList <Ticket> Ticketクラスがレジでの登録を表していReportGeneratorを持っています。これは、販売なしで金銭を預け入れる金銭の登録(例えば、銀行への預金)のためにSalesTicketDirectSalesTicketInvoiceSalesTicket、...)またはCashRegisterMovementTicketとすることができます。

InvoiceSalesTicketは、にはないinvoiceNumberを持っています。だから私は2つの異なるクラスを持つことで大丈夫です。私は2クラス(CashInRegisterMovementTicketCashOutRegisterMovementTicketCashRegisterMovementTicketから固有のものを作ることができCashRegisterMovementTicketについては

Ticketである)レジスタから取り出したレジやお金に追加されたお金を表します。 これは3つのクラスを作成しますが、実際には内部的には違いはありません。

キャッシュレジスタから取り出されたお金を使ってレポートを生成する場合は、List <Ticket>とし、CashOutRegisterMovementTicketタイプのもののみを使用してください。

もう一つの例:

SalesTicketは、いくつかのレポートは商品券 を持ってSalesTicketに基づいていますList <SalesLine>

ているので、私はSalesLineから両方の固有NormalSalesLineGiftCertificateSalesLine、持っているが、内部的には同じです。

私は時々非常に似ているクラスがたくさんあるみたいです。 私は何が欠けていますか?

+0

クラス間でテストを複製する場合、クラスの動作が非常に似ていることがわかります。 – byxor

答えて

1

あなたのアプローチはうまくいますが、TransactionTypeプロパティ(請求書、直接販売、現金など)を持つSalesTicketしかない場合は、そのプロパティをレポートで使用して表示またはフィルタリングできます。

さまざまなSalesTicketタイプ(CalculateTax()など)に異なる方法が実装されていた場合は、複数のタイプに適しています。

関連する問題