最新消息:文章中包含代码时,请遵守代码高亮规范!

mvc(转载)

iOS 黄, 艳承 99浏览 0评论

MVC 具有什么样的优势,各个模块之间怎么通信,比如点击 Button 后 怎么通知 Model?

[iOS] MVC 设计模式

MVC 是一种设计思想,一种框架模式,是一种把应用中所有类组织起来的策略,它把你的程序分为三块,分别是:

M(Model):实际上考虑的是“什么”问题,你的程序本质上是什么,独立于 UI 工作。是程序中用于处理应用程序逻辑的部分,通常负责存取数据。

C(Controller):控制你 Model 如何呈现在屏幕上,当它需要数据的时候就告诉 Model,你帮我获取某某数据;当它需要 UI 展示和更新的时候就告诉 View,你帮我生成一个 UI 显示某某数据,是 Model 和 View 沟通的桥梁。

V(View):Controller 的手下,是 Controller 要使用的类,用于构建视图,通常是根据 Model 来创建视图的。

要了解 MVC 如何工作,首先需要了解这三个模块间如何通信。

MVC通信规则

Controller to Model

可以直接单向通信。Controller 需要将 Model 呈现给用户,因此需要知道模型的一切,还需要有同 Model 完全通信的能力,并且能任意使用 Model 的公共 API。

Controller to View

可以直接单向通信。Controller 通过 View 来布局用户界面。

Model to View

永远不要直接通信。Model 是独立于 UI 的,并不需要和 View 直接通信,View 通过 Controller 获取 Model 数据。

View to Controller

View 不能对 Controller 知道的太多,因此要通过间接的方式通信。

Target action。首先 Controller 会给自己留一个 target,再把配套的 action 交给 View 作为联系方式。那么 View 接收到某些变化时,View 就会发送 action 给 target 从而达到通知的目的。这里 View 只需要发送 action,并不需要知道 Controller 如何去执行方法。

代理。有时候 View 没有足够的逻辑去判断用户操作是否符合规范,他会把判断这些问题的权力委托给其他对象,他只需获得答案就行了,并不会管是谁给的答案。

DataSoure。View 没有拥有他们所显示数据的权力,View 只能向 Controller 请求数据进行显示,Controller 则获取 Model 的数据整理排版后提供给 View。

Model 访问 Controller

同样的 Model 是独立于 UI 存在的,因此无法直接与 Controller 通信,但是当 Model 本身信息发生了改变的时候,会通过下面的方式进行间接通信。

Notification & KVO一种类似电台的方法,Model 信息改变时会广播消息给感兴趣的人 ,只要 Controller 接收到了这个广播的时候就会主动联系 Model,获取新的数据并提供给 View。

从上面的简单介绍中我们来简单概括一下 MVC 模式的优点。

1.低耦合性

2.有利于开发分工

3.有利于组件重用

4.可维护性

原文链接:http://www.jianshu.com/p/c12f90300077

转载时请注明出处及相应链接,本文永久地址:http://blog.it985.com/22879.html


pay_weixin
pay_weixin
微信打赏
pay_weixin
支付宝打赏
感谢您对作者Jasmine的打赏,我们会更加努力!    如果您想成为作者,请点我

您必须 登录 才能发表评论!