単一責任の原則では、たとえば、Invoice
クラスにはそれ自体を印刷するコードを含めるべきではないと述べています。印刷は別のクラスに分離する必要があります。
Invoice
しかし、ソフトウェアのさまざまなレイヤーにクラスの階層があるとします。
namespace CoreLayer {
public class Invoice {
public virtual void Print() {
...
}
}
}
namespace CustomizedLayer {
public class LaborInvoice : Invoice {
public override void Print() {
...
}
}
public class AccountInvoice : Invoice {
public override void Print() {
...
}
}
}
印刷の責任を分離するには、どのような手法または設計パターンを使用できますか?
アイデア:
- の各サブクラスをテストし、適切な印刷コードを実行する大きな
if
ステートメントを持つ個別のクラス。Invoice
これは間違っているようです。 - 来客パターン。問題は、ビジター インターフェイスがコア レイヤーに存在し、カスタマイズされたレイヤーのクラスへの参照が必要になることです。Core レイヤーを変更して、Customized レイヤーに新しいサブクラスを追加できるようにしたいと考えています。