thinkphp 中模型究竟是什么用?
问题
似乎所有的操作都能在控制器中就能完成,模型除了几种验证之外,究竟是干什么用的,这个问题一直没理解透
解答
解答一
要明白这个问题,必须了解 MVC 历史。早在 MVC 出现以前,程序员是将 html、css、js、php、SQL 写在一个 .php 文件内的,那时的网页非常简单。后来复杂了,需要多个人协同开发,一个开发后台,专写 php + SQL,一个开发前端,专写 html + css + js。形成了 VC 架构,但有个问题,他们之间不是异步开发的,而是同步开发,前端写完模板,phper 才能在上面加 php 代码。如果不小心字符串过长了,样式可能会错乱,又要找前端调整样式。这样工作效率很低。最后 M 出现了,phper 可以在 M 上写 php 代码,写完后,进行单元测试即可。前端在 V 上写 html + css + js 代码,这个过程是异步完成的,彼此之间互不影响,最后拼接的时候,用 C 调用一下 M 获得数据后,再渲染到 V 上即可。C 就是个桥接器而已。但现在的开发模式又变了,出现了很多后台和前台框架,这使得 M 和 V 的地位一下子下降了。很多 M 要完成的功能,后台框架包办了,如 ThinkPHP,很多 V 要完成的功能,前台框架包办了,如 Amaze UI。因为框架技术的发展,导致很多程序员的开发效率大增,开发成本大幅度下降。许多 phper 不需要依赖前端也可以开发出非常出色的网站。使得 MVC 本来为了协同开发而设计出来的模式显得不是那么重要了。所以完全可以用 C 替代 M。但受 ThinkPHP 框架限制,有些功能,如多对多关联模型,只能在 M 中实现。所以有时还是要用 M。有时一套 CMS 中要可以选择多套模板,这时就需要前端分担一些工作量,不然 phper 要累死了。
我发现你对开发的理解很深入啊;同感;尤其伴随着nodejs的崛起;以及angularjs这类mvvm的前端框架盛行;前端的地位越来越重了;不过;我是坚持认为C和M还是要分离的;M中的方法是可以在C中方便调用的;如果直接写在C中就不灵活了;
C 和 M 分离是必需的,比如关联模型,没有 V 什么事,没有必要将这部分逻辑写入 C 中。有时候一些简单的逻辑,比如验证码、取值范围等。我没有用 M,直接用 C 代劳了,节省代码量。这种情况下,可以用 C 完全替代 M。复杂的验证、关联模型等,还是要用到 M 的。前端的职位也很重要,在创业初期可以先用 Amaze UI 框架。到 A 轮融资成功以后,要聘请高级的前端,设计复杂的特效,还有 webapp 的自适应。
我在实际开发中就是,把逻辑和数据库操作的相关方法全就放到了M里,但是似乎C就没什么用一样,完全就是一个调度作用,显得很麻烦,M里的方法放到C里也能实现,这样又显得M是多余的,所以我就怀疑人生了-。-
解答二
操作数据库的
记住模型不只是操作数据库的 它有很多高级功能的。最基本的增删改查,然后是数据的 高级処理。自动完成 自动验证等 很多功能
打个比方 这里只是一个举例,并不保证是最佳操作方法
读取新闻文章
如果页面显示的文章字数多了 替换成...
这个很简单的东西吧。
当然 实现的方法很多
最简单的html中直接用函数处理
或者控制器中处理
但是还有另一个方法
那就是在model层中进行处理
里面有_after_select和_after_find()
在这里面写代码也可以实现的,以后所有查询的都会(注意是D方法查询都会被处理)
这个只是一个实现的方法,还是那句话不保证最佳,只是例子!