最熟悉的陌生人-------MVC
以前开发iOS程序的时候用的最多的是MVC的设计模式,这种软件架构的模式是由:模型(Model)【屏幕中展示的】、视图(View)【如何展示的】和控制器(Controller)【程序的数据,本质】三部分组成。具体的使用很简单,本质上来说就是:模型【Model】响应用户请求并返回响应数据,视图【View】负责格式化数据并把它们呈现给用户,业务逻辑和表示层分离,同一个模型可以被不同的视图重用,所以大大提高了代码的可重用性。这样使用起来十分的方便上手也比较快,只是最近有人突然问我MVC之间是怎么通讯的?不就是用户操作视图【View】通过控制器对象【Controller】传给数据模型对象,最终会创建或更改模型对象,当模型对象【Model】更改时,它会通知控制器【Controller】,控制器更新相应的视图对象【View】。这样就是它们之间通信的过程,总的来说就是V->C->M -> C -> V,但是具体呢?具体是通过什么更改的,又是通过什么接收的呢???下面这张图相信做过MVC开发的都见过

这张图看着也挺麻烦的各种标记,我做了一个简化版的,上图请看:

通过这个图看起来是不是很清晰明了,我还是简单的解释一下吧MVC的这种模式下Model和View之间是不能直接进行通信的,只能通过Controller传递,而Controller可以直接调用Model,而Model是通过Notification和KVO和Controller间接通信的【上面已经做了标注】,Controller又是通过outlet【注:outlet是控件的引用】直接连接到相应的View中,对View进行控制。View通过action-target、delegate、或者是datasource与Controller进行通信的。就这样MVC之间的通信机制就简单明了了;
最后再简单的提一下MVVM这种设计模式它是将Controller的位置替换为了ViewModel,也就是说在ViewController中View和Controlle之间都是绑定的,这样的话也就能直接将他们进行连接就可以了,这时候我们创建的ViewModel中就直接可以放进去那些所有“表示逻辑”的东西。这样就会简化Controller用一个可以简单的表示一下:

