以前开发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的更多相关文章

  1. E 最熟悉的陌生人 (纪念当年就读的梅州市江南高级中学)

    最熟悉的陌生人 作者:张慧桥 枪与玫瑰” 负责审讯的兄弟真是好样的,回来后的第四天上午就让黄志深那小子招了出来. 这可真的不容易! 现在公安部对我们审讯工作有很多的规定,其中一条就是不准刑讯逼供,就是 ...

  2. D 最熟悉的陌生人 (纪念当年就读的梅州市江南高级中学)

    最熟悉的陌生人 作者:张慧桥 “蝶恋花” 我匆匆地跟听众道了声再见,手忙脚乱地关掉了机器,拿出手机按下了一个快捷键…… “嘟…嘟…” 电话响两下后,我听到了那个我在睡梦中都可以认出来的声音. “你现在 ...

  3. C 最熟悉的陌生人 (纪念当年就读的梅州市江南高级中学)

    最熟悉的陌生人 作者:张慧桥 “枪与玫瑰” 我送走了“蝶恋花”,犹有一种身在梦中的感觉,昨晚的宿醉让我只觉得头晕乎乎的很不舒服,想想自己连澡都还没洗呢,便去洗了个冷水澡. 煮了杯浓浓的咖啡喝了下去,我 ...

  4. B 最熟悉的陌生人 (纪念当年就读的梅州市江南高级中学)

    最熟悉的陌生人 作者:张慧桥 枪与玫瑰 我看了一下聊天室的名单,哈哈哈,我不禁喜出望外:蝶恋花那丫头片子挂在线上呢,真是天助我也.初时的担心一扫而光,我精神抖擞地喝下一大口咖啡,猛抽了三口烟,现在的我 ...

  5. A 最熟悉的陌生人 (纪念当年就读的梅州市江南高级中学)

    最熟悉的陌生人 作者:张慧桥 “枪与玫瑰” 就象瘟98有时会死机天有时会下雨枪有时会走火美国战机有时会掉下来那样,我上网聊天也只是个偶然. 都是栀子那死丫头惹的祸.让每天都觉得是情人节的我那天我自己都 ...

  6. .net中的WebForm引人MVC的控制器

    当下.net中比较火的模式MVC模式,说实话对于菜鸟的我还没有遇到一个比较健全的MVC模式的项目也是比较遗憾.偶然间在网上看到WebForm实现MVC中的模式(主要是控制器...)就学习了一波,下面是 ...

  7. 设计模式的征途—15.观察者(Observer)模式

    在日常生活中,交通信号灯指挥者日益拥挤的城市交通.红灯亮,汽车停止:绿灯亮,汽车继续前行:在这个过程中,交通信号灯是汽车的观察目标,而汽车则是观察者.随着交通信号灯的变化,汽车的行为也会随之变化,一盏 ...

  8. JS or C#?不存在的脚本之争

    前言: 又来到了周末,小匹夫也终于有了喘口气写写博客的时间和精力.话说周五的下午,小匹夫偶然间晃了一眼蛮牛的QQ群,又看到了一个Unity3D开发中老生长谈的问题,“我的开发语言究竟是选择JavaSc ...

  9. Nancy之基于Nancy.Hosting.Aspnet的小Demo

    近来学习了一下Nancy这个框架,感觉挺好用的,就写篇简单的文章记录一下大致用法,由于是刚接触,写的代码 可能不规范,也没有具体的分层..莫吐槽... Nancy的官网:http://nancyfx. ...

随机推荐

  1. iframe高度宽度自适应(转)

    http://www.cnblogs.com/snandy/p/3900016.html 跨子域的iframe高度自适应 完全跨域的iframe高度自适应 同域的我们可以轻松的做到 1. 父页面通过i ...

  2. Approvals for EBS 1.4 Now Available

    If you haven't been following the excellent Workflow blog, you might have missed the announcement ab ...

  3. Probabilistic Graphical Models

    http://innopac.lib.tsinghua.edu.cn/search~S1*chx?/YProbabilistic+Graphical+Models&searchscope=1& ...

  4. repo: 创建local manifest以及如何添加app到CM/Android build系统中

    The local manifest Creating a local manifest allows you to customize the list of repositories on you ...

  5. 【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 ...

  6. iOS-验证码倒计时60秒

    一. 要求 1.点击获取验证码按钮,60秒倒计时,按钮变成不可点击状态,按钮文字变成倒计时的秒数. 2.当倒计时为0的时候,释放掉定时器NSTimer,按钮变成可以点击状态,按钮文字变成"获 ...

  7. Muduo 多线程模型对比

    本文主要对比Muduo多线程模型方案8 和方案9 . 方案8:reactor + thread pool ,有一个线程来充当reactor 接受连接分发事件,将要处理的事件分配给thread pool ...

  8. Android下拉刷新底部操作栏的隐藏问题

    最近自己编写下拉刷新的时候,发现了一个问题,就是有一个需求是这样的:要求页面中是一个Tab切换界面,一个界面有底部操作栏,不可下拉刷新,另一个界面没有底部操作栏,但可以下拉刷新. 按照平常的做法,我在 ...

  9. MIUI选项框开关样式模拟

    有IOS的开关模拟,当然也有MIUI的开关模拟 看到设置选项里面的开关样式,突发奇想地来试试    最终效果如图: 实现过程 1. 选项框checkbox 模拟开关当然需要一个选项框,这里用到了复选框 ...

  10. 网狐6603棋牌游戏源码.rar

    网狐6603棋牌游戏源码.rar http://pan.baidu.com/s/1dFgGNq5 网络收集仅供学习,下载后请务必在24小时内删除! 以上是原vc6.0源码,下载后使用vs2015编译, ...