は、次のことを想像:私は関連するすべての関連のロジックとオーケストレーションをカプセル化している1つのクラスを持っているよりも、私はのFooクラスOO - 定型/転送コードを削減
class Foo { }
class FooA : Foo { }
class FooB : Foo { }
class FooX : Foo { }
から継承DTOのの束を持っていますFoo
データ型。
void DoSomething(Foo data)
{
if (data is FooA)
DoSomethingWithFooA((FooA) data);
if (data is FooB)
DoSomethingWithFooB((FooA)data);
if (data is FooX)
DoSomethingWithFooC((FooA)data);
}
これは非常に単純化した例である:私は、メソッドの実装は、このようなものである引数
によって提供されたデータに関連するすべてのロジックを実行する方法DoSomethingWithData(Foo data)
を提供します。このアプローチの利点は次のとおりです。私は新しいタイプを追加する場合
DoSomething
- 「クライアント」は、独立して
Foo
データ型の常にDoSomething
メソッドを呼び出しますダウンキャスティングが好きでないもの
代わりに、
DoSomething
の方法を公開するのではなく、データ型。利点は、ダウンキャストはありませんが、定型句/転送コードが増加することです。あなたは何をお選びくださいか?それとも他のアプローチがありますか?
私はこのデザインパターンを適切に解決するC++と仮想メソッドを使用することをお勧めします。 –
これは主に異なる意見についてだと思います。ロバート・マーティンの「クリーン・コード」を調べたいと思うかもしれません。彼は「データ転送オブジェクト」とその長所と短所に関する全章を持っています。 – GhostCat