App Architecture 笔记 - 1

App Architecture 读书笔记
第一章 Introduction

About

  • 此书会讨论五种设计模式:
    1. MVC: Model-View-Controller
    2. MVVM-C: Model-View-ViewModel-Coordinator
    3. MVC+VS: Model-View-Controller-ViewState
    4. MAVB: ModelAdapter-ViewBinder
    5. TEA: The Elm Architecture
  • 此书的 Demo 是一个 Recording App,在 GitHub 上。

Application Architecture

  • Application architecture 关注的方面包含:
    1. 组件如何被构建;
    2. 事件流如何在层级中传递;
    3. 组件间是否应有编译期或运行期的相互引用;
    4. 不同的组件中数据应如何被读取或变更;
    5. 状态变更后应在整个应用结构中用怎样的路径来处理。

Model and View

  • 分类层 Categories Layer:
    1. 应用架构在最高层上看,是把不同的应用组件分离到不同的分类层中;
    2. 一个分类层便是一个包含代码和接口的集合,他们都能够遵循一定的规则并且职责相似;
    3. 最常见的分类层就是模型层与视图层。
  • 模型层 Model Layer:
    1. 对应用内容的抽象;
    2. 不依赖于任何应用框架;
    3. 通常包含模型对象对协调对象。
  • 视图层 View Layer:
    1. 依赖于应用框架;
    2. 将模型层可视化,可交互化;
    3. 通常直接使用 UIKit(也可能使用 SceneKit / OpenGL 等)。
  • Why Are the Categories of Model and View Considered So Fundamental?
    1. 保持模型层整洁,及不受应用框架底层实现的影响;
    2. 方便讲模型层运用到当前应用之外,如运行测试、用不同的框架重写视图层、移植到其他系统平台等。

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

  • 实现架构的工具技术:
    1. Notification 广播:单个源的变化 -> 0到多个监听者;
    2. KVO:将一个对象上属性的变化告知给另一个对象;
    3. 响应式:重点在于关注从源到目标间的转换,允许将逻辑运用到转换中。
  • 双向绑定:
    1. Cocoa Bindings 是双向绑定。被观察者同时也是观察者,会建立反向连接;
    2. 本书仅讨论单向绑定。

Application Tasks

  • 五类任务:
    1. 构建:谁来构建模型与视图,谁来连接;
    2. 更新:如何处理 View Actions;
    3. 改变视图:如何将模型数据应用到视图上;
    4. 视图状态:如何处理 Navigation 与其他非模型状态;
    5. 测试:使用怎样的测试策略来达到合理的测试覆盖率。