App Architecture 读书笔记
第一章 Introduction
About
- 此书会讨论五种设计模式:
- MVC: Model-View-Controller
- MVVM-C: Model-View-ViewModel-Coordinator
- MVC+VS: Model-View-Controller-ViewState
- MAVB: ModelAdapter-ViewBinder
- TEA: The Elm Architecture
- 此书的 Demo 是一个 Recording App,在 GitHub 上。
Application Architecture
- Application architecture 关注的方面包含:
- 组件如何被构建;
- 事件流如何在层级中传递;
- 组件间是否应有编译期或运行期的相互引用;
- 不同的组件中数据应如何被读取或变更;
- 状态变更后应在整个应用结构中用怎样的路径来处理。
Model and View
- 分类层 Categories Layer:
- 应用架构在最高层上看,是把不同的应用组件分离到不同的分类层中;
- 一个分类层便是一个包含代码和接口的集合,他们都能够遵循一定的规则并且职责相似;
- 最常见的分类层就是模型层与视图层。
- 模型层 Model Layer:
- 对应用内容的抽象;
- 不依赖于任何应用框架;
- 通常包含模型对象对协调对象。
- 视图层 View Layer:
- 依赖于应用框架;
- 将模型层可视化,可交互化;
- 通常直接使用 UIKit(也可能使用 SceneKit / OpenGL 等)。
- Why Are the Categories of Model and View Considered So Fundamental?
- 保持模型层整洁,及不受应用框架底层实现的影响;
- 方便讲模型层运用到当前应用之外,如运行测试、用不同的框架重写视图层、移植到其他系统平台等。
Applications Are a Feedback Loop
- 应用设计模式的挑战在于如何处理如试图层与模型层之间的通信、依赖与转换。
- View Action: 由视图触发,用于响应用户驱动的事件。发送给 Model Layer 时,View Action 可能会被转换成 Model Action,这种转换被叫做 Interaction Logic。
- Model Update: 模型对象更新后通常会产生一个通知,此通知将触发视图层的更新。通知可以使用多种形式,如 Foundation Notification、Delegates、Callback 等。这种由 Model Notification 转换到视图的变化被称为 Presentation Logic。
- 当所有状态都放在模型层中,并且所有变化都遵循上述的完整反馈路径环时,被称为单向数据流。
Architectural Technologies
- 实现架构的工具技术:
- Notification 广播:单个源的变化 -> 0到多个监听者;
- KVO:将一个对象上属性的变化告知给另一个对象;
- 响应式:重点在于关注从源到目标间的转换,允许将逻辑运用到转换中。
- 双向绑定:
- Cocoa Bindings 是双向绑定。被观察者同时也是观察者,会建立反向连接;
- 本书仅讨论单向绑定。
Application Tasks
- 五类任务:
- 构建:谁来构建模型与视图,谁来连接;
- 更新:如何处理 View Actions;
- 改变视图:如何将模型数据应用到视图上;
- 视图状态:如何处理 Navigation 与其他非模型状态;
- 测试:使用怎样的测试策略来达到合理的测试覆盖率。