① php的tq框架中,的model类,controller类,和view类都有什么用代码都应该写在
MVC概念来自传统的桌面软件开发,在那样的环境下,事件发生时,Model可以主动通知View,而这在HTTP协议里是不可能的(长连接comet除外啊)。长期以来,PHP业界对MVC框架中M和C的理解和运用都是不精细的(当然,够用就好,能满足绝大多数业务了)。这导致MC分层不清,PHPer在写代码的时候没有明确的规则,到底业务逻辑放在C里还是M里,常见的问题有:
C层承担职责过多,如,赞一个答案是给对应回答者加声望,写到C里面去了
M层太单薄,就继承一下框架的Model(或者DB类),实现数据库的增删查改
非数据库操作(如调用微博OpenAPI)只好包装到Util类
用户输入($_GET,$_POST)全局乱跑,M层和Util里都有
由于大部分场景下,PHP都用来做Web应用,而且是Database Driven Application,所以,各类Database Driven的快速开发框架也应运而生,比如说,CakePHP的Model类干脆就定义了CURD几个针对数据表的操作,Qcodo直接根据数据表结构自动生成MVC三层的脚手架代码。
我理解的PHP应用是5层结构,M层应再拆分为Biz Model,DAO,Infrastructure,贴几幅图片
② thinkphp 模型类的作用
一般情况下是一个表对应一个model类,不用也是可以的。
至于你说的简化代码,给你举个例子:
比如说你有一个user表,里面有 id name pass time(登录时间),对其的操作页面有注册,登录,修改密码等等
如果你要使用M来进行实例的话,不管是注册还是干啥,你每次都要对提交过来的信息是否合法进行一个验证,time时间每次都要使用time()函数来重新生成以下
但是如果你使用了model,使用D来实例化,这些信息的验证,和time()的完成都可以写到model中,就不用在上面说的那些页面当中一一进行操作验证或者添加了。
classUserModelextendsModel
{
//使用下面的这些可以很方面对user表进行操作,省去了多次对表进行操作时候所书写的验证和完成之类的代码。
//自动验证
protected$_validate=array(
array('name','require','用户名不能为空'),
array('name','','用户名已存在',0,'unique',1),
array('user_pwd','require','新密码不能是空',0,'',2),//只更新时验证
);
//自动完成
protected$_auto=array(
array('addtime','time',1,'function'),
);
//上面的一些规则可以参考自动完成和自动验证的规则,需要调用函数的时候,在下面自己再添加自定义的函数
}