Php 奇怪的多重继承的优雅替代品
我不能说这是一个问题,但更多的是一个意见要求,我相信澄清这一问题会使许多其他人受益 以下是我的实际案例: 我有一个名为DataExchangeService的抽象类和许多扩展这个抽象类的子类(这是我的MVC框架中的基本控制器类)。处理数据定义(用户、类型、部分等)的管理模块在大多数情况下都具有100%相似性的添加、编辑、删除、列表方法。我知道这一点,因为我只使用搜索和替换来复制它们。现在问题不在于我的DateExchangeService子类都处理数据定义,所以有足够多的情况下我不需要CRUD方法 多重继承将在另一个类中定义这些CRUD方法及其行为,并在需要时扩展这两个类,但我确实认为这是一个棘手的问题,我不使用它(+PHP没有这样的功能)。那么,最佳做法是什么 以下是我想到的方法: 案例APhp 奇怪的多重继承的优雅替代品,php,oop,multiple-inheritance,Php,Oop,Multiple Inheritance,我不能说这是一个问题,但更多的是一个意见要求,我相信澄清这一问题会使许多其他人受益 以下是我的实际案例: 我有一个名为DataExchangeService的抽象类和许多扩展这个抽象类的子类(这是我的MVC框架中的基本控制器类)。处理数据定义(用户、类型、部分等)的管理模块在大多数情况下都具有100%相似性的添加、编辑、删除、列表方法。我知道这一点,因为我只使用搜索和替换来复制它们。现在问题不在于我的DateExchangeService子类都处理数据定义,所以有足够多的情况下我不需要CRUD方
\u call()
magic方法完成。)
案例B
谢谢目前有一种流行的思维方式说“谢谢”。Google上有太多的信息,无法在这里一一列出,但我们可以说,除了偶尔出现的抽象基类之外,我已经2-3年没有使用过继承了 其主要思想是,任何给定的类都将依赖于其他类,而不是扩展允许它提供所需功能的基类。事实上,为了保持一致,它将依赖于接口,这些接口提供一个契约,声明它们将执行一个功能 然后,您的控制器类将传递服务/组件,并将其委托给这些服务/组件,以便完成特定的作业 注意,你也可能走得太远。如果您有一个依赖于大量外部服务的类,特别是如果不是该类上的每个公共方法最终都使用了所有这些服务,那么实际上您可能毕竟有两个类。也就是说,您的控制员通过执行多个工作“违反”了单一责任原则。对于web框架中的控制器来说,这尤其容易发生意外,因为它们鼓励这样做 在这一点上,我认为阅读以下内容是明智的:
- 和
- 反转控制容器(例如和我个人最喜欢的:)