在实现完应用的行为后,需要创建数据模型来支撑应用的界面。应用的数据模型定义了应用中数据的维护方法。数据模型可以是一个基本的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(合并数据)的更多相关文章

  1. [译] Pandas中根据列的值选取多行数据

    # 选取等于某些值的行记录 用 == df.loc[df['column_name'] == some_value] # 选取某列是否是某一类型的数值 用 isin df.loc[df['column ...

  2. [译]Vulkan教程(21)顶点input描述

    [译]Vulkan教程(21)顶点input描述 Vertex input description 顶点input描述 Introduction 入门 In the next few chapters ...

  3. 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 ...

  4. AFNetworking 3.0 源码解读 总结(干货)(上)

    养成记笔记的习惯,对于一个软件工程师来说,我觉得很重要.记得在知乎上看到过一个问题,说是人类最大的缺点是什么?我个人觉得记忆算是一个缺点.它就像时间一样,会自己消散. 前言 终于写完了 AFNetwo ...

  5. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...

  6. [转]MySQL索引背后的数据结构及算法原理

    摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...

  7. 李洪强iOS经典面试题153- 补充

    李洪强iOS经典面试题153- 补充   补充 有空就来解决几个问题,已经懒癌晚期没救了... UML 统一建模语言(UML,UnifiedModelingLanguage)是面向对象软件的标准化建模 ...

  8. 在 Azure HDInsight 中安装和使用 Spark

    Spark本身用Scala语言编写,运行于Java虚拟机(JVM).只要在安装了Java 6以上版本的便携式计算机或者集群上都可以运行spark.如果您想使用Python API需要安装Python解 ...

  9. MySQL索引背后的数据结构及算法原理

    摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...

随机推荐

  1. 一、从Windows消息机制说起

      一,消息       消息(Message)指的就是Windows 操作系统发给应用程序的一个通知,它告诉应用程序某个特定的事件发生了.比如,用户单击鼠标或按键都会引发Windows 系统发送相应 ...

  2. android sdk下载SDK Platform失败记录

    在使用android sdk manager下载的时候会遇到 下载完毕后,你可能会出现如下图一样的错误,就算重复尝试多次依然无法正常安装 Downloading SDK Platform Androi ...

  3. python 协程的学习记录

    协程是个子程序,执行过程中,内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行 从句法上看,协程与生成器类似,都是定义体中包含 yield 关键字的函数.可是,在协程中,yield 通常 ...

  4. 猫猫学iOS之UITextField右边设置图片,以及UITextField全解

    猫猫分享,必须精品 原创文章.欢迎转载.转载请注明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243 效果: 封装好的方法: 猫猫封装的一个小方法,简单共享出来,方便 ...

  5. java中Xml、json之间的相互转换

    旁白: 最近关于xml与json之间的转换都搞蒙了,这里写一个demo,以后备用. 正题: project格式是: jar包是一个一个检出来的,还算干净了. 代码: 工具类: package exer ...

  6. Apache高级配置

    认证授权和访问控制 ip访问控制: 目录控制语句以开头:以结束. AllowOverride None:不允许覆盖,即不允许从根目录向子目录覆盖.即默认情况下拒绝从根目录下向子目录访 问,如果要看根目 ...

  7. IPhone打包工具脚本

    (后面就是代码了,我就不翻译了.) #!/usr/bin/perl use File::Copy; my $installPath = $ARGV[]; #the name that displays ...

  8. 网络编程-Java中的Internet查询

    前提 在深入理解URL.URI等概念,或者学些Socket相关的知识之,有必要系统理解一下Internet相关的一些基础知识. Internet地址 连接到Internet(因特网)的设备称为节点(n ...

  9. git push --set-upstream origin

    设置本地分支追踪远程分支 之后就可以直接使用git push提交代码

  10. JBoss类隔离

    http://tiger888.iteye.com/blog/572875这几天,项目组在部署JBOSS时遇到不少问题,都是由于JBOSS的类装载问题引起,特发表一篇BLOG详细说一下JBOSS的类隔 ...