単一の関数を再利用するためだけにクラスを拡張するのは合理的な方法ですか?


10

私はワードプレスサイト用にさまざまな投稿フィルターを開発しており、最初の4つを単一のクラスで構築しました。

最後の2つはスコープが十分に異なるため、クラス内で1つの関数(最終リンクを生成するための関数)のみを共有します。

このインスタンスまたはいくつかの類似の仮想インスタンスのいずれかで、その機能を実現するために元のクラスを拡張することは合理的ですか、それともより良い方法がありますか?


私はこの質問を理解していません。クラスで物事を構築するとはどういう意味ですか?これらのクラスは何かから継承していますか?階層の最上位のクラスには、すでに共通の機能がないのでしょうか。
David Thornley、2011年

回答:


19

いいえ、2つのクラスが非常に異なり、1つの機能しか共有しない場合、それらは交換できない可能性があります。したがって、リスコフ置換の原則に違反します。

それが論理的である場合にのみ、基本クラスから派生します。単一のコードを共有することが継承を正当化することはめったにありません:)

この特定の例では、代わりにコンポジションを介してその関数を再利用したいようです...


3
継承よりも構成を優先してください!ほとんどの場合、これは長期的にはあなたの生活をよりシンプルにします。
Travis

構成FTW!
back2dos 2010年

私の答えが基本的に@Sardathrionと同じであることに注目する価値があります、私は関連する原則にリンクしました:)
MattDavey

7

クラスの説明に「and」という単語が含まれている場合は、2つ(またはそれ以上)のクラスに分割する必要があります。見た目によって、その関数を、現在持っているクラスによって参照されている別のクラスのメンバーにすることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.