其实这几天一直都想找时间把这个感悟整理出来,也是这一段一直思考的问题,因为这一段参加一个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. XtraReport 添加空行的办法,很详细

    这两天为了做报表,研究了一下XtraReport .为了添加空行,想了很多办法.其中如果有分组时,网上给出的办法就会失败.现将经验公布一下,希望各位都能少走弯路. 1.加入自定义函数CreateCel ...

  2. linux 如何显示一个文件的某几行(中间几行)

    linux 如何显示一个文件的某几行(中间几行) [一]从第3000行开始,显示1000行.即显示3000~3999行 cat filename | tail -n +3000 | head -n 1 ...

  3. JavaWeb 学习003-简单登录页面功能实现

    先说下题外话:学习不是看你学了多久,重点是学到多少: 这就要求   效率.我在这三个小时,但是有效率的又有多久?只是做了这么一点简单的事. 登录页面 跟数据库交互,进行判断是否登陆成功.我只是实现了一 ...

  4. ajax 请求如何解决乱码

    今天遇到一个问题,有关ajax 请求中传输中文,遇到乱码的问题. 如下代码: function UpdateFolderInfoByCustId(folderId, folderName, custI ...

  5. jqueyr获取动态创建的元素

    javascript代码是按照代码顺序执行的,所以如果你用某个元素的click事件创建一个元素,id为test,然后在下面$("#test")是无法选择到的. 正确的方法是将在cl ...

  6. 数据库SQL

    mySQL的安装和简单的命令 show -uroot -p 进入mySQL show databases 查看所有库 show tables 查看所有表 use 表名 进入表 create datab ...

  7. Bash Shell字符串操作

    转自:http://my.oschina.net/aiguozhe/blog/41557,并对内容作了验证修改. 1. 取长度 str="abcd" 2.查找子串的位置 貌似也只有 ...

  8. 为什么Smalltalk不流行

    最近读到一本书,说Python程序员比Java程序员聪明.同理,懂Smalltalk的程序员也比Java程序员聪明.所以,我在StackOverflow上找到这个关闭很久的问题,整理了一下,跟大家分享 ...

  9. cocos2dx的build_win32.dat出现问题以及install-template-msvc.dat出现.js没有脚本引擎

    关于cocos2dx-2.x.x版本当中出现build_win32.bat执行失败 (针对VS2013)应当在VS的安装路径查找msbuild的文件夹,再其中查找msbuild.exe文件找到四个东西 ...

  10. 【Mail】JavaMail介绍及发送邮件(一)

    JavaMail介绍 JavaMail是SUN提供给开发人员在应用程序中实现邮件发送和接收功能而提供的一套标准开发类库,支持常用的邮件协议,如SMTP.POP3.IMAP,开发人员使用JavaMail ...