php中的Model到底扮演什么角色


一直在用MVC模式编程,突然对其中Model层的定义有些疑惑,要说其它两层把,一个负责展现的视图,一个负责流程的控制,清晰明了,但是其中的Model又指的什么呢?

从字面上理解,都称其为模型层,什么是模型?大多数Model的定义就像这样

class User extends Model
{
    public function add(array $user)
    {
        // 新增代码
    }

    public function delete($id)
    ...
}

Model难道只是个对数据库增删查改接口的封装吗?还有些人认为,Model应该是对数据表的映射,它难道是一种ORM的实现?

php orm mvc model

バイト戦士 10 years, 8 months ago

MVC概念来自传统的桌面软件开发,在那样的环境下,事件发生时,Model可以主动通知View,而这在HTTP协议里是不可能的(长连接comet除外啊)。长期以来,PHP业界对MVC框架中M和C的理解和运用都是不精细的(当然,够用就好,能满足绝大多数业务了)。这导致MC分层不清,PHPer在写代码的时候没有明确的规则,到底业务逻辑放在C里还是M里,常见的问题有:

  1. C层承担职责过多,如,赞一个答案是给对应回答者加声望,写到C里面去了
  2. M层太单薄,就继承一下框架的Model(或者DB类),实现数据库的增删查改
  3. 非数据库操作(如调用微博OpenAPI)只好包装到Util类
  4. 用户输入($_GET,$_POST)全局乱跑,M层和Util里都有

由于大部分场景下,PHP都用来做Web应用,而且是Database Driven Application,所以,各类Database Driven的快速开发框架也应运而生,比如说,CakePHP的Model类干脆就定义了CURD几个针对数据表的操作,Qcodo直接根据数据表结构自动生成MVC三层的脚手架代码。

我理解的PHP应用是5层结构,M层应再拆分为Biz Model,DAO,Infrastructure,贴几页我4年前讲过的PPT吧:
ScreenHunter_002.jpg
ScreenHunter_003.jpg
ScreenHunter_004.jpg
ScreenHunter_005.jpg

PPT全文下载:"Evolution of Web Application Architectures(ppt2003).ppt" http://vdisk.weibo.com/s/535FV

蓝泽、左岸枫 answered 10 years, 8 months ago

Your Answer