Reference:
App Architecture
1. 软件架构和APP设计模式
软件架构是软件设计中的分支,它关注两个方面:
- 如何将软件分解成不同的接口和概念层次部件;
- 这些部件自身和部件之间的不同操作中所使用的控制流和数据流路径。
一个好的APP架构依赖于一套有力的设计规则来定义部件的划分以及部件之间的相互协作方式,在架构中一套被重复使用的设计规则称为设计模式。
app的设计模式基本就是一套分层规则,app中不同的部件会被归纳到某个类型中去,将这些不同的种类叫做层次:一个层次指的是,遵循一些基本规则并负责特定功能的接口和其他代码的集合。
2. Model和View
Model和View是APP架构中最常见也是最基础的两个分层。
- Model:Model层是APP的内容,它不依赖于任何APP框架,程序员对Model层有完全的控制。它通常包括model对象和协调对象。
- View:View层几乎是完全依赖于APP框架的部分,它使Model层可见,并允许用户进行交互,从而将Model层转变为一个APP。
在APP中,View对象通常会构成一个单一的view层级,view controller也通常会形成 view controller层级。model对象却不需要有明确的层级关系,在程序中它们可以是互不关联的独立 model。
model层的最重要的意义在于:它为我们的程序提供一个表述事实的单一来源,让程序的行为有清晰的规则可以依据,这会让编程逻辑清晰、行为正确。如果 model 层能做到和应用框架分离,我们就可以完全在 app 的范围之外使用它。
3. 反馈回路
用户界面是一个同时负责展示和输入功能的反馈设备,APP的逻辑就是一个反馈回路。
用户发起的事件会导致view的响应,我们把由此引起的代码路径称为view action,当一view action被送到model层时,它会被转变为model action,将view action转变为model action的操作,以及路径上的其他逻辑被叫做交互逻辑。
一个或者多个model对象上状态的改变叫做model变更。Model的变更通常会触发一个model通知,当view依赖于model数据时,通知会触发一个view变更,将model通知和数据转变为view 更改的操作,以及路径上的其他逻辑被叫做表现逻辑。
4. 单向数据流
有些状态可能是在文档model之外进行维护的,例如导航状态。在app中非文档model的状态被叫做view state。在Cocoa里,大部分view对象都管理着它们自己的view state,controller对象则管理剩余的view state。
当所有的状态都在model层中被维护,而且所有的变更都通过完整的反馈回路路径进行传递时,我们就将它称为单向数据流。即:任意的view对象或者中间层对象只能够通过 model发出的通知来进行创建和更新(换句话说view或者中间层不能通过捷径来更新自身或者其他的view)时,这个模式通常就是单向的。在遵循单向数据流的模式中,就实现了model与应用框架的解耦。
5. APP的任务
一个程序的正常工作方式为:view必须依赖于model数据来生成和存在,我们配置view,让它可以对model进行更改,并且能在model得到更新时也得到更新。所以我们需要决定APP中如何执行下列任务:
- 构建:谁构建model和view,以及将两者连接起来?
- 变更view:如何将model数据的变化应用到view上去?
- 更新model:如何处理view action?
- 处理view state:如何处理导航及其他model state以外的状态?
- 测试:为达到一定程度的测试覆盖,采取怎样的测试策略?
我们研究APP设计模式,就是研究一个设计模式如何处理以上五个APP任务。