其实这几天一直都想找时间把这个感悟整理出来,也是这一段一直思考的问题,因为这一段参加一个PHP后台项目的开发,框架使用的是CI,随着项目的进展,对于CI接触的也越多,但是由于理解的可能并不深刻,我也只是看到了我所看到的,所以如果有不对的地方,欢迎给出意见和指正。

这几天接触CI框架,发现它的MVC模式运用的如此清晰简洁,完全按照MVC的分别组织模块,而且Model、View与Controller的交互只要调用方法就可以,如果有大量交互,Controller里的方法数量或许会增多,但也可以分模块的剥离来简化Controller,不过,这种方法数量的增多并不会造成Controller的臃肿,因为用户和界面相关的交互都在view中用JS动态完成,而Model的修改,controller也就是调用Model传参,View在向controller的主动交互中好像并没有受到限制,而目前我知道Model可以返回数据给Controller,但还不知道怎么主动调用Controller。不过这种单一流程的简洁性起初就已经让我惊讶了一把。虽然MVC模式的含义在哪里都是一样的,但运用的不同和语言架构的不同却会导致不同的结果和影响,比如iOS中MVC的交互里就限制了View和Model主动向controller的交互,并不是不能,只是做了一层限制,controller可以自由调用View和Model,传参最简单的方式就是属性传值,而如果一个View有了用户操作后想要调用controller就不会那么容易了,不过代理可以解除这个问题,只是代理委托模式再清晰,最后交互的主体操作都是在controller里;而Model如果又发生改变又想要congtroller做出回应,就更不容易了,KVO模式和通知的使用也可以解决,但这一层限制是避免不掉的。

从CI来看,View层并不只是显示,用户交互操作留在View里或许可以让controller不至于那么臃肿,而MVC下Controller的臃肿却是iOS架构模式中一直在讨论的问题,但是如果把一部分用户操作的响应直接放在View层也会有问题,很多时候View层可以接收用户操作,但如果不和Model沟通是无法响应的,还是避免不掉通过controller,那么到底应该从哪里入手呢,我最后的想法是,应该是Model,也许Model并不是只能作为一个数据内容的展示,如果给它必要的方法,也许可以帮助Controller分担一部分的工作,但这毕竟是有限的。

其实我以前也一直认为iOS里如果将controller的内容进行模块划分,是可以降低controller的冗余的,如果现在再给Model分担一部分内容,冗余程度会更低一些,但是终究是无法达到CI的这样简洁,而因为对controller冗余问题的讨论也诞生了MVVM,只是我对这种模式的运用并不能很熟练,只是知道大概是怎么个情况,而且目前的MVVM模式也不像MVC那么的成熟,精简controller估计会是要一直进行的一个讨论了。

