iOS设计模式——MVC(Model-View-Controller)

转载 2016年06月02日 10:03:30

Modol View Controller(MVC)是一种最早的也是最成功的可重用的设计模式,70年代的时候首次在smaltalk编写的程序中成功使用。基于MVC设计模式,Cocoa整体架构可以划分为三个子系统:Model, View, Controller,我们可以相应的理解为:数据模型,视图和控制器。


Modol View和Controller的角色

要想理解MVC设计模式中每个子系统的角色,我们就需要理解一个应用程序的功能和行为。我们知道一个应用程序通常需要存储数据信息,检索数据信息以及把这些数据信息呈现给用户,同时还要允许用户对数据进行编辑(增删查改等操作)。那么MVC的角色就分别为:

Model: 为应用程序提供独立的,不依赖于View和Controller子系统的数据模型。

View: 以一定的形式像用户呈现数据并允许用户对数据进行操作。理解View的关键是要理解同样的数据可以有不同的呈现方式,可以以列表的形式显示,可以以图片的形式显示,有时根据需求只需显示部分数据。

Controller: 在Model和View之间加入一个Controller的主要目的就是“去耦”,即消除Model和View之间的耦合性。用户和View交互时,View会通知Controller在View中有数据发生了更改,而Controller则会将这个数据的改变反应到Model中。Controller在这个过程中扮演转义数据的角色(因为呈现在View中的数据可能是便于用户阅读的文字或是数字,而存储在Model中的数据可能是比较高效但不便于直接阅读的二进制或是其他存储方式比如关系数据库,Controller可以承担转化这两种数据形式的职责)。

Controller的去耦作用如下图示(注:本文所用插图来源于书《Cocoa Design Pattern》, Erik M.Buck 和 Donald A.Yacktman著):


第一步,滑动按钮发生变化,发送一个消息给Controller;第二步,Controller发送消息告诉Model按钮位置发生了变化需要更新数据Value;第三步,Model更新完数据通知Controller;第四步,Controller完成对View中其他需要更新的 View控件的更新,比如上面的文字输入框。

在上面的整个过程可能你会觉得Model和View明明可以直接交互,为什么要引入Controller呢?原因就是,View通常会经常根据用户需求而发生改变(相信经常和客户打交道的朋友对此感触颇深),而且用户数据格式有时候也会发生改变(比如客户要求数据需要从MySQL数据库迁移到oracle),这样把View和Model分离出来就显得极其重要了。


Cocoa中的MVC

在Cocoa框架中,可以说MVC设计模式被用到了极致。不但整个框架是基于MVC设计的(见下图),而且在更小的范围内也广泛使用了MVC。


Core Data简化了很多应用程序的Model部分的设计;ApplicationKit包含了View, Controller通用的一些类。Foundation提供了对操作系统接口,NSObject基类,脚本支持以及其他特性的访问。


小结

MVC设计模式减少了程序中模块间的耦合性,但是有时候也增加了程序的复杂度。从长远来讲,MVC这样一个清晰的子系统分离设计可以减少系统的维护开销并且可以很方便的实现系统功能的增强和扩展。另外一个考虑就是,子系统的分离对软件测试工作也带来了很大的方便,比如我们可以直接测试升级了的系统Model,而不一定非得通过用户界面来测试,因为当通过用户界面测试失败时,我们不知道到底是界面导致的还是Model本身导致的或是两者同时引起的。再有就是,通常一个系统的View和Model是由不同的团队开发的,这样每个子系统的清晰分离就显得尤为重要了。

相关文章推荐

iOS设计模式——MVC(Model-View-Controller)

转载:http://blog.csdn.net/lovefqing/article/details/8270123 Modol View Controller(MVC)是一种最早的也是最成功的可...

iOS设计模式——MVC(Model-View-Controller)

Modol View Controller(MVC)是一种最早的也是最成功的可重用的设计模式,70年代的时候首次在smaltalk编写的程序中成功使用。基于MVC设计模式,Cocoa整体架构可以划分为...

OpenCV 2 学习笔记(13): 算法的基本设计模式<4> :使用Model-View-Controller模式创建一个应用程序

前面我们介绍了三个比较重要的设计模式:策略,控制器,单例。现在我们我们将这些模式用在一起形成一个程序架构,MVC架构模式,它将一个程序的应用逻辑和用户接口完全分离。下面我们在MFC下使用这个模式创建一...

iOS开发之有趣的UI —— 数据转模型及MVC设计模式

在上一篇iOS开发之有趣的UI —— 基础控件与经典案例中已经对基本控件进行了详细的介绍并且简单的做了一个购物车的项目,但是这个项目还有待完善,里面还有很多非常实用技术点和设计思想,所以本次分享将从以...

iOS 基于MVC设计模式练习UITableView使用 —— HERO博客

iOS 基于MVC设计模式练习UITableView使用。

设计模式-- Model View Presenter

随着 UI 创建技术(如 ASP.NET 和 Windows® Form)的功能越来越强大,让 UI 层执行更多功能已成为普遍的做法。由于没有清晰的职责划分,UI 层经常成为逻辑层的全能代理,而后者实...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)