php 数据库访问类(模型 Model) v1.1

来源:互联网 发布:新浪云 端口 编辑:程序博客网 时间:2024/05/17 07:29

# 规范

使用模型封装所有数据库操作(读和写),模型使用类(class)的形式进行定义。
除模型外,禁止通过 $db 类直接访问数据库。

一个模块的模型放在 model/ 目录内。模型以数据表作为粒度,则一个模型原则上只负责一个表的操作,模型又按操作类型分成读与写两类。

操作类型体现在命名前序上,使用 r_ 表示读, w_ 表示写。类名与源代码文件名都使用前序进行分类。

模型类名及文件名的命名主要参考数据表名,并去除表名中共同有的前序。

如:

数据库中有一数据表:phpcms2008_selepro_projectinfo
属于 selepro 模块的数据表,因此 phpcms2008_selepro_ 皆为表前序,表名中有意义的部份是 projectinfo 。
所以,模型定义如下:

model/r_projectinfo.class.php
model/w_projectinfo.class.php

r_projectinfo.class.php 为封装了对 projectinfo 表读操作的模型,类名为 r_selepro_projectinfo ,可见,类名需要加上模块名(selepro)作为前序。

w_projectinfo.class.php 为封装了对 projectinfo 表写操作的模型,类名为 w_selepro_projectinfo 。

# 加载


模型类使用 loadm() 函数加载及实例化,不在控制器中直接包含及 new 。
loadm 调用方法是:loadm('mod_name', 'model_file_name')。
eg. loadm('phpcms', 'r_projectinfo')
第一个参数为模型所属模块名,第二个参数为模型类定义文件名(不含 .class.php 部份)。
两个参数都使用单引号定义的字符串,分隔参数的逗号后跟一个空格,在需要查找某个模型被哪些地方调用时可以方便地查找出来。
否则调用格式不统一,无法通过简单的字符串搜索把一个模型的调用位置找出来。

# 实例变量名


读类型的模型使用 omr_ 前序,写类型的用 omw_ 前序。其中 o(obj)m(model)r(read)。
后跟模块名的前三个字母,再跟模型文件名各部份的前三个字母:
eg.
/selepro/model/r_projectinfo.class.php -> $omr_sel_pro
(其中 omr_ 为前序,sel 为模块名,pro 为模型文件名)
/selepro/model/w_material_info.class.php -> $omw_sel_mat_inf
完整的实例化语句为:
$omw_sel_mat_inf = loadm('selepro', 'w_material_info');
统一实例变量名后,当需要查找一个模型在哪些地方被使用到,一个模型的一个方法在哪些地方被调用时,可以通过简单的字符串搜索把调用位置找出来。

# 作用


把原本写得到处都是的数据库访问代码集中到一块,可以在一定程度上提高代码质量。
以团队的角度来说,因为所有数据库访问代码都住中到了一块,可以更方便地管理。
又因为数据库查询语句都是集中在一块,在需要对数据库进行优行分析将更方便,不需要在源代码的各处找各条查询语句。

原创粉丝点击