精彩书摘:
业务模型还有一个很重要的模型,那就是数据模型。数据模型主要指实体对象的数据保存(持续化)。比如将一张订单保存到数据库,需要时从数据库获取订单。我们可以将这个模型单独列出,所有有关数据库的操作只限制在该模型中。
(2)视图(View)层
视图即为用户交互界面。对于Web应用来说,可以是HTML界面,也有可能是XHTML、XML和Applet界面。随着应用复杂程度和规模的提升,界面的处理也变得越来越有挑战性。一个应用可能有很多不同的视图,MVC仅限于视图上数据的采集、处理以及用户的请求,而不包括视图上业务流程的处理。业务流程交由模型(Model)处理。比如一个订单的视图只接受来自模型的数据并进行显示,以及将用户界面的输入数据和请求传递给控制器和模型。
(3)控制器(Controller)层
控制器主要负责从用户接收请求,并将模型与视图整合在一起,共同完成相关任务。它像一个分发器,清楚地告诉开发者,可以选择什么样的模型和什么样的视图,完成什么样的用户请求。控制层本身不做任何的数据处理,例如用户点击一个链接,控制层接受请求后,并不处理业务信息,只是把用户的信息传递给模型,告诉模型做什么,然后选择符合要求的视图返回给用户。因此,一个模型可能对应多个视图,一个视图也可能对应多个模型。
2)MVC的优点
MVC要求对应用分层,虽然会增加额外的工作,但产品的结构清晰,其应用通过模型可以得到更好的体现。具体表现如下:
①具有多个视图对应一个模型的能力。在目前用户需求快速变化的情况下,可能希望通过多种方式访问应用。例如,订单模型可能有本系统的订单,也有网上订单,或者其他系统的订单,不管是哪种,对订单的处理都是一样的,也就是说订单的处理是一致的。按MVC设计模式,一个订单模型及多个视图即可解决问题。这样既减少了代码的重复,又减少了代码的维护量,一旦模型发生改变,也易于维护。
②由于模型返回的数据不带任何显示格式,为此这些模型也可直接应用于接口。
③由于一个应用被分离为三层,因此有时仅改变其中的一层就能满足应用的变化需求。当应用的业务流程或者业务规则改变时只需改动MVC的模型层,其他两层可保持不变。
④由于控制层是把不同的模型和不同的视图组合在一起完成不同的请求,因此,控制层可以说是包含了用户请求权限的概念。
⑤MVC模式有利于软件工程化管理。由于不同的层各司其职,每一层的不同应用间具有某些相同的特征,有利于通过工程化、工具化产生管理程序代码。
3)MVC的不足
MVC的不足体现在以下几个方面:
①增加了系统结构和实现的复杂性。对于简单的界面,如果严格遵循MVC模式,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
②视图与控制器的联系仍过于紧密。视图与控制器是既相互分离又确实联系紧密的部件,没有控制器,视图的应用会很有限,反之亦然,这样就妨碍了它们的独立重用。
③视图对模型数据的访问效率比较低。依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也降低了操作性能。
……
作者简介:
DevDiv移动开发社区,DevDiv覆盖移动开发主流平台Android、iOS、Windows Phone、Windows 8、HTML5和Symbian等,集资讯、论坛、博客、猎头服务、技术培训于一体,是国内最具人气的综合性移动开发社区。
内容简介:
iOS是移动开发三大平台之一。是DevDiv移动开发社区版主、资深会员继成功推出《移动开发全平台解决方案——Android/iOS/Windows Phone》和《Windows Phone开发实战体验(应用+游戏)》后的又一力作。
《iOS开发实战体验》章节设置全面涵盖iOS应用开发技术要点,原创案例细致呈现作者实际开发经验。具体包括iOS开发框架、Object-C高级知识、MVC设计和Push消息、视图高级使用技巧、数据持久化、TableView使用、文件I/O、硬件和通信、iOS多媒体、定位和地图、网络编程、连接到互联网、多线程编程、2D和3D绘图编程、调试和优化等内容。
目录:
第1章 iOS开发框架
1.1 苹果产品和重要的事件
1.2 应用商店——App Store
1.3 iOS软件的体系结构
1.3.1 核心操作系统层(Core OS)
1.3.2 核心服务层(Core Service)
1.3.3 媒体层(Media)
1.3.4 可轻触层(Cocoa Touch)
1.4 应用程序运行周期
1.4.1 应用程序的生命周期
1.4.2 应用程序的入口
1.4.3 应用程序的委托
1.4.4 加载主Nib文件
1.4.5 事件处理周期
1.5 应用程序运行环境
1.5.1 应用程序沙箱
1.5.2 自动休眠定时器
1.6 iOS软件设计规范
1.6.1 平台间的差异
1.6.2 3种应用程序样式
1.7 iOS开发工具——Xcode
第2章 Object-C高级知识
2.1 Object-C语言介绍
2.1.1 数据类型与表达式
2.1.2 流程控制
2.1.3 类与结构
2.2 类别(Category)介绍
2.2.1 认识类别(Category)
2.2.2 扩展NSString
2.2.3 扩展NSDictionary
2.2.4 扩展NSArray
2.2.5 Object-C与C++混合编程
2.2.6 静态库
第3章 MVC设计和Push消息
3.1 MVC框架设计
3.1.1 MVC设计思想
3.1.2 iPhone开发中的MVC
3.1.3 iPhone中MVC的实现
3.2 通知中心
3.2.1 NSNotification类
3.2.2 Notifications的常见误解
3.3 Push机制
3.3.1 Push消息需要的条件
3.3.2 在代码中使用Push消息
3.3.3 通过Mac发送Push消息
3.3.4 通过iPhone发送Push消息
第4章 视图高级使用技巧
4.1 界面工具Interface Builder
4.2 定制基础控件
4.2.1 定制UIButton
4.2.2 定制UIPickerView以实现隐藏功能
4.3 动画特效
4.3.1 UIViewAnimation动画
4.3.2 使用公有CATransition实现动画效果
4.3.3 使用私有CATransition实现动画效果
4.4 页面布局——横竖屏处理
第5章 数据持久化
5.1 Plist文件操作
5.2 NSUserDefaults操作
5.3 SQLite数据库操作
5.4 Core Data文件操作
5.4.1 CoreData特性
5.4.2 为何要使用Core Data
5.4.3 关于Core Data的常见误解
5.4.4 建立数据库模型
5.4.5 创建实体类
5.4.6 数据库操作
第6章 TableView使用
6.1 UITableView的组成及样式
6.2 UITableView的定义
6.3 UITableView的数据源
6.3.1 UITableViewDataSource协议
6.3.2 表格视图的实现
6.3.3 表格单元
6.3.4 创建表格单元的数据源
6.4 UITableView的委托
6.5 UITableView的编辑
6.6 UITableView实现气泡效果的表格
6.7 UITableView拖动以显示更多数据
第7章 文件I/O
7.1 文件系统
7.2 文件管理
7.2.1 读取并显示对应目录下的文件
7.2.2 获取文件属性信息
7.2.3 创建文件夹
7.2.4 创建文件
7.2.5 删除文件
7.3 本地数据存储规则
第8章 硬件和通信
8.1 摄像头
8.1.1 拍照
8.1.2 摄像
8.1.3 定制拍照界面
8.2 加速度计
8.2.1 加速度计原理
8.2.2 加速度计使用
8.3 陀螺仪
8.3.1 陀螺仪原理
8.3.2 陀螺仪使用
8.4 调用通讯录
8.4.1 读取通讯录
8.4.2 编辑通讯录
8.5 打电话
8.6 发短信
8.7 发邮件
第9章 iOS多媒体
9.1 图像
9.1.1 加载UIImage
9.1.2 UIImageView
9.1.3 访问照片
9.2 声音
9.2.1 System Sound Services
9.2.2 音频
9.3 视频
第10章 定位和地图
10.1 基础知识
10.2 iPhone定位方法
10.3 MKReverseGeocoder?地理位置反向编码
10.4 LBS应用的类型
10.5 谷歌地图
10.5.1 在地图上增加大头针标注的方法
10.5.2 在地图上画线
第11章 网络编程
11.1 iOS网络编程
11.1.1 NSURLConnection
11.1.2 网络编程示例
11.2 ASIHTTPRequest
11.2.1 使用ASIHTTPRequest
11.2.2 ASIHTTPRequest使用示例
11.3 检查网络状态
11.3.1 SCNetworkReachability
11.3.2 Reachability
第12章 连接到互联网
12.1 使用UIWebView
12.2 解析XML
12.2.1 iOS下的XML解析库
12.2.2 NSXMLParser
12.2.3 第三方解析器
12.2.4 编写简单天气解析应用
12.3 解析JSON
12.3.1 iPhone的JSON
12.3.2 JSON解析库
第13章 多线程编程
13.1 UNIX多线程机制的使用
13.2 NSThread创建多线程的方法
13.2.1 线程的创建与启动
13.2.2 线程的同步与锁
13.2.3 线程的交互和其他控制方法
13.2.4 线程的睡眠
13.3 线程池NSOperationQueue
13.3.1 创建线程操作NSOperation
13.3.2 任务控制
13.4 生产者—消费者模型
13.4.1 使用@synchronized
13.4.2 使用NSLocking协议
第14章 2D和3D绘图编程
14.1 Quartz 2D
14.1.1 画布(Canvas)
14.1.2 绘图上下文(Graphics Context)
14.1.3 Quartz 2D数据类型
14.1.4 图形状态
14.1.5 Quartz 2D坐标系统
14.1.6 内存管理
14.1.7 绘制图形图像
14.1.8 绘制OpenFlow效果的倒影
14.2 3D绘图OpenGL ES
14.2.1 OpenGL与OpenGL ES简介
14.2.2 OpenGL ES在iPhone绘图中的应用
第15章 调试和优化
15.1 常见错误
15.1.1 版本错误
15.1.2 证书错误
15.1.3 编写错误
15.1.4 导入错误
15.2 调试跟踪
15.2.1 使用调试器
15.2.2 使用日志
15.3 使用Instruments
好评度