本节书摘来自异步社区《iOS 8开发指南(第2版)》一书中的第6章,第6.1节MVC模式基础,作者 管蕾,更多章节内容可以访问云栖社区“异步社区”公众号查看
6.1 MVC模式基础
iOS 8开发指南(第2版)
当我们开始编程时,会发现每一个功能都可以用多种编码方式来实现。但是,究竟哪一种方式才是最佳选择呢?在开发iOS应用程序的过程中,通常使用的设计方法被称为“模型—视图—控制器”模式,这种模式被简称为MVC,通过这种模式可以帮助我们创建出简洁、高效的应用程序。
6.1.1 诞生背景
在创建与用户交互的应用程序时,首先必须考虑如下3点。
用户界面:我们必须提供让用户能够与之交互的东西,例如,按钮和文本框等。
对用户输入进行处理并做出反应。
应用程序必须存储必要的信息以便正确地响应用户,这通常是以数据库方式存储的。
为了结合这几个方面,一种方法是将它们合并到一个类中:将显示界面的代码、实现逻辑的代码以及处理数据的代码混合在一起。这是一种非常直观的开发方法,但在多个方面束缚了开发人员。
当众多的代码混合在一起时,多个开发人员难以配合,因为功能单元之间没有明确的界线。不太可能在其他应用程序中重用界面、应用程序逻辑和数据,因为这三方面的组合因项目而异,在其他地方不会有大的用处。总之,混合代码、逻辑和数据将导致混乱。而我们希望iOS应用程序与此相反,解决之道便是使用MVC设计模式。
6.1.2 分析结构
MVC最初存在于Desktop程序中,M是指数据模型、V是指用户界面、C则是控制器。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式。
MVC即“模型-视图-控制器”,是Xerox PARC在20世纪80年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已被广泛使用,特别是ColdFusion和PHP的开发者。
MVC是一个设计模式,它能够强制性地使应用程序的输入、处理和输出分开。使用MVC的应用程序被分成3个核心部件,分别是模型、视图、控制器。具体说明如下所示。
1.视图
视图是用户看到并与之交互的界面。对于老式的Web应用程序来说,视图就是由HTML元素组成的界面。在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Adobe Flash和像XHTML、XML/XSL、WML等一些标识语言和Web Services。如何处理应用程序的界面变得越来越有挑战性。MVC一个大的好处是它能为你的应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。
2.模型
模型表示企业数据和业务规则。在MVC的3个部件中,模型拥有最多的处理任务。例如,它可能用像EJBs和ColdFusion Components这样的构件对象来处理数据库。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
3.控制器
控制器用于接受用户的输入并调用模型和视图去完成用户的需求。所以,当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后确定用哪个视图来显示模型处理返回的数据。
现在我们总结MVC的处理过程,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。
6.1.3 MVC的特点
MVC是所有面向对象程序设计语言都应该遵守的规范,MVC思想将一个应用分成3个基本部分:Model(模型)、View(视图)和Controller(控制器),这3个部分以最少的耦合协同工作,从而提高了应用的可扩展性及可维护性。
在经典的MVC模式中,事件由控制器处理,控制器根据事件的类型改变模型或视图。具体来说,每个模型对应一系列的视图列表,这种对应关系通常采用注册来完成,即把多个视图注册到同一个模型,当模型发生改变时,模型向所有注册过的视图发送通知,视图从对应的模型中获得信息,然后完成视图显示的更新。
MVC模式具有如下4个特点。
(1)多个视图可以对应一个模型。按MVC设计模式,一个模型对应多个视图,可以减少代码的复制及代码的维护量,一旦模型发生改变易于维护。
(2)模型返回的数据与显示逻辑分离。模型数据可以应用任何的显示技术,例如,使用JSP页面、Velocity模板或者直接产生Excel文档等。
(3)应用被分隔为3层,降低了各层之间的耦合,提供了应用的可扩展性。
(4)因为在控制层中把不同的模型和不同的视图组合在一起完成不同的请求,由此可见,控制层包含了用户请求权限的概念。
MVC更符合软件工程化管理的精神。不同的层各司其职,每一层的组件具有相同的特征,有利于通过工程化和工具化产生管理程序代码。
6.1.4 使用MVC实现程序设计的结构化
通过使用MVC模式,在应用程序的重要组件之间定义了明确的界线。MVC模式定义了应用程序的如下3个部分。
(1)模型提供底层数据和方法,它向应用程序的其他部分提供信息。模型没有定义了应用程序的外观和工作方式。
(2)用户界面由一个或多个视图组成,而视图由不同的屏幕控件(按钮、文本框、开关等)组成,用户可与之交互。
(3)控制器通常与视图配对,负责接受用户输入并做出相应的反应。控制器可访问视图并使用模型提供的信息更新它,还可使用用户在视图中的交互结果来更新模型。总之,它在MVC组件之间搭建了桥梁。
令我们开发者振奋的是,Xcode中的MVC模式是天然存在的,当我们新创建项目并开始编码时,会自动被引领到MVC设计模式。由此可见,在Xcode开发环境中可以很容易地创建结构良好的应用程序。