Bookmark and Share

Lee's 程序人生

HTML CSS Javascript XML AJAX ATLAS C# C++ 数据结构 软件工程 设计模式 asp.net Java 数字图象处理 Sql 数据库
  博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

基于MVC模型开发属于自己的个人博客(二)

Posted on 2010-02-05 19:00  analyzer  阅读(254)  评论(0编辑  收藏  举报
5.模型层

模型层,作为MVC模型中的底层,对于程序的作用是至关重要的。目前许多框架都带有ORM的功能。ORM就是Object Relational Mapping,就一种对象和关系数据库进行互相转换的中间层。有了这个框架,我们实现程序以不关心SQL语句的书写、索引的创建、主键和外键的关系。虽然这是非常方便的功能,但由于隐藏了底层的实现,如果出现了错误,会不知所措。所以我还是强烈自己写一个模型层框架,只对简单的插入、删除、查询做一些封装,复杂的内容,例如表的关联等,均采用手写SQL的方式。以下是我抽象出来的框架,具体实现代码没贴上,可以从附件的程序源代码中找到。
001class BaseModel
002{
003    /*
004        模型对应的表名,不包含前缀
005        @var string
006    */
007    protected $mTableName;
008    /*
009        模型对应的表名,包含前缀
010        @var string
011    */
012    protected $mFullTableName;
013    /*
014        模型对应关系表中的属性列表
015        数组中每一个元素代表一个属性,关联数组的key代表属性名,value代表类型
016        ColumnName=>Type
017        @var array
018    */
019    protected $mColumn;
020    /*
021        主键名
022        @var string
023    */
024    protected $mPrimaryKey;
025    /*
026        标识该对象与其他对象是否有一对一的关系
027        该属性是一个数组,关联数组的key代表自己的属性,value代表另外对象的属性
028        value的格式应该是:表名.属性名
029        @var array
030    */
031    protected $mOneToOne;
032    /*
033        标识该对象与其他对象是否有一对多的关系
034        该属性是一个数组,关联数组的key代表自己的属性,value代表另外对象的属性
035        value的格式应该是:表名.属性名
036        @var array
037    */
038    protected $mOneToMore;
039    /*
040        表示与某一个的某个字段的一一对应关系
041        查找时查询将会自动将链接的字段查询出来
042        @var array
043    */
044    protected $mTableLink;
045    /*
046        数据库操作对象
047        @var DBO
048    */
049    protected $mrDbo;
050    /*
051        缓存保存对象
052        @var array
053    */
054    protected $mCache;
055    /*
056        缓存目录
057        @var string
058    */
059    private $mCacheDir;
060    /*
061        缓存文件名
062        @var string
063    */
064    private $mCacheFile;
065    /*
066        要缓存的SQL语句的结果
067        @var string
068    */
069    private $mCacheSql;
070    /*
071        为该对象创建一个新的记录
072        需要注意的是,该方法并不验证数据的正确性和对数据过滤
073        请在控制器中调用相应的方法对数据进行过滤
074            必须注意,目前还没实验对所属的表进行级联插入
075        @param oneRow 数组
076    */
077    public function Create($oneRow)
078 
079    /*
080        查找数据,数据并不马上返回,通过其他方法提取数据
081        $fields表示要查找哪几个字段
082        $sort表示对根据哪些字段进行排序
083        @param condition string
084        @param where string
085        @param orderby string
086        @param limit string
087        @param linkTable string   
088        @return null
089    */
090    public function Find($fields '*'$where = null, $orderBy = null, $limit=null,$linkTable = null)
091    /*
092        查找数据,数据马上通过该函数返回
093        @param condition string
094        @param where string
095        @param orderby string
096        @param limit string
097        @param linkTable string   
098        @return array       
099    */
100    public function FindAll($fields '*'$where = null, $orderBy = null, $limit=null,$linkTable = null)
101    /*
102        提取下一行数据
103        @param type int
104    */
105    public function GetOneRow($type=1)
106    /*
107        获取第一个记录的第一列
108    */
109    public function GetOne()
110    /*
111        提取所有数据
112    */
113    public function GetAllRow()
114    /*
115        更新某一行的数据,参数中的row必须包含主键,而且是依据主键更新该行
116        @param row arry
117    */
118    public function Update($oneRow,$where = null)
119    /*
120        更新某一行的某一个字段
121        @param match array 匹配条件
122        @param field 字段名
123        @param value 属性值
124    */
125    public function UpdateOne($match,$field,$value)
126    /*
127        数据保存方法,检查是否设置主键,若已设置,则调用更新,否则调用Create
128        @param row array
129    */
130    public function Save($oneRow)
131    /*
132        删除给定的数据行
133        @param oneRow array
134    */
135    public function Delete($oneRow,$trans=false,$cascade=false)
136    /*
137        批量删除给定的数据行
138        @param rows array
139    */
140    public function DeleteBatch($rows)
141    /*
142        初始化缓存
143        @param cache_file 缓存的文件名
144        @param cache_sql 缓存的SQL语句
145        @param dbo 数据库操作对象
146    */
147    public function InitCache($cache_file,$cache_sql)
148    /*
149        更新缓存,从数据库中取出数据
150    */
151    public function UpdateCache()
152    /*
153        获取缓存内容
154        @return array
155    */
156    public function &GetCache()
157}
需要说明的是,Cache是保存在文件系统中的,目的是减少查询次数(例如首页文章,会经常被查询。如进行缓存,可以大大提高系统速度。)由于PHP没有内建的内存缓存机制,只能通过文件(memcache不在本文讨论之内,如大家有兴趣,可以google之)。

至此,MVC模型的三大部分均介绍完毕。希望通过这篇文章,大家对PHP开发和MVC模型有一个新的认识。鉴于本人知识有限,在如此短的时间内写出此文,肯定会纰漏百出。可以通过邮件:

future0906[AT]gmail[DOT]com或跟贴与我联系。

欢迎大家转载,转载时请注明出处,谢谢!

注:附件1是学生时代写的基于MVC的日历备忘程序,仅供参考。

     附件2是本文所描述的博客系统全部代码,仅供学习,如需作它用,请知会我一声。
     另,由于我暂时无权限发附件和链接,请需要以上两个附件的朋友email或PM我。

全文完

 

转自:http://bbs.phpchina.com/thread-172826-1-1.html 

我要啦免费统计