一、APP架构概述
1. 应用架构
App 架构是软件设计的一个分支,它关心如何设计一个 app 的结构。具体来说,它关注于两个方面: 1 、如何将 app 分解为不同的接口和概念层次部件,
2、以及这些部件之间和自身的不同操作中 所使用的控制流和数据流路径。
比如,Apple 的 MVC 模式可以通过 model、 view 和 controller 三层结构来描述。
上面这种模式展示了三个模块的三个层次。
在实际的 app 架构中, 部件的构建有非常多的可能性
2.Model 和 View
Model 层和 View 层是这些分类中最为常⻅的两个。
Model 层是 app 的内容,它不依赖于 (像 UIKit 那样的) 任何 app 框架。
View 层是依赖于 app 框架的部分,它使 model 层可⻅,并允许用戶进行交互,从而将 model 层转变为一个 app。
3.App 的本质是反馈回路
View 层和 model 层需要交流。所以,两者之间需要存在连接。假设 view 层和 model 层是被清
晰地分开,而且不存在无法解耦的联结的话,两者之间的通讯就需要一些形式的翻译:
4.架构技术
Apple 平台的标准 Cocoa 框架提供了一些架构工具。
Notification 将值从单一源广播给若干个收听者。
键值观察 (KVO) 可以将某个对象上属性的改变报告给另一个对象。
然而,Cocoa 中的 架构工具十分有限,我们将会使用到一些额外的框架。
比如响应式编程,不过和通知或者 KVO 不同的是,它专注于在源和目标之间进行变形,让逻辑可以在部件之间传输信息的同时得以表达。
我们可以使用像是响应式编程或者 KVO 这样的技术创建属性绑定。绑定接受一个源和一个目 标,无论何时,只要源发生了变化,目标也将被更新。这和手动进行观察在语法上有着不同, 我们不再需要写观察的逻辑,而只需要指定源和目标,接下来框架将会为我们处理其余部分的 工作。
5.App 任务
要让程序正常工作,view 必须依赖于 model 数据来生成和存在,我们配置 view,让它可以对
model 进行更改,并且能在 model 更新时也得到更新。
所以,我们需要决定在 app 中如何执行下列任务:
1、构建 — 谁负责构建model和view,以及将两者连接起来?
2、更新model—如何处理view action?
3、改变view—如何将model的数据应用到view上去?
4、viewstate—如何处理导航和其他一些modelstate以外的状态?
5、 测试—为了达到一定程度的测试覆盖,要采取怎样的测试策略?
6.IOS 架构的模式:
IOS 架构的几种常用模式:
- Model-View-Controller
标准的CocoaModel-View-Controller(MVC)是Apple在示例项目中所采用的设计模 式。它是 Cocoa app 中最为常⻅的架构,同时也是在 Cocoa 中讨论架构时所采用的基 准线。
MVC 的重要性
因为 Apple 在所有的实例项目中都使用了这种模式,加上 Cocoa 本身就是针对这种模式设计 的,所以 Cocoa MVC 成为了 iOS,macOS,tvOS 和 watchOS 上官方认证的 app 架构模式。 - Model-View-ViewModel+协调器
相较于 MVC,MVVM 在每个场景中使用 view-model 来描述场景中的表现逻辑和交互逻辑。
View-model 在编译期间不包含对 view 或者 controller 的引用。
它暴露出一系列属性,用来描 述每个 view 在显示时应有的值。
把一系列变换运用到底层的 model 对象后,就能得到这些最 终可以直接设置到 view 上的值。
实际将这些值设置到 view 上的工作,则由预先建立的绑定来 完成,绑定会保证当这些显示值发生变化时,把它设定到对应的 view 上去。
响应式编程是用来 表达这类声明和变换关系的很好的工具,所以它天生就适合 (虽说不是严格必要) 被用来处理 view-model。
在很多时候,整个 view-model 都可以用响应式编程绑定的方式,以声明式的形 式进行表达。 Model-View-Presenter
Model-View-Presenter (MVP) 是一种在 Android 上很流行的模式,在 iOS 中,也有相应的实 现。
在总体结构和使用的技术上,它粗略来说是一种位于标准 MVC 和 MVVM 之间的模式。
MVP 使用单独的 presenter 对象,它和 MVVM 中 view-model 所扮演的⻆色一样。
相对 view-model 而言,presenter 去除了响应式编程的部分,而是把要展示的值暴露为接口上的属性。
不过,每当这些值需要变更的时候,presenter 会立即将它们推送到下面的 view 中去 (view 将自己作为协议暴露给 presenter)。基于组件的架构 (React Native)