其实本质上还是MVC只是一些“表示逻辑”的代码的位置改变了,使代码更为简洁,这样在进行对Controller测试的时候由于代码的量减少,测试也是很方便的,其实MVVM目前就个人而言使用不多,不足之处还望指教。
欢迎转载,请注明转载和原文出处:http://www.cnblogs.com/windsSunShine/
【一些处理数据逻辑和视图逻辑的,初始化viewmodel】
最熟悉的陌生人-------MVC的更多相关文章
- E 最熟悉的陌生人 (纪念当年就读的梅州市江南高级中学)
最熟悉的陌生人 作者:张慧桥 枪与玫瑰” 负责审讯的兄弟真是好样的,回来后的第四天上午就让黄志深那小子招了出来. 这可真的不容易! 现在公安部对我们审讯工作有很多的规定,其中一条就是不准刑讯逼供,就是 ...
- D 最熟悉的陌生人 (纪念当年就读的梅州市江南高级中学)
最熟悉的陌生人 作者:张慧桥 “蝶恋花” 我匆匆地跟听众道了声再见,手忙脚乱地关掉了机器,拿出手机按下了一个快捷键…… “嘟…嘟…” 电话响两下后,我听到了那个我在睡梦中都可以认出来的声音. “你现在 ...
- C 最熟悉的陌生人 (纪念当年就读的梅州市江南高级中学)
最熟悉的陌生人 作者:张慧桥 “枪与玫瑰” 我送走了“蝶恋花”,犹有一种身在梦中的感觉,昨晚的宿醉让我只觉得头晕乎乎的很不舒服,想想自己连澡都还没洗呢,便去洗了个冷水澡. 煮了杯浓浓的咖啡喝了下去,我 ...
- B 最熟悉的陌生人 (纪念当年就读的梅州市江南高级中学)
最熟悉的陌生人 作者:张慧桥 枪与玫瑰 我看了一下聊天室的名单,哈哈哈,我不禁喜出望外:蝶恋花那丫头片子挂在线上呢,真是天助我也.初时的担心一扫而光,我精神抖擞地喝下一大口咖啡,猛抽了三口烟,现在的我 ...
- A 最熟悉的陌生人 (纪念当年就读的梅州市江南高级中学)
最熟悉的陌生人 作者:张慧桥 “枪与玫瑰” 就象瘟98有时会死机天有时会下雨枪有时会走火美国战机有时会掉下来那样,我上网聊天也只是个偶然. 都是栀子那死丫头惹的祸.让每天都觉得是情人节的我那天我自己都 ...
- .net中的WebForm引人MVC的控制器
当下.net中比较火的模式MVC模式,说实话对于菜鸟的我还没有遇到一个比较健全的MVC模式的项目也是比较遗憾.偶然间在网上看到WebForm实现MVC中的模式(主要是控制器...)就学习了一波,下面是 ...
- 设计模式的征途—15.观察者(Observer)模式
在日常生活中,交通信号灯指挥者日益拥挤的城市交通.红灯亮,汽车停止:绿灯亮,汽车继续前行:在这个过程中,交通信号灯是汽车的观察目标,而汽车则是观察者.随着交通信号灯的变化,汽车的行为也会随之变化,一盏 ...
- JS or C#?不存在的脚本之争
前言: 又来到了周末,小匹夫也终于有了喘口气写写博客的时间和精力.话说周五的下午,小匹夫偶然间晃了一眼蛮牛的QQ群,又看到了一个Unity3D开发中老生长谈的问题,“我的开发语言究竟是选择JavaSc ...
- Nancy之基于Nancy.Hosting.Aspnet的小Demo
近来学习了一下Nancy这个框架,感觉挺好用的,就写篇简单的文章记录一下大致用法,由于是刚接触,写的代码 可能不规范,也没有具体的分层..莫吐槽... Nancy的官网:http://nancyfx. ...
随机推荐
- iframe高度宽度自适应(转)
http://www.cnblogs.com/snandy/p/3900016.html 跨子域的iframe高度自适应 完全跨域的iframe高度自适应 同域的我们可以轻松的做到 1. 父页面通过i ...
- Approvals for EBS 1.4 Now Available
If you haven't been following the excellent Workflow blog, you might have missed the announcement ab ...
- Probabilistic Graphical Models
http://innopac.lib.tsinghua.edu.cn/search~S1*chx?/YProbabilistic+Graphical+Models&searchscope=1& ...
- repo: 创建local manifest以及如何添加app到CM/Android build系统中
The local manifest Creating a local manifest allows you to customize the list of repositories on you ...
- 【leetcode】3 SUM
3 SUM 原题: Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? F ...
- iOS-验证码倒计时60秒
一. 要求 1.点击获取验证码按钮,60秒倒计时,按钮变成不可点击状态,按钮文字变成倒计时的秒数. 2.当倒计时为0的时候,释放掉定时器NSTimer,按钮变成可以点击状态,按钮文字变成"获 ...
- Muduo 多线程模型对比
本文主要对比Muduo多线程模型方案8 和方案9 . 方案8:reactor + thread pool ,有一个线程来充当reactor 接受连接分发事件,将要处理的事件分配给thread pool ...
- Android下拉刷新底部操作栏的隐藏问题
最近自己编写下拉刷新的时候,发现了一个问题,就是有一个需求是这样的:要求页面中是一个Tab切换界面,一个界面有底部操作栏,不可下拉刷新,另一个界面没有底部操作栏,但可以下拉刷新. 按照平常的做法,我在 ...
- MIUI选项框开关样式模拟
有IOS的开关模拟,当然也有MIUI的开关模拟 看到设置选项里面的开关样式,突发奇想地来试试 最终效果如图: 实现过程 1. 选项框checkbox 模拟开关当然需要一个选项框,这里用到了复选框 ...
- 网狐6603棋牌游戏源码.rar
网狐6603棋牌游戏源码.rar http://pan.baidu.com/s/1dFgGNq5 网络收集仅供学习,下载后请务必在24小时内删除! 以上是原vc6.0源码,下载后使用vs2015编译, ...