背景
- 近期在网上翻阅了大量的资料去查找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一样的。
- c持有v和m。而v和m之间又是相互独立的模块。
- 当点击v上button时,将点击方法传递到了c层进行响应;由于c拥有m,因此在c中调用更新m的方法;
- 当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
- p层持有c层和m层。
- c层是遵循某个协议pro。而pro中暴露的接口是v要展示的内容
3. mvvm
action: -> v -> c -> vm -> (update) -> m; m -> (notification1) -> vm -> (notification2) -> c -> (update) -> v
- c持有v和vm。vm持有m。
- vm的模块将为v层提供展示逻辑逻辑的接口。
- c层时刻监听vm中暴露属性的通知变更。
- 3也可以表述成:vm提供了变化的observable序列,供c层进行订阅,当subscribe到新的值后,c层进行更新v的数据。
4. mvc+vs
- viewstate中存储当前的状态信息
- 在mvc的基础上,时刻保持v中的状态信息,那些信息当前并没有去更新model。
- 将这些信息更新到viewstate中。
- 在view触发时,去将vs中的值更新到model中。
网友评论