自定义MVC框架---第二章
模型层的封装
模型层封装的原则
介绍:
模型层,也就是Model这一层,用来封装对数据库操作的封装
由于现在主流的编程思想还是OOP面向对象编程,也就是说项目的基本单位就是一个一个类文件,那么如何使用面向对象思想封装对数据库操作呢?
一张数据表对应一个模型类,然后将数据表的增删改查操作,封装到模型类的成员方法中:
根据上面的指导思想,我们来创建模型类:为了方便用户通过类名标识出该类时控制器还是模型,我们每次创建类的时候,通过增加后缀来区分,例如:控制器的后面统一加上:Controller,模型类后面统一加上Model
我们以用户表为例,我们先常见用户模型类:UserModel.class.php
上面的代码还有优化余地:将来不仅在user_select方法中使用dao对象执行sql语句,在下面的这些方法中,都需要使用到dao对象,所以我们可以将初始化dao对象的代码封装到构造方法中。
基础模型类
将来我们的项目中还会有其他的数据表、模型类,例如:我们的商品模型类中也需要使用dao对象执行sql语句,所以我们又可以将多个模型类中公共的代码封装到基础模型类中,然后让这些类继承这个基础的模型类
工厂类实例化单例对象
之前我们使用三私一公的方式实例化单例模型对象,但是我们的模型类如果使用三私一公的话,需要在每个类里面都得定义三个私有的成员和一个公共的成员才能实例化一个单例对象,这个流程比较繁琐,所以我们采用下面的工厂模式实例化单例对象:
什么是工厂模式呢?
顾名思义,就是根据传递的进来的模型类,给你生成单例对象
但是演示了一把,发现上面生成了3个对象
原因在于$model_list是一个普通的变量,每次执行完M方法,里面的变量都会被释放掉,所以下一次在调用M方法的时候,会重新判断
所以我们将$model_list定义为静态的变量,这样,当方法执行完毕会将执行的结果保存起来,直到PHP脚本执行完毕