2つのうちどちらを優先する必要がありますか?
クラスA、B、Cによって呼び出されるメソッドがいくつかあります。
これらのメソッドは、クラスD(A、B、およびCのベース)にカプセル化する必要がありますか?
また
これらのメソッドがクラスUにカプセル化され、他のクラスが作成する場合、必要に応じてメソッドを使用することがオブジェクトになります。
どのような基準で決定を下す必要がありますか?
ありがとう。
staticユーティリティクラスを作成する必要があります。
継承は、実際に意味がある場合にのみ使用しAてください。つまり、、、BおよびCが実際にである場合にのみ使用してDください。
メソッドが何をしているかに基づいて決定します。クラスA、B、Cに固有のことをしている場合は、基本クラスに含まれている必要があります。これは、クラス関連の機能をシステムの他の部分から隠すことにより、コードをクリーンに保つのに役立ちます。(もちろん、A、B、CはすでにDから継承しているか、明らかに関連していると思います)
A、B、Cの機能に固有ではない他のタイプの処理を行っている場合は、再利用の機会を最大化するために、ユーティリティクラスに含める必要があります。
他のタイプに固有の他のタイプで処理を行っている場合(たとえば、日時をきれいに印刷する場合)、そのタイプの拡張メソッドにすることを検討してください。
明らかな関係がない限り、私は継承から遠ざかる傾向があります。上記の説明から、これは当てはまらないと思います。私の好ましい解決策は次のとおりです。
クラスを注入することの利点は、さまざまな実装を簡単に提供できることです。これは、テストに特に役立ちます。シングルトンまたは静的メソッドを持つクラスは、同じ理由で問題を引き起こす傾向があります-それらを簡単にオーバーライドまたは置換することはできません。
基本クラスを使用する基本クラス のみに依存するロジックを作成する場合は、基本クラスを作成するのが理にかなっています。その場合、派生クラスは基本クラスを完全に置き換えることができます。派生型をチェックしてそれに応じて動作するスイッチロジックがあってはなりません。リスコフの置換原則を参照してください:http://en.wikipedia.org/wiki/Liskov_substitution_principle
ユーティリティクラスの使用 一部の言語には、多重継承をサポートしないという制限があります。すでに意味のある基本クラスがある場合は、ユーティリティクラスに進む必要があります。また、継承を使用している場合は、派生クラスから基本クラスへの緊密な結合を作成しています。
派生クラスがその基本クラスの代わりに自然に使用できる場合は、基本クラスを選択します。目的がクラス間で再利用可能なコードを共有することだけである場合は、ユーティリティクラスを使用する方が理にかなっています。