浅析MVC和说媒的过程
什么是MVC?
MVC 全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面 显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同一时候,不须要又一次编写业务逻辑。
图解MVC(斯坦福公开课的课件)
看了上面的MVC定义和图解,对MVC有了初步的了解,特别是斯坦福这个课件,讲的很到位。可是在实际开发过程中,却感觉离MVC的标准越来越远。
我也看过一些朋友写的iOS项目,看之前问MVC,都讲的头头是道,可是在项目中却体现的不是那么好。我自己写项目也是,理论上是理解了MVC的模式,可是真去写代码,还是认为,有些地方不到位。
特别是C(我们就把UIViewController当做C来看,网上有对C的其它解释)显得别急臃肿。有时候C里面代码几千行(并非说代码过千就是不符合MVC),C干了非常多M干的事,同一时候也干了非常多V要干的事。
这几天我看了一个项目(AFNetworking的作者写的DEMO,大家能够到github上下载),认为MVC用的很到位。每一步都是很周到,M和C的对接,V和C的对接,做到很到位。
对于MVC,我说说我的理解,俗一点讲:媒婆说没得过程。M -> 男人 , V -> 女人 , C -> 媒婆。
C(媒婆) 要给 M(男人) 介绍个女朋友 V (女人),C 是一个桥梁起着对接的作用, M 和 V 本是不认识的两个人,不能直接沟通。
说媒过程是这种:C 给 M 说,第一次见女孩子,你要给女孩子准备什么礼物吧?
这个时候,M 肯定不会说,这点小事,你还来麻烦我,自己去买吧,那预计媒婆气都气死了,这事肯定成不了。(写代码的时候,不要让C干M得事)
这事必须 M 自己去做,M 买东西就是处理数据得过程。买东西怎么去买?多少钱?怎么讲价?这都是 M 自己要去干的事。终于结果是 M 买来礼物,礼物就是我们编程过程中 Model所产生的对象。
礼物买来了,M 也不认识 V ,肯定也不知道怎么送给 V,所以这个时候 C 的作用就体现出来了,M 要把 买来的礼物(Object)交给C,让C帮忙送给 V。
就这样,V 拿到礼物,认为不错,就自己用了。
回忆一下这个过程:C 发起一个请求,买礼物。M 知道之后,就去运行这件事,终于买来礼物。M 脱 C 把礼物送给V。一个完整的请求数据,展示数据的过程。
尽管有点俗,可是还是有一定道理的。
后面时间同意的话,我会具体解释一下AFNetworking的作者写的DEMO。看看MVC在项目的体现究竟是什么样的。
我的微信公众号 iOS开发 : iOSDevTip
浅析MVC和说媒的过程的更多相关文章
- 浅析MVC模式与三层架构的区别
浅析MVC模式与三层架构的区别 三层架构和MVC是有明显区别的,MVC应该是表现模式(三个加起来以后才是三层架构中的UI层).三层架构(3-tier application) 通常意义上的三层架构就是 ...
- Asp.net MVC进入请求管道的过程
Asp.net MVC进入请求管道的过程 Asp.Net MVC 跟AspNet 入口解释 Asp.Net MVC请求处理过程 mvc 请求模型 mvc的原理 mvc模型 NewMVCPipleLin ...
- 从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler
熟悉WebForm开发的朋友一定都知道,Page类必须实现一个接口,就是IHttpHandler.HttpHandler是一个HTTP请求的真正处理中心,在HttpHandler容器中,ASP.NET ...
- 浅析MVC模式与三层架构的区别01
三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层)三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI ...
- MVC中Action的执行过程
接着上一篇:MVC控制器的激活过程 一.代码现行,该伪代码大致解析了Action的执行的过程 try { Run each IAuthorizationFilter's OnAuthorization ...
- MVC的控制器的激活过程,我们从MvcHandler开始讲,前面的事情以后再讲
一.从MvcHandler开始(不要觉得是代码,让你看懂才是最重要的) using Microsoft.Web.Infrastructure.DynamicValidationHelper; usin ...
- 【转】从源码浅析MVC的MvcRouteHandler、MvcHandler和MvcHttpHandler
原文:http://www.cnblogs.com/jeffwongishandsome/archive/2012/01/08/2316521.html 熟悉WebForm开发的朋友一定都知道,Pag ...
- Spring MVC源码(一) ----- 启动过程与组件初始化
SpringMVC作为MVC框架近年来被广泛地使用,其与Mybatis和Spring的组合,也成为许多公司开发web的套装.SpringMVC继承了Spring的优点,对业务代码的非侵入性,配置的便捷 ...
- 浅析MVC Pattern
一.前言 最近做CAD插件相关的工作,用到了一些模式,解决对应场景的问题. 比如插件的运行实例上使用Singleton.实例内部使用了MVC(Strategy and Observer ). 针对CA ...
随机推荐
- poj3468(线段树)
题目连接:http://poj.org/problem?id=3468 线段树功能:update:成段增减 query:区间求和. 分析:需要用到延迟标记(或者说懒惰标记),简单来说就是每次更新的时候 ...
- cowboy rest
REST Flowcharts 这章节将通过一些列不同的流程图来介绍REST处理状态机. 一个请求主要有四条路线,一个是方法OPTIONS. 一个是方法GET和HEAD.一个是PUT.POST和PAT ...
- .net数据根据字段进行分类(linq语句)
var items = List<实体>; var models = items.GroupBy(r => r.分类字段).ToDictionary(d => d.Key, d ...
- wampserver图标黄色
wampserver图标黄色(多个httpd.exe服务,以前装了apache) 服务--->httpd.exe右击这个服务打开文件位置就知道是不是wampserver的服务.如果不是就停掉这给 ...
- 飘逸的python - __new__、__init__、__call__傻傻分不清
__new__: 对象的创建,是一个静态方法.第一个參数是cls.(想想也是,不可能是self,对象还没创建,哪来的self) __init__ : 对象的初始化, 是一个实例方法,第一个參数是sel ...
- Redis深入之数据结构
Redis主要数据结构 链表 Redis使用的C语言并没有内置这样的数据结构,所以Redis构建了自己的链表实现.列表键的底层实现之中的一个就是链表,一个列表键包括了数量比較多的元素,列表中包括的元素 ...
- Android基于cordova3.3插件开发
最近的工作项目,需要使用cordova插件开发,详细Cordova角色,不会走,你可以去百度自身OK该,直接启动.详细过程,我有一个小Demo解说提前进行. 还只是接触,东西太理论基础,我也不太清楚, ...
- mysql表修改
CREATE TABLE tab2 AS (SELECT * FROM tab1)这种做法表的存储引擎也会采用服务器默认的存储引擎而不是源表的存储引擎,此种复制方法把表的内容也一起复制过来了. CRE ...
- hdu3709(数位dp)
求区间[l,r]内有多少个数的满足: 选一个位为中点,是的左边的数到该位的距离等于右边的位到该位的距离. 比如4139 选择3位中点, 那么左边的距离是 4 * 2 + 1 * 1 , 右边的距 ...
- JDK1.8源码分析之HashMap(一) (转)
一.前言 在分析jdk1.8后的HashMap源码时,发现网上好多分析都是基于之前的jdk,而Java8的HashMap对之前做了较大的优化,其中最重要的一个优化就是桶中的元素不再唯一按照链表组合,也 ...