经典继承分歧

时间:2012-04-11 18:09:16

标签: inheritance architecture paradigms

我想知道在需要角色或特征但在经典继承环境中应该做些什么。我已经把两个道路上的一个班级,这两个道路都来自一个根类,但是,我想将两条道路上的不同类别连接在一起以共享相同的功能。见下文:

+-- 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的最佳方法是什么。

先谢谢。

1 个答案:

答案 0 :(得分:2)

我同意100%的Alex Burtsev评论 - 许多级别的继承看起来像是依赖性的噩梦(并且,正如您发现的那样,当您使用继承时,很难在类之间重用特定的代码位那么多)。

通常我不希望将 trait 类插入到层次结构中 - 在我看来,特征是独立的概念,它们定义了实现细节的变体,因此只属于一个接口而不是派生自基类

如果这是现有代码,并且您有多个元素需要在不同的派生类之间重用,我认为将它们拆分为与您的层次结构无关的单独类更有意义。

ProcessorRequestAjax似乎可以更好地为您提供单独的实体。