(译)Getting Started——1.3.1 Incorporating the Data(合并数据)
在实现完应用的行为后,需要创建数据模型来支撑应用的界面。应用的数据模型定义了应用中数据的维护方法。数据模型可以是一个基本的dictionary类型,也可以是复杂的数据库,范围很广。好的数据模型可以更为轻松的构建伸缩性强的应用,还可以提升功能,改变特性。
应用的数据模型由数据结构和(可选的)自定义的业务逻辑组成。你从来都没有想过要把数据模型和应用界面完全的剥离开。但是,你肯定有过这样的考虑:不依赖于某个视图或某个视图控制器,单独的实现数据模型。如果你保证了数据和界面的分离,那你就会发现,这样做更有助于实现一个通用的应用——既能在iPad上运行,又能在iPhone上运行——还有助于代码的重用。


设计数据模型
如果只是需要存储少量的数据,Foundation框架类就是最好的选择。因此,应该先查看下Foundation类里有什么可用的行为,而不是尝试着自己去实现。例如,如果应该只是需要保存一个字符串的列表,那么,使用NSArray和NSString就可以了。Foundation类的更多内容请参见Working with Foundation章节。
为了存储数据,如果数据模型需要自已的业务逻辑,那你应该自定义一个类,应该考虑如何把框架中已经存在的类合并到自己的类中实现。最好的办法是在自已的类中使用已经存在的框架类,而不是去重写它们。例如,自定义的类中或许使用NSMutableArry来存储信息——但是,你可以定义自己的元素来与这些数据交互。
在你设计数据模型时,你应该问自己以下的问题:
用户如何使用应用,你又需要存储哪种类型的数据?要确保你的模型反映了应用的内容和意图。即使用户与数据没有直接发生交互,但是,在界面和数据之间,也应该有清楚的相关性。无论你打算存储文本、文档、大图片,或是其它类型的信息,你总应该把数据模型设计的能适当的处理某种类型的内容。
使用哪种数据结构?确定在哪里可以使用框架的类,在哪里需要使用自定义功能的类。
如何给用户界面提供数据?你的数据模型不会直接与界面进行通信。为了处理数据模型与界面之间的交互,你需要在控制器里添加逻辑。
实现模型
在上一节教程中,你使用的是Objective-C编辑语言。尽管教程中讲述了如何构建一个简单的应用,但是,在写自己完整功能的应用之前,你应该熟悉编程时所使用的编辑语言。
有的人通过阅读 Programming with Objective-C这本书来学习理念,然后通过编写大量的测试应用来加深对语言的理解。还有些人,当他们还不了解该怎么做时,就直接开始编程了,一边编程,一边查资料。如果你更喜欢第二种方式,那你应该把 Programming with Objective-C这本书放在手边,把它当作参考资料。
开发首个数据模型最重要的目标是明白它是如何工作的。仔细的考虑你数据模型的结构,不要担心数据模型的好坏。在开始实现模型后,不要害怕模型的迭代和优化。
合并真正的数据
在你首次测试数据模型直到你确定框架装配和连接都是正确的过程中,你可能想做一些静态数据或假数据。现在测试做完了,我们就需要定义一个数据模型,你就可以从中摘取真正的数据了。
(译)Getting Started——1.3.1 Incorporating the Data(合并数据)的更多相关文章
- [译] Pandas中根据列的值选取多行数据
# 选取等于某些值的行记录 用 == df.loc[df['column_name'] == some_value] # 选取某列是否是某一类型的数值 用 isin df.loc[df['column ...
- [译]Vulkan教程(21)顶点input描述
[译]Vulkan教程(21)顶点input描述 Vertex input description 顶点input描述 Introduction 入门 In the next few chapters ...
- TEXT 15 A text a day...
TEXT 15 A text a day... Mar 24th 2006 From The Economist print edition The medical uses of mobile ph ...
- AFNetworking 3.0 源码解读 总结(干货)(上)
养成记笔记的习惯,对于一个软件工程师来说,我觉得很重要.记得在知乎上看到过一个问题,说是人类最大的缺点是什么?我个人觉得记忆算是一个缺点.它就像时间一样,会自己消散. 前言 终于写完了 AFNetwo ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...
- [转]MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
- 李洪强iOS经典面试题153- 补充
李洪强iOS经典面试题153- 补充 补充 有空就来解决几个问题,已经懒癌晚期没救了... UML 统一建模语言(UML,UnifiedModelingLanguage)是面向对象软件的标准化建模 ...
- 在 Azure HDInsight 中安装和使用 Spark
Spark本身用Scala语言编写,运行于Java虚拟机(JVM).只要在安装了Java 6以上版本的便携式计算机或者集群上都可以运行spark.如果您想使用Python API需要安装Python解 ...
- MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
随机推荐
- Apache的Order Allow,Deny详解
Allow和Deny可以用于apache的conf文件或者.htaccess文件中(配合Directory, Location, Files等),用来控制目录和文件的访问授权. 所以,最常用的是: O ...
- 安装Python3.6.x
#安装依赖包 yum install zlib-devel bzip2-devel openssl-devel ncurses-devel -y #下载Python3.6.x wget https:/ ...
- 〔原创〕Ubuntu Linux Server 9.04 安装全程图解
关于Ubuntu Linux Server 9.04 版本的安装使用.先声明几点: 1. 整个安装过程,都是全英文的,而且,是文本模式,不像Desktop版本,有Livecd的图形化模式.2. 刚开始 ...
- http://blog.sina.com.cn/s/blog_4dd787e40102uysg.html
http://blog.sina.com.cn/s/blog_4dd787e40102uysg.html
- DirectX游戏开发——从一个小游戏開始
本系列文章由birdlove1987编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhurui_idea/article/details/26364129 写在前面:自 ...
- 在SVN中打分支
项目开发中一个版本号也许就有几次迭代,而完毕一次迭代或一个版本号时,一般会讨论下一步的计划.是否要增加新东西新技术,内部人员是否有变动,这时须要在管理工具中做一些备份,以防我们接下来即使改动serve ...
- 蓝牙中文API文档
蓝牙是一种低成本.短距离的无线通信技术.对于那些希望创建个人局域网(PANs)的人们来说,蓝牙技术已经越来越流行了.每个个人局域网都在独立设备的周围被动态地创建,并且为蜂窝式电话和PDA等设备提供了自 ...
- Android微信支付V3版
由于公司需求做微信APP支付,在集成过程中也遇到各种问题,比如说签名错误,body编码必须为UTF-8.APP端无法调用支付页面直接到支付结果页面.结果为null,code=-1等等: 1.签名错误问 ...
- 网页图表控件Highcharts选项配置参数
Highcharts提供大量的选项配置参数,您可以轻松定制符合用户要求的图表,目前官网只提供英文版的开发配置说明文档,而中文版的文档网上甚少,且零散不全.这里,我把Highcharts常用的最核心的参 ...
- PHP中is_*() 函数用法
PHP中is_*() 函数用法 is_a - 如果对象属于该类或该类是此对象的父类则返回 TRUE is_array - 检测变量是否是数组 is_bool - 检测变量是否是布尔型 is_calla ...