PHP项目感悟 -- 从CI框架来看iOS的MVC
其实这几天一直都想找时间把这个感悟整理出来,也是这一段一直思考的问题,因为这一段参加一个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的更多相关文章
- 在CI框架中的配置整合amfphp
之前做的项目用到CI框架和amfphp的整合,主要用于php与flex的交互,在此做一下记录: 一. 安装CI框架: 1. 搭建PHP运行环境,本人在WIN7下用WAMP作测试,安装目录:d:/wa ...
- [BUGCASE]CI框架的post方法对url做了防xss攻击的处理引发的文件编码错误
一.问题描述 出现问题的链接: http://adm.apply.wechat.com/admin/index.php/order/detail?country=others&st=1& ...
- 记录使用CI框架开发项目时遇到的问题
关于CI框架在视图文件中怎样引入静态资源文件(js,css,images)的问题: 第一步:在application/config/config.php文件中配置 $config['base_url ...
- 【军哥谈CI框架】之入门教程之第二讲:分析CI结构和CI是怎么工作的
[军哥谈CI框架]之入门教程之第二讲:分析CI结构和CI是怎么工作的 之入门教程之第二讲:分析CI结构和CI是如何工作的大家好!上一节,我们共同部署了一个CI网站,做到这一点非常简单,但是,亲们, ...
- **【ci框架】PHP的CI框架集成Smarty的最佳方式
因为CI自带的模板功能不是很方便,所以大家普遍采用集成Smarty的方式来弥补CI这方面的不足. 本人在网上看了不少CI集成Smarty的教程,包括咱们CI论坛里面的一个精华帖子 http://cod ...
- PHP CI框架最近学到的内容
CI框架配置方面注意的细节 在config里面的database.php里面是和数据库配置相关的内容 $db['default'] = array( 'dsn' => '', 'hostname ...
- CI框架入门笔记
当前(2019-03-22)CodeIgniter 框架的最新版本是 3.1.5,于2017年6月发布,距今快两年了也没有更新,这与 Laravel 的更新速度相比差距太大了.因为确实,它是一个很古老 ...
- 【军哥谈CI框架】之CI中集成百度UEditor
Hello,各位亲,新的一周来临啦,很高兴这么快又跟大家伙见面!话说上一回,军哥带大家用JQuery写了一个城市级联菜单的例子 ,不知道亲们学会了多少,是否自己可以独立写出来了呢. 军哥很是期待大家学 ...
- CI框架下 新浪微博登录接口完整版
https://www.cnblogs.com/yznyzcw/p/3756622.html#top 说明:本贴只适合CI框架.功能实现:登录接口跳转链接成功,获取用户信息(包括最重要的u_id)成功 ...
随机推荐
- Android Studio 出现Failed to open zip file的问题
修改gradle . 首先我们打开setting搜索gradle.我们可以从该界面上看到gradle的版本.
- 使用guava进行对字符串的加锁
java的synchronized关键字是堆某对象加锁,但是我们当需要对某个字符串加锁怎么办 比如对同一个订单只能有一个操作,但是对其他订单的操作不影响 使用 guava包下的 Interner 类 ...
- (转)Jquery最实用的实例及源码(http://www.cnblogs.com/kingfly/archive/2012/12/05/2802539.html)
1:窗口拖动 http://jqueryui.com/resizable/#max-min 2:导航条前后顺序拖动 http://jqueryui.com/sortable/ 3:类似百度首页板块顺序 ...
- 四元数(Quaternions)简介
经常在代码中看到Quaternions,也知道它是用来表达三维空间的旋转的,但一直没有更深的理解.这两天终于花点时间看了看维基百科的介绍,算是多了解了点.做个记录吧! 本质上而言,四元数是一个数学概念 ...
- java class的兼容问题
前不久在工作中,遇到了几次编译class引起的NoSuchMethodError,经过分析与测试验证,也算是搞清楚了中间的来龙去脉,现在把一些结论性的东西(附带一些过程性的分析)分享出来. 在使用ja ...
- XE3随笔21:系统默认语言与系统支持的语言列表
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, For ...
- linux TLS 线程本地变量
最近在写底层hook的时候, 涉及到线程安全问题, 最开始我设计的时候使用的互斥量, 但是考虑到都是底层函数,加锁会导致性能问题, 一直在思考优化方案, 后来偶然想到,java里面有线程本地变量的AP ...
- 设置secureCRT支持中文
将options菜单下面的session options 中的 appearance 标签页里面的 character encoding 选择UTF-8就可以.
- php嵌套数组递归搜索返回数组key
var rewardTypes={"experience":{"\u7ecf\u9a8c\u503c":{"1":"\u660e\ ...
- [WPF]Slider控件常用方法
WPF的Slider控件继承自RangeBase类型,同继承自RangeBase的控件还有ProgressBar和ScrollBar,这类控件都是在一定数值范围内表示一个值的用途. 首先注意而Rang ...