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方法查询都会被处理)
这个只是一个实现的方法,还是那句话不保证最佳,只是例子!

thinkphp 中模型究竟是什么用?的更多相关文章

  1. 关于thinkphp框架中模型笔记

    模型这一块,感觉学习的不是很清楚,单独水一贴thinkphp中模型的学习笔记. 0x01 模型类简介 数据库中每一张表对应一个模型,类名就是表名,类里面的成员变量就是列名, 把一张表对应为一个类,其中 ...

  2. thinkphp在模型中自动完成session赋值

    相信用过thinkphp的用户都知道thinkphp的模型可以完成很多辅助功能,比 如自动验证.自动完成等,今天在开发中遇到自动完成中需要获取session值 然后自动赋值的功能,具体看代码:clas ...

  3. ThinkPHP中的模型二

    ThinkPHP中的模型 1.为什么要创建数据对象 案例:使用ThinkPHP完成部门管理 ① 设计数据库 ② 创建Dept控制器 路径:./Application/Admin/Controller创 ...

  4. ThinkPHP中的模型

    ThinkPHP中的模型 1.什么是模型(Model) 模型表示企业数据和业务规则,实际项目开发中,主要实现与数据库进行操作. 2.模型的定义规则 模型类的命名规则是除去表前缀的数据表名称,采用驼峰法 ...

  5. ThinkPHP中的模型命名

    当我们创建一个UserModel类的时候,其实已经遵循了系统的约定.ThinkPHP要求数据库的表名和模型类的命名遵循一定的规范,首先数据库的表名和字段全部采用小写形式,模型类的命名规则是除去表前缀的 ...

  6. [转]ThinkPHP中实例化对象M()和D()的区别,select和find的区别

    1.ThinkPHP中实例化对象M()和D()的区别 在实例化的过程中,经常使用D方法和M方法,这两个方法的区别在于M方法实例化模型无需用户为每个数据表定义模型类,如果D方法没有找到定义的模型类,则会 ...

  7. ThinkPHP 中M方法和D方法详解----转载

    转载的地址,http://blog.163.com/litianyichuanqi@126/blog/static/115979441201223043452383/ 自己学到这里的时候,不能清除的分 ...

  8. ThinkPHP 中M方法和D方法的具体区别(转)

    M方法和D方法的区别 ThinkPHP 中M方法和D方法都用于实例化一个模型类,M方法 用于高效实例化一个基础模型类,而 D方法 用于实例化一个用户定义模型类. 使用M方法 如果是如下情况,请考虑使用 ...

  9. ThinkPHP 的模型使用详细介绍--模型的核心(七)

    原文:ThinkPHP 的模型使用详细介绍--模型的核心(七) 注意:本节是ThinkPhp框架对数据操作的核心处理部分 大家还是在这里看清楚可以将其剪切放到代码编辑器中查看 本章节给大家着重介绍模型 ...

随机推荐

  1. jquery-fakeloader插件的使用

    jquery-fakeloader插件示例代码 link rel="stylesheet" href="../../Content/fakeLoader.css" ...

  2. Java类载入器

    1.   系统载入器简单介绍 Java虚拟机中能够安装多个类载入器,系统默认三个主要类载入器(BootStrap.ExtClassLoader.AppClassLoader).每一个类载入器负责载入特 ...

  3. web服务启动spring自己主动运行ApplicationListener的使用方法

    我们知道.一般来说一个项目启动时须要载入或者运行一些特殊的任务来初始化系统.通常的做法就是用servlet去初始化.可是servlet在使用spring bean时不能直接注入,还须要在web.xml ...

  4. AutoCompleteTextView和Spinner的使用方法

    首先说明AutoCompleteTextView的使用方法.主要是起到自己主动填充的作用.输入keyword,假设存在该字便能够自己主动填充.代码例如以下 activity_main.xml < ...

  5. JAVA设计模式之【建造者模式】

    建造者模式 建造者模式为客户端返回的不是一个简单的产品,而是一个由多个部件组成的复杂产品 角色 Builder抽象建造者 buildPartX getResult ConcreteBuilder具体建 ...

  6. JS,Javascript加载与函数执行过程

    Js,Javascript加载与函数执行过程 test.html <!DOCTYPE HTML> <html lang="en"> <head> ...

  7. mybatis的sql中使用$会出现sql注入示例

    mybatis的sql中使用$会出现sql注入示例: 模拟简单登录场景: 页面代码: function login(){ //sql注入 var user = { username : "' ...

  8. oracle-常见的执行计划(一)

    一.表访问方式 CBO基础概念中有讲到,访问表的方式有两种:全表扫描和ROWID扫描. 全表扫描的执行计划:TABLE ACCESS FULL ROWID扫描对应执行计划:TABLE ACCESS B ...

  9. [转]Adobe CC 2018 下载链接 Creative Cloud 2018 - Creative Cloud 2018 – Adobe CC 2018 Download Links

    Creative Cloud 2018 – Adobe CC 2018 Download Links – ALL Languages Adobe CC 2018Direct Downloads Win ...

  10. Java数据库连接——PreparedStatement的使用

    首先了解Statement和PreparedStatement的区别: 由此可见,一般使用PreparedStatement. 操作数据库SU(Course表),其中Course属性有Cno,Cnam ...