(译)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 ...
随机推荐
- Kali 2.0安装与使用指南
阅读目录 (1)如果坚持用系统自带浏览器,其汉化方法: (2)如果有强迫症删了系统自带浏览器,然后重新安装了一个新的火狐可能遇到的问题: (3)如果你有火狐账号,你登陆了发现书签和插件没有同步? (4 ...
- LINUX提权后获取敏感信息之方法
文中的每行为一条命令,文中有的命令可能在你的主机上敲不出来,因为它可能是在其他版本的linux中所使用的命令. 列举关键点 (Linux)的提权是怎么一回事: 收集 – 枚举,枚举和一些更多的枚举. ...
- .NET MVC 验证码
.NET MVC 验证码
- 格雷码C++递归实现
昨天参加腾讯的笔试,结果答的一塌糊涂,大题第一题是关于格雷码的递归实现的,当时没写出来,今天查了下资料试着用C++实现一下. #include <iostream> #include &l ...
- 【Docker】mesos如何修改hostport默认端口范围?
1.marathon文档:https://mesosphere.github.io/marathon/docs/native-docker.html Static port mapping: It's ...
- [Android Pro] Android中全局Application的onCreate多次调用问题
一般来说Application的onCreate方法只会执行一次, 如果应用中采用多进程方式,oncreate方法会执行多次,根据不同的进程名字进行不同的初始化, 就是在application中多添加 ...
- Junit核心——测试类(TestCase)、测试集(TestSuite)、测试运行器(TestRunner)
首先,把这三个定义简单的说明一下: 1.测试类(TestCase):一个包含一个或是多个测试的类,在Junit中就是指的是包含那些带有@Test注解的方法的类,同一样也被称作“测试用例”; 2.测试集 ...
- CCPlatformConfig(设置执行平台 iOS android win32等。。。)
#ifndef __CC_PLATFORM_CONFIG_H__ #define __CC_PLATFORM_CONFIG_H__ /** Config of cocos2d-x project, p ...
- 关于org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor的队列
今天查看源码发现spring的线程池是支持队列的: 并且队列支持的上限相当大: 当线程池的达到最大线程时,默认会把任务放在队列(内存)中,所以我们可以放心用这个东西来写日志了
- Android自己定义之流式布局
流式布局,优点就是父类布局能够自己主动的推断子孩子是不是须要换行,什么时候须要换行,能够做到网页版的标签的效果. 今天就是简单的做了自己定义的流式布局. 详细效果: 原理: 事实上非常easy,Mea ...