トランザクションでラインアイテムを受け取り、40列の表示用にフォーマットするレシートオブジェクトを設計する必要があります。将来的には、通常サイズのプリンター用紙用に別のフォーマットも必要になります。
トランザクションには、さまざまなタイプのラインアイテム(アイテム、コメント、割引、入札など)があります。
私の最初の考えは、これらのそれぞれのインターフェイスを作成して、それらが自分自身をフォーマットする責任を負うようにすることでした。必要なレシートフォーマットのタイプごとに、インターフェイスに新しいメソッドを追加できました。私の次の考えは、必要なレシートフォーマットのタイプごとに1つのクラスを作成し、各行がどのタイプであるかを確認し、適切にフォーマットする責任を負わせることでした。
だから私の質問は、私が見落としているかもしれないより良いデザインパターンがあるかどうかです、そしてそうでなければ、上記のデザインの1つを他のものよりも好む重要な理由がありますか?
だから私はこのようなものを追加することができます:
public interface IReceiptFormat
{
string FormatFor40Column();
string FormatForRegularPaper();
}
私のアイテム、コメントなどのクラスに。または、次のようなものを作成できます。
public ReceiptFormatterFor40Column
{
public Ticket Ticket {get; private set;}
public ReceiptFormatterFor40Column(Ticket ticket)
{
Ticket = ticket;
}
public List<string> GenerateReceipt()
{
var lines = new List<string>();
foreach(var line in Ticket.Lines)
{
// check what type of object line is and add
// add an appropriately formatted string to lines
}
}
}