iOS中的基本架构

input equal: output

背景

  • 近期在网上翻阅了大量的资料去查找iOS中架构的相关文章,但文章很少,大部分都是java相关的。虽然平台语言不一致,思想总归相同的。然而从代码结构方面,应用到iOS平台仍旧感觉有点怪怪的。
  • 当然也在网上找到了相关iOS架构资料,但是文章谈到架构优化的点都有自己的思考,自己拿过来应用也很难去考虑整体。因此无不感叹他们好牛逼,就想去探索一下他们达到这种程度的前置知识。
  • 看到里边涉及到的点,就去找了相关的书籍进行翻阅学习。其中主要看了两本书:HeadFirst 设计模式App架构设计。当再去看网上的其他文章、源码后,终于能够看透一些背后应用的思想。
  • 本文是关于 App架构设计 这本资料看完之后的总结,方便日后进行查看。
  • HeadFirst 设计模式,也会在之后的文章中进行总结,方便日后的查看。

本文按照自己的记忆点简单精简罗列一下本书中学习到的内容

常见架构

mvc: v -> c -> m
mvp: v -> c -> p -> m
mvvm: v -> c -> vm -> m
mvc+vs: v -> c -> vs -> m
可以看出:mvp,mvvm,mvcs都是在mvc的基础上进行扩展的。换句话说,他们是mvc的强化版本。

以一个view上的button举例:

1. mvc

action: -> v -> c -> m; m -> (notification) -> c -> (update) -> v
network/other moudle:是从c开始进行触发,然后后续的执行流程和action一样的。

  1. c持有v和m。而v和m之间又是相互独立的模块。
  2. 当点击v上button时,将点击方法传递到了c层进行响应;由于c拥有m,因此在c中调用更新m的方法;
  3. 当m中的内容发生变化时,c作为m层数据发生变化的监听者。c会收到发生变化的通知,然后在c层开始相应的通知方法;由于c拥有v,则在通知的响应方法中,去调用v中的方法,从而v将会得到更新。
    以下的几种模式,是从mvc演化而来,他们是在v和m中加入了自己的隔离层进行处理。

2. mvp:

action: v -> c(pro) -> (action最终转发到p层) -> p -> m; m -> (notification) -> p -> (更新c层的属性) -> c -> v

  1. p层持有c层和m层。
  2. c层是遵循某个协议pro。而pro中暴露的接口是v要展示的内容

3. mvvm

action: -> v -> c -> vm -> (update) -> m; m -> (notification1) -> vm -> (notification2) -> c -> (update) -> v

  1. c持有v和vm。vm持有m。
  2. vm的模块将为v层提供展示逻辑逻辑的接口。
  3. c层时刻监听vm中暴露属性的通知变更。
  4. 3也可以表述成:vm提供了变化的observable序列,供c层进行订阅,当subscribe到新的值后,c层进行更新v的数据。

4. mvc+vs

  1. viewstate中存储当前的状态信息
  2. 在mvc的基础上,时刻保持v中的状态信息,那些信息当前并没有去更新model。
  3. 将这些信息更新到viewstate中。
  4. 在view触发时,去将vs中的值更新到model中。

参考资料

  • https://github.com/objcio/app-architecture/tree/master/One-App-Eight-Architectures
  • App Architecture

你可能感兴趣的:(iOS中的基本架构)