iOS架构设计勘误

镇楼.png

原文链接:https://medium.com/ios-os-x-development/ios-architecture-patterns-ecba4c38de52

一.前言

之前一直只是知道MVC/MVP/MVVM/VIPER这几个架构设计.
而且在实际工作中也都是跟着工程已有的代码结构去写.
虽然看着公司的工程是MVVM的架构设计.
但是其实还是传统的MVC架构.
连Apple’s MVC架构都算不上.

最简单的一点我们还是直接把model传给view.
就是说view和model还是强耦合的.他们是互相知道的.

这样就导致你想复用这个view.就必须连这个model一起复用.
这就有点拔起萝卜带着泥的感觉.

在看了这篇文章后纠正了一些概念.

下面是我看了这篇文章后的一些感想.
只是一些基于我已有的理解上的勘误.
就是个小笔记.想深入了解的可以去看原文.
肯定会有很大的收获.

二.Traditional MVC

Traditional MVC.png

传统MVC.是把view当成一个整体.
VC把model直接传给view.
然后view在内部根据model的每个属性去更新自己内部的子view

三.Apple’s MVC

Apple's MVC.png

而Apple’s MVC不是把view看做一个整体.
而是把view看成一个个基础组件的集合.他是一个集合.
比如view里有titileLabel.imageView.
那么这些子控件都是暴露在view的.h里.

当VC收到model的更新时.
就取model里的各个属性去更新view的titlelabel.imageview等控件.

例子:
如在VC里有个topview.
topview里有个titleLabel
像传统MVC就是把model传给topview.
在topview里取model得titleStr赋值给titleLabel的text
而Apple’s MVC是VC直接取topview得titlelabel.然后把model的titleStr赋给titlelabel的text.
self.topview.titleLabel.text = model.titleStr;

这样VC只给view传递基础类型.所以view不需要知道model
就完全隔离的view和model.他们之间是不可见不互知的.
其他位置想用这个view就可以直接拿去用了.你再拿着个view跟任何model绑定都可以.

四.Reality Apple’s MVC

Reality Apple's MVC.png

设想永远是美丽.然后现实总是残酷的.

随着业务逻辑的上涨.
VC里会处理越来越多的逻辑操作.

比如数据的转换(转成view可以直接使用的数据) ——>>> 痛点1
比如处理用户的逻辑代码. ———>>> 痛点2

Apple’s MVC最后在我们手里其实变成了如上图这种情况.
最后就变成了Massive VC

五.MVP

MVP.png

MVP就将Apple’s MVC的两个痛点转移到了Presenter层.
Presenter专职处理数据转换和用户的响应事件.

解决痛点一
如Presenter在内部将model的属性转成view可以直接使用的基础类型(如string.int….)
VC拿着Presenter转化后的基础类型数据传给view并更新view

解决痛点二
view的响应事件直接抛给Presenter.Presenter去更新model数据.
然后通知view去更新

六.MVVM

MVVM.png

感觉MVVM好像跟MVP一样的.这里的VM好像就是MVP里的Presenter
感觉他们的区别就是MVVM引入了Binding理念.
通过KVO或者Notification.(更好的解决方案是引入RAC或者Rxswift)
在VM里把View和model做了一个双向绑定.

既当model更改的时候.VM让View做出相应的更新
当用户操作了view后.VM让model做出相应的更新.

View和model依然相互不知道彼此.
但是这样下来每个模块的职责就变得非常清晰.

VC: 1.管理view的声明周期.2.初始化vm和view的双向绑定
View: 仅布局子view
VM: 绑定view和model.处理各种业务逻辑后通知view和model各自更新
Model: 存储数据

七.VIPER

VIPER.png

MVVM把各个模块的职责都划分的很清楚.
但最后当这个功能模块庞大的一定程度的时候.
VM也将变得非常非常臃肿.因为他做了太多的View和model的绑定逻辑.

VIPER就在MVMM的基础上解决了这个问题.
VIPER将VM又拆除了一个Interactor.
这个Interactor专职负责VM和View双向绑定的逻辑处理.

对于VIPER我也不是很理解.
只是简单的知道.所以就不多说了.
想了解的还是看原文把.

八.My Conclusion

其实不管什么架构其实都是在拆越来越臃肿的那个模块.

比如MVP/mvvm都是拆分vc
而VIPER就是拆MVVM / MVP里的VM/Presenter
哪个肿了就拆哪个.

最后引用原文的结论作为总结.

九.Conclusion

We went though several architectural patterns, and I hope you have found some answers to what bothered you, but I have no doubt that you realised that there is no silver bullet so choosing architecture pattern is a matter of weighting tradeoffs in your particular situation.
Therefore, it is natural to have a mix of architectures in same app. For example: you’ve started with MVC, then you realised that one particular screen became too hard to maintain efficiently with the MVC and switched to the MVVM, but only for this particular screen. There is no need to refactor other screens for which the MVC actually does work fine, because both of architectures are easily compatible.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容