php中面向对象开发探讨
最近要对以前的一个项目改版,以前写的类基本上都是对一些方法的堆积,一个类都有上百k的大小,根本谈不上是面向对象,或者称之为伪对象吧。以以前写的一个User类为例,对有些疑问的几个地方进行讨论下。
一、我在User里要用到$db这个变量,用来查询数据库的,$db是通过db类实例化出来的,那我这个$db是不是在User类的__construct()里就进行实例化呢?这样做的好处就是User类的其他方法可以直接用$db变量了,不好的地方就是我的User类里其他一些方法可能根本不需要用到$db变量,不仅仅是$db变量,还有一些cache对象、webservice对象,都可能有这种情况,也就是说在方法用到的时候去实例化对象,还是__construct()里就进行实例化?或者是不是有什么设计模式来处理这种情况?
二、对类的划分问题。在User类我这里可能有给用户添加物品、删除物品、显示用户物品列表,同样不仅仅只有物品,还有积分、金钱等等,大部分都是增加、删除、显示列表的,这些都放User类里看起来是没有什么问题的,都和用户相关。但是个人总感觉User类纯粹是一些方法的堆积了(尤其是显示列表的那些方法),是不是可以改成这样,比如以积分为例,有一个UserScoreMgr类,继承自User类,然后对积分的操作都放在这个类中,这样是不是好一些?或者同样有什么样的设计模式来处理这个问题?