Introduction
Application Architecture
App 架构是关于怎么组织设计构建应用,应用是怎么划分不同的接口和概念层,控制流和数据流是怎么在不同的层中进行操作流动。
例如,在 Apple 的 MVC 中,有如下 3 层,model, view 和 controller layer
image.png 箭头部分表示着 3 层是怎么通信的,这个图简单的说明了 MVC 是如何组织的。应用架构还涉及其他的方面,例如组件是怎么组织起来的,事件的在各层中的流向。
Model and View
在一定层面来说,App 的架构是由一系列不同层次组件的集合组合成的。在这里称为 categories layers
,它是一类符合某种基本原则或者责任的接口或者代码
在这些 layer 中 model layer
和 view layer
通常都会有,model layer 是应用中的内容来源,存储在磁盘的称为 document model
,view layer
用于展示和交互
Applications Are a Feedback Loop
view layer 和 model layer 需要通信,假设 view layer 和 model layer 分离,并没有任何关联,如果他们通信就需要一些手段:
image.png这样的结果就呈现了一个 feedback loop
,view 渲染和接受用户的一些输入,每个应用如何处理这些交互和通信,相关的依赖,和转换这些上图这些箭头的流程,view action
触发事件,例如点击按钮,view action 传递给 model layer,这里可能会转化为 model action(更新 model 对象的操作),view actions 到 model actions 这个转化称为 interaction logic
,当 model layer 更新后,通过一些如何 delegate, Notification callbacks 或者其他机制来更新 view layer,称为 presentation logic
有一些 view 状态是不依赖 document model 的,例如 navgation state,这些 state 称为 view state
,如果一些状态的维护是在 model layer 和相关的改变是满足 feedback loop 的,称为 unidirectional data flow
。
Architectural Technologies
Notifications, KVO 都可以产生当属性发生变化的通知,这是 Cocoa 为我们提供的技术,其他一些三方的技术,例如 reactive programming 是另一种技术可以实现上面的效果,但是和 Notifications, KVO 不同的是,它关注的是 source 和 destination 的转化。
Application Tasks
view 通过都要构建的,model 也是,处理 model 的可能被更新的操作。和当 model 被更新后,相关的更新处理,所以会有以下需要处理的:
1.Construction
谁处理 model 和 views 的通信
2.Updating the model
怎么处理 view actions
3.Changing the view
怎么使 model data 被 view 渲染
4.View state
怎么处理 navigation 和其他没有 model 状态
5.Testing
测试的覆盖率等