1

Roles または Traits が必要な場合に、古典的な継承環境で何をすべきか疑問に思っています。どちらもルート クラスに由来する 2 つの道路に沿ったクラスのステミングがありますが、2 つの道路上の分岐したクラスをリンクして、同じ機能を共有したいと考えています。下記参照:

+-- Base
 +-- Base_Processor
 | +-- Base_Processor_Request
 |  +-- Base_Processor_Request_Ajax
 +-- Base_Impl
  +-- Base_Impl_MyImpl
   +-- Base_Impl_MyImpl_Processor (extends from Base_Processor)
    +-- Base_Impl_MyImpl_Processor_Request (extends from ??)
     +-- Base_Impl_MyImpl_Processor_Request_Ajax (extends from ??)

Base_Impl_MyImpl_Processor_Request と Base_Processor_Request をリンクしながら、Base_Impl_MyImpl_Processor から拡張し、Base_Impl_MyImpl_Processor_Request_Ajax を同じ方法でリンクする最良の方法は何でしょうか。

ありがとうございます。

4

1 に答える 1

2

私はAlex Burtsevのコメントに 100% 同意します - 多くのレベルの継承は依存関係の悪夢のように見えます (そして、お気づきのように、継承をそれほど使用すると、クラス間で特定のコードを再利用するのはかなり困難です)。

通常、トレイトクラスが階層構造にプラグインされるとは思いません。私の考えでは、トレイトは実装の詳細全体にわたってバリエーションを定義するスタンドアロンの概念であるため、基本クラスから派生するのではなく、インターフェイスにのみ属します。

これが既存のコードであり、異なる派生クラス間で再利用する必要がある複数の要素がある場合は、階層にまったく関係のない別のクラスにそれらを分割する方が理にかなっていると思います。

Processorと は、別のエンティティとしてより適切に機能するようRequestに思われます。Ajax

于 2012-04-11T21:48:41.810 に答える