1

私はモデルのシステムを持っています:

abstract class R00_Model_iUnique { }
abstract class R00_Model_iFamilyUnique extends R00_Model_iUnique { } // for models with hierarchy
abstract class R00_Model_iTaggedUnique extends R00_Model_iUnique { } // for models with tags

// and, for example
class R00_Model_User extends R00_Model_iUnique { }
class R00_Model_Comment extends R00_Model_iFamilyUnique { }
class R00_Model_Post extends R00_Model_iTaggedUnique { }

R00_Model_iCommentableUniqueがあり、R00_Model_Postはそれから継承されたいと考えています。しかし、それは不可能であり、R00_Model_iTaggedUniqueからすでに継承されており、R00_Model_iCommentableUniqueからR00_Model_iTaggedUniqueを継承すること、またはその逆は賢明ではないと思います。私はそれをどのように実装するかを1つだけ考えましたが、いくつか疑問があります。たぶん、あなたはいくつかの賢い方法について私に話すか、その方法を批判することができますか?


R00_Model_i * Uniqueをクラスではなくインターフェースにして、R00_Model_Helper_iUniqueなどのヘルパーオブジェクトを作成することを考えました(おそらくそれは一般的なパターンであり、クールな名前がありますが、「ヘルパー」はそこでクールになるとは思いませんか? )。次に、R00_Model_iUniqueで、__ call()を作成します。これは、呼び出されたオブジェクトのすべてのインターフェイスをチェックし、ヘルパーで呼び出されたメソッドを検索します。

それとも、反射やその他の邪悪な遅いものが多すぎますね。

4

1 に答える 1

1

インターフェイスとヘルパー(構成)を使用することで、正しい方向に進んでいます。

これが、Design Patterns Book(GoF)の原則の1つが「継承よりも構成を優先する」理由の1つです。

コンポジションは、必要なクラスでさまざまなクラスのメソッドを使用するために必要な柔軟性を提供します。

于 2009-10-29T07:20:48.047 に答える