我想知道在需要角色或特征但在经典继承环境中应该做些什么。我已经把两个道路上的一个班级,这两个道路都来自一个根类,但是,我想将两条道路上的不同类别连接在一起以共享相同的功能。见下文:
+-- 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的最佳方法是什么。
先谢谢。
答案 0 :(得分:2)
我同意100%的Alex Burtsev评论 - 许多级别的继承看起来像是依赖性的噩梦(并且,正如您发现的那样,当您使用继承时,很难在类之间重用特定的代码位那么多)。
通常我不希望将 trait 类插入到层次结构中 - 在我看来,特征是独立的概念,它们定义了实现细节的变体,因此只属于一个接口而不是派生自基类
如果这是现有代码,并且您有多个元素需要在不同的派生类之间重用,我认为将它们拆分为与您的层次结构无关的单独类更有意义。
Processor
,Request
和Ajax
似乎可以更好地为您提供单独的实体。