PHP项目感悟 -- 从CI框架来看iOS的MVC的更多相关文章

  1. 在CI框架中的配置整合amfphp

    之前做的项目用到CI框架和amfphp的整合,主要用于php与flex的交互,在此做一下记录: 一. 安装CI框架: 1.  搭建PHP运行环境,本人在WIN7下用WAMP作测试,安装目录:d:/wa ...

  2. [BUGCASE]CI框架的post方法对url做了防xss攻击的处理引发的文件编码错误

    一.问题描述 出现问题的链接: http://adm.apply.wechat.com/admin/index.php/order/detail?country=others&st=1& ...

  3. 记录使用CI框架开发项目时遇到的问题

    关于CI框架在视图文件中怎样引入静态资源文件(js,css,images)的问题: 第一步:在application/config/config.php文件中配置  $config['base_url ...

  4. 【军哥谈CI框架】之入门教程之第二讲:分析CI结构和CI是怎么工作的

    [军哥谈CI框架]之入门教程之第二讲:分析CI结构和CI是怎么工作的   之入门教程之第二讲:分析CI结构和CI是如何工作的大家好!上一节,我们共同部署了一个CI网站,做到这一点非常简单,但是,亲们, ...

  5. **【ci框架】PHP的CI框架集成Smarty的最佳方式

    因为CI自带的模板功能不是很方便,所以大家普遍采用集成Smarty的方式来弥补CI这方面的不足. 本人在网上看了不少CI集成Smarty的教程,包括咱们CI论坛里面的一个精华帖子 http://cod ...

  6. PHP CI框架最近学到的内容

    CI框架配置方面注意的细节 在config里面的database.php里面是和数据库配置相关的内容 $db['default'] = array( 'dsn' => '', 'hostname ...

  7. CI框架入门笔记

    当前(2019-03-22)CodeIgniter 框架的最新版本是 3.1.5,于2017年6月发布,距今快两年了也没有更新,这与 Laravel 的更新速度相比差距太大了.因为确实,它是一个很古老 ...

  8. 【军哥谈CI框架】之CI中集成百度UEditor

    Hello,各位亲,新的一周来临啦,很高兴这么快又跟大家伙见面!话说上一回,军哥带大家用JQuery写了一个城市级联菜单的例子 ,不知道亲们学会了多少,是否自己可以独立写出来了呢. 军哥很是期待大家学 ...

  9. CI框架下 新浪微博登录接口完整版

    https://www.cnblogs.com/yznyzcw/p/3756622.html#top 说明:本贴只适合CI框架.功能实现:登录接口跳转链接成功,获取用户信息(包括最重要的u_id)成功 ...

随机推荐

  1. jq 部分用法

    这几天一直在写前台,因为jq是在客服端处理数据的,所以公司,一般都用这种方法,下面是我这几天用到的一些东西 1.修改table表格的第一轮显示值 function changeTableRowValu ...

  2. 网站fail_over测试(障害测试)

    确认Web和DB进行操作: 一:确认web: ①确认进程是否存在: ps aux|grep tomcat ②关闭tomcat: /etc/init.d/catalina_sbi stop ③重启tom ...

  3. JavaScrip之对象与继承

    这章主要学习对象.原型.原型链和继承,比较核心,所以单独整理这一章的内容. 理解对象:一组名值对,值可以是数据或函数. 属性类型:1数据属性:包含一个数据值的位置.在这个位置可以读取和写入值,4个描述 ...

  4. jquery获取所有被选中checkbox

    想要得到所有被选中的checkbox的value ,并且传给后台 var headers = ""; $('input[name="header"]:check ...

  5. Servlet目录

    Servlet目录   课时1 Servlet概述12:30 课时2 servlet的第一个例子31:08 课时3 servlet的生命周期18:18 课时4 HttpServlet详细讲解31:43 ...

  6. ORACLE存储过程创建失败,如何查看其原因

    工作中用SQL Server比较多,Oracle可以说是小白,最近想用存储过程来完成单据复制的功能,结果遇到各种问题,其实都是非常简单的问题,但是对我来说还是花了很多时间来解决,浪费这些时间非常不值得 ...

  7. 近期微博吐槽言论存档,涉及“性能优化”、C++陋习等

    写C++程序的几个陋习:class 名以大写 C 开头,例如 CDate:成员变量以 m_ 开头:变量采用匈牙利命名法:不知道何时禁用 copy-ctor/assign operator.前三个可能是 ...

  8. ASCII、Unicode、GBK和UTF-8字符编码的区别联系

    转自http://dengo.org/archives/901 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状态是好的,于是他们把这称 ...

  9. free-electrons linux内核和驱动

    操作系统的三个作用:1.管理硬件资源:2.提供独立于架构和硬件的可移植的软件接口3.处理不同应用对相同硬件资源的同时访问 系统调用接口是稳定的,系统调用由c函数库封装,用户程序基本不需要直接调用系统函 ...

  10. 数字与字母 随机数小demo

    public String generateRandomId(){ String chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHI ...