《Swift iOS应用开发实战》——3.1MVC设计模式简介

3.1MVC设计模式简介

要想成为一名优秀的iOS程序开发人员,至少要具备一种面向对象程序设计语言的开发经验,比如Java、C++或C#,并且C语言也是我们必须熟练掌握的,在此基础上学习Swift语言就会游刃有余。除此以外,我们还要对设计模式有一定的了解。在iOS中最重要的,也是使用最多的一种设计模式就是:模型-视图-控制器(Model-View-Controller,MVC)设计模式。
在开发面向对象应用程序之前(甚至是面向对象程序开发成为主流后的一段时间),程序员们在编写程序代码时还总是愿意将用户界面代码、应用程序逻辑和数据处理代码混合在一起。其好处就是可以快速完成一个初期的项目,但是后期维护和升级时会让整个项目变得举步维艰。
例如,假如你的项目团队为Windows平台开发了一个文本编辑器,但是当需要将它移植到Mac OS平台的时候,我们不得不将基于Windows用户界面的代码从数据和逻辑代码中剥离,然后替换成相应的Mac OS用户界面代码,难度可想而知。但是再将其移植到Web平台呢?还需要经历这一痛苦的过程。要想完成这个“壮举”,往往需要付出非常大的努力,并且讨论到最后可能最省事的方法会变成独立为每个平台重写所有的代码。
MVC设计模式的目的就是将应用程序的用户界面代码、程序逻辑和数据处理代码彼此分离。在这里,Model封装了应用程序的数据,View负责呈现和管理用户界面,Controller则提供应用程序的基本逻辑,并作为Model和View的“中间人”。当用户与View进行交互时,Controller可以命令Model修改数据。当Model数据发生改变时,Controller也要通知View进行界面更新。这样做的意义在于Model与View之间不会发生任何联系,Model只是负责存储和处理数据,当控制器调用数据时,Model只要完成自己的任务就好。
在Swift语言中,我们所创建的任何类都属于下面这三个类型中的一个:视图对象(View)、数据模型对象(Model)或控制器对象(Controller)。通常一个应用程序不仅限于只有一个Model、View和Controller。在Swift中我们通常把控制器叫作视图控制器(View Controller)。
视图控制器与数据模型对象之间的交互主要通过数据模型对象中的公共方法和属性,这与在面向对象(OOP)环境中对象之间的调用相同。
视图控制器与视图之间的交互会稍微复杂一点,需要借助Outlet和Action通过目标(Target)-动作(Action)模式实现,在第2章的学习中我们已经接触到了。
简而言之,MVC设计模式要求在iOS应用程序开发的过程中,所有的对象必须属于Model、View、Controller三大“阵营”中的一个。
视图对象是负责用户界面的对象,比如在Calculator项目的故事板里面,View Controller场景中的Label和Button都是视图对象。一般来说,视图对象是UIView类或其子类,比如UILabel、UIButton、UISlider等。当然,如果需要,还可以自定义一些视图类对象,如BackgroundView、ShoppingView等,相信看到这些类的名字,你就能够猜出它们是负责呈现信息的视图对象。
数据模型对象是负责处理数据的,它与视图对象之间不发生任何关系。在本章的实践中,Model对象只是操作数(firstOperand和secondOperand)、操作符(operatorFlag)等变量。
作为数据模型对象,它们通常是一些标准的集合对象(如NSArray、NSDictionary和NSSet类)和一些标准数据对象(如NSString、NSDate、NSNumber类)。对于大型或复杂的数据模型,往往需要创建自定义类并伴随着数据库的支持,例如Shopping、Employee等。
如果把应用程序看作一座工厂,那么视图对象和数据模型对象就好比是工厂中不同分工的工人,他们都只负责做好自己应该做的事情。例如,Label对象只负责在用户界面中的指定位置显示一个指定尺寸的文本信息,至于文本的内容它并不关心,到时候“会有人告诉他”。而String对象只负责存储一个字符串,至于这个字符串用在哪里他并不关心,到时候“会有人来指定”。
控制器对象用来管理应用程序,它负责视图对象和数据模型对象之间的联系与同步,控制着在程序中传递的各种信息流。比如Calculator项目,当用户点击屏幕上的数字按钮以后,数字按钮(View)会把该事件报告给视图控制器(项目中的ViewController类),视图控制器再调用数据模型对象中的方法或属性。当控制器从数据模型对象处获取结果后,再将信息传递给视图对象(ViewController场景中的Label对象),最终通过Label对象更新屏幕上的显示信息。到此为止,MVC之间的简单工作流程就结束了,如图3-1所示。

从图3-1中可以看出,控制器对象就像中介一样,左右各联系着视图和数据模型。在日常生活中,我们都比较讨厌中介(尤其是那些频繁给你打电话的房屋中介),那么为什么就不能让视图和数据模型直接联系,非要有个中介呢?道理很简单,面向对象编程的优势之一就是类的可复用。如果去掉控制器这个中介,用户在屏幕上的交互操作都直接由视图对象去操作数据模型对象,那么,视图中势必包含了对数据模型的引用语句(#import)。但是,当我们在其他地方复用该视图类时,又可能会包含进其他的数据模型类。也就是说,复用越多,包含不必要的数据模型类的可能性越大。再有,随着程序代码不断升级和完善,在修改数据模型类(比如添加、删除模型类中的属性和方法)以后,就有可能会对视图调用数据模型产生非常严重的不良影响,为应用程序的运行添加很多不稳定因素。
在使用项目模板创建iOS应用程序时,Xcode已经自动创建了一个控制器类(View-Controller.swift文件中定义的类)。需要清楚的是,大部分的应用程序都会含有多个控制器,因为Calculator项目非常简单,所以只含有一个控制器—ViewController。
项目中ViewController的任务就是当用户点击计算器界面中按钮时,触发目标类中的相关方法,从而得到相应的计算结果。

时间: 2024-07-31 16:23:30

《Swift iOS应用开发实战》——3.1MVC设计模式简介的相关文章

《Swift iOS应用开发实战》——导读

前言 苹果公司在2014年6月的WWDC(Worldwide Developers Conference,苹果全球开发者大会)上向公众展现了全新的iOS 8移动操作系统和Yosemite桌面操作系统.作为开发者,大会开幕之前的任何爆料,我都是不会错过的.在大会开幕的前一天,我得知本届大会的宣传标语为:编写代码改变世界(Write the Code. Change the World).历届WWDC的宣传标语都是以全新.卓越.领先.创新.引领等作为关键词,而这次却使用了非常接地气的"编写代码&qu

《Swift iOS应用开发实战》——第2章 搭建计算器的界面

第2章 搭建计算器的界面 作为一名开发者,有的时候你可能会听到身边的人在指着手机不停抱怨:"如果有这样一款应用该多好--"是呀,当一个不经意的想法被你变成现实的时候,你所得到的不仅仅是经济方面的利益,更多的是那种经历,那种从无到有,从幼稚到成熟的过程,而经历和过程无比珍贵.通过本书的学习,你将学会如何创建基于iOS平台的应用程序,并且通过对程序的改进,你完全有可能开发出一款在App Store上有百万用户下载的应用,但"千里之行始于足下",让我们一起先从本书的第一个

《Swift iOS应用开发实战》——第3章 设计模式和视图控制器

第3章 设计模式和视图控制器 在继续构建第2章的Calculator项目之前,有必要对一些关键知识点进行了解,这样我们不仅能够顺利完成项目,而且也清楚为什么这样做.本章中最重要的一个知识点就是MVC设计模式,通过设计模式所构建的代码可以清晰地定义应用程序的架构,提高代码的阅读性和可维护性. 除了学习设计模式之外,我们还会学习视图控制器(View Controller)的相关知识,它负责管理视图,并处理与其相关的诸多任务,包括视图的管理.设备方向的旋转,当发生低内存警告时卸载那些无用的视图对象等.

《Swift iOS应用开发实战》——第1章 Swift简介

第1章 Swift简介 北京时间2014年6月3日凌晨1点,苹果公司(以下简称苹果)在美国旧金山Moscone中心举行了WWDC开发者大会开幕式,会上正式发布了iOS 8移动操作系统以及OS X Yosemite桌面操作系统.抛开Yosemite不谈,苹果在iOS 8中更新了很多内容,其中包括: 锁屏状态下直接快速删除通知. 支持发送语音信息. 输入法支持预判联想功能. 新增Healthkit健康应用. Siri支持流媒体识别,可以直接通过它购买音乐. 自带相册集成更强大的图片处理软件. 大幅改

《Swift iOS应用开发实战》——1.3 了解Xcode

1.3 了解Xcode 作为一名开发者,不管在什么平台上进行开发,总需要一大堆的软件支持,才能将自己的想法变成可以让成千上万人受益的应用程序.苹果不希望这样,它为开发者提供了一个优雅的.功能强大的.光鲜亮丽的开发工具包,这个包就叫做Xcode.通过Xcode,我们可以创建.测试.部署和发布iOS或OS X应用程序.在2014年6月,苹果发布了iOS 8和Xcode 6的beta版本,在使用的过程中笔者能够感受到苹果力求让开发工具无比简单.实用.通过其强大的功能和全新技术,帮助开发者在创建应用程序

《Swift iOS应用开发实战》——1.1初识Swift

1.1初识Swift Swift是苹果在WWDC 2014所发布的一门编程语言,用于开发iOS和OS X应用程序. 2010年7月LLVM编译器的原作者暨苹果开发工具部门总监克里斯·拉特纳(Chris Lattner,就是在WWDC 2014大会上亲自演示Swift代码的那位仁兄)开始着手开发Swift语言,一直到2014年6月发布,Swift大约经历了4年的开发期.在WWDC 2014大会中,苹果宣称Swift的特点是:快速.现代.安全和具有交互性. Swift的处理速度非常快.在WWDC上,

《Swift iOS应用开发实战》——1.4  使用代码编辑器

1.4 使用代码编辑器 回到刚刚创建的HelloWorld项目,此时在项目导航中可以看到以下3个文件:AppDelegate.swift.ViewController.swift.Main.storyboard故事板文件.当然还有一些其他文件存在于项目之中(比如Images.xcassets文件夹),我们暂时先不去管它们. 步骤1 在项目导航中选择顶部的HelloWorld条目(蓝色图标的),在编辑区中选择"General"标签,然后在下面的Deployment Info部分的&quo

《Swift iOS应用开发实战》——2.1为移动平台开发应用

2.1为移动平台开发应用 如果之前根本没有为Cocoa或它的前身NeXTSTEP开发过应用程序,你可能会感觉到在最初使用Cocoa Touch(iOS的应用程序框架)开发iOS应用程序时,之前所学的所有程序语言(比如Java..NET)在这里都派不上用场,时常处于一头雾水的混沌状态.这是初学者在学习时的正常状态,你根本不用害怕这种状态,只要坚持下去就会慢慢适应.本书假定你已经具有面向对象的开发经验,以及初步掌握了Swift语言的相关知识,这些经验和知识对于编写iOS应用程序是非常重要的.在为移动

《Swift iOS应用开发实战》——1.2 了解Playground

1.2 了解Playground 本书使用Xcode 6 beta 4作为开发工具,与之前发布的beta 1版本相比,beta 4对Swift语言做了大幅度改进.开发者可以使用Swift来编写更好.更安全的应用程序,而且新版本的Swift也修正了许多开发者提出的请求,尤其是对数组进行了重新设计.但是,beta版本毕竟不同于正式版,依然存在着许多Bug,只不过对Swift初学者来说影响不大.启动Xcode 6,就会看到一个欢迎界面,如图1-3所示.欢迎界面分为左右两部分,左侧有三个选项,分别是直接