【发布时间】:2012-10-02 16:02:52
【问题描述】:
这是基本前提,我正在为 db 对象使用活动记录模式,我想我需要一些指导来组织这些类。而且总的来说,我如何可能拆分我的班级结构。希望我不要解释得太糟糕。如果组合模式是要走的路,我可能需要一些帮助来实现它。
假设有ActiveRecord 基类,位于图腾柱的底部,用于处理将对象映射到数据库以及将数据库映射到对象。
ActiveRecord 的子类是一种通用的User 类,它处理用户会话、登录、保存时密码字段的加密等。
ActiveRecord 的另一个孩子是 ActiveRecordButSlightlyMoreAdvanced 类。通常此类与User 无关,但这是我的问题。
我想要一个子类,它本质上是User 和ActiveRecordButSlightlyMoreAdvanced 的组合; UserButSlightlyMoreAdvanced,无需从User 复制粘贴所有方法。 User 扩展 ActiveRecordButSlightlyMoreAdvanced 是没有意义的,因为它本质上需要重写一堆对 User 有不良行为的方法。
UserButSlightlyMoreAdvanced 扩展 ActiveRecordButSlightlyMoreAdvanced 是有意义的,但我必须从 User 复制和粘贴一堆方法。
我知道有些人用图片更好地思考,所以这里是图示的结构。
基础
class ActiveRecord
{
....
}
孩子
class User extends ActiveRecord
{
....
}
也是孩子
class ActiveRecordButSlightlyMoreAdvanced extends ActiveRecord
{
....
}
问题
class UserButSlightlyMoreAdvanced extends User AND ActiveRecordButSlightlyMoreAdvanced
{
:( :( :(
}
我已经考虑这个问题大约一个月了,如果其中一个对象实现保存的方式发生变化,我想不出一个解决方案不会对对象进行双重维护。在接下来的几天里,我将尝试一些解决方案,并可能会发布我认为在这种情况下最好的解决方案。
【问题讨论】:
标签: php oop design-patterns multiple-inheritance