关于mvc结构的controller和model之间的互动

我小白,主要用thinkphp,我看了很多人分享的代码,他们把view和controller之间的分离很彻底,但controller和model之间的分离几乎没有,有的几乎不用model层。
大家怎么想?

阅读 8.1k
6 个回答

我对TP代码结构:

1、function中只能定义和具体业务无关的函数;
2、model中定义数据的‘增删改查’;
3、api中定义具体业务相关的逻辑代码
4、controller定义和前端的交互(数据验证、数据组装等)
5、Behavior中定义事务的前置/后置事件

希望能有帮助

很多時候業務邏輯並不複雜,在 controller 中運用面向過程的編程方法便可高效解決問題。

@Cindy 提到:

  1. function中只能定义和具体业务无关的函数;

竊以爲 MODULE_NAME/Common/function.php 中所含應是 module 或 application (MODULE_NAME == 'Common' 時) 中 model、controller 同 view 三者中至少二者共用的資料。

thinkphp m层用的不多, 主要是c层。 其实m层不是必须的, 只是为了代码能够高度重用

开发速度快吧,TP中几乎不会复用的数据操作,直接在controller里用M方法要比再额外建个model快得多

新手上路,请多包涵

如果为了代码复用率,在model中放入比较独立的业务操作也是可行的

我喜欢CodeIgniter框架,但MVC的思想和Thinkphp是一样的。

Codeigniter官方框架文档Model部分有一句很精辟的评论:“什么是模型?——模型是专门用来和数据库打交道的PHP类”

个人做项目的时候,喜欢设计好数据表以后,就在Model把规划的几乎所有数据操作全都先写成一个个独立的方法,然后在Controller或View中调用Model。当然,后来出现的没有预想到的数据库操作,如果我预计绝对不会复用这个操作,我一般就在Controller里面直接写了。比如“管理员删除用户按钮”,很难第二个地方还要再用吧,但是如果需求变成了“用户也能删除自己”,那么我会找出原先的代码放回Model中。

不需要复用的数据库操作,我不太喜欢“Model里面写一个函数,然后Controller再写一个”才实现某个功能,能Controller里面一步实现也是可以的。当然在企业里面,我这么做可能不符合规范

当然,写在Model中的函数,你写在Controller里调用也一样。因为,Codeigniter也说:“如果你不喜欢Model,你可以选择不用,没什么好与不好的……”

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题