整体分析androidApp架构的演化

研究了一段时间androidApp的框架,从MVC,MVP,MVVM,到各种设计模式的变种,最后到android的Flux。都仔细思考了一下。
得出以下对架构的认识:


1.如果从一开始写一个app,要思考要设计,但是不能过度,不要想太多,先写再重构。当然,如果经验足够丰富,那么将来要重构的代码就少点,经验不行,要重构的代码就多。
但是,重构是一定跑不了的。

2.完美的架构是不存在的。

3.每个架构的目的都是去解决软件工程里代码的维护,复用等工作。宗旨只有一个那就是代码模块化,可维护性强。从MVC到MVP,再到MVVM,再到Flux,一直进化其实都不完美。

4.每种架构的进化都是面向对象那六大原则的组合。

5.每种架构其实不针对android,其他语言或者其他终端的架构都可以借鉴,代码的模块化和可维护性是软件工程里大家共同面对的问题。


接下来从这些android架构的进化说起,解释上面的观点。

首先解释第一点,为什么从一开始想进行完美的设计是不切实际的?

因为,架构的设计,其实是一个站在顶层的设计,意味着你要熟悉每一个流程,从而进行抽象,封装,将底层的特性提取出来进行规划和重构。从一开始写代码就要考虑完这些其实是不切实际的,因为没有底层,何来的顶层架构设计。就好像我们不能预测未来一样。
那么之所以出现架构师这个职业,人家都是靠经验和自己一直磨练的抽象能力来对项目进行整体把握,其中经验和抽象能力缺一不可。经验就代表着你现在做的项目他可能之前都把完整的流程走了一遍,他知道这个项目的每一个细节。抽象能力就是这个项目他虽然做过了,但是会不断出现新的问题,比如淘宝在用户一万的时候不可能完全彻底的知道一千万一个亿,比一百万多好几个数量级的时候这个app应该怎么办,这时候就需要抽象能力。
当然还是那句话,架构师要说自己的架构是完美的,那应该是少之又少,几乎没有的。只能说比一般工程师更懂架构,设计的架构更好,而不是最好。这里就好像,

一千个读者眼里有一千个哈姆雷。

接下来看MVC架构:
MVC,MVP的进化历史这里不说了,有兴趣可以去看。UI 架构小史系列文章一共有三篇。

这里只说每种模式的演化和具体实现。

MVC模式

这里是网上的一张图,类似的图太多了。
MVC的实现无非就是:
1.V:对应我们的XML文件。
2.C:对应的是Activity和fragment,相当于一个桥梁,里面有M的引用,负责通知哪个M,该做什么。
3..M:某个M收到通知,发网络请求做完某件事儿之后,利用回调通知View。

问题来了,熟悉面向对象原则的同学可能看出来了
1.耦合性巨无比的高。view,C,M之间互相持有引用,谁都离不开谁。(这里注意面向接口编程,依赖导致原则,即使持有也要持有interface的)
2.C的代码很多。想一下为什么C代码这么多就知道C有两个职责,
a:初始化view的东西。控制view的生命周期。
b:复制响应model的东西,用户交互,view的更新都在这里面。
(注意:这里就为MVP埋下了伏笔)

既然C巨丑,那么MVP就来了。MVP是针对MVC出现的,所以就会针对性的解决MVC的问题2。并且顺手解决问题1。

MVP模式

问题1的解决通过把View和Model之间的那条线去掉,降低了耦合性。
view现在完全不知道有个model存在了。
问题2的解决通过Presenter这个东西。presenter通过持有View和Model两者的引用来作为桥梁,为view何model当信使。通过把Activity或者fragment划分到View里面,把交互层P提出来解决Activity的代码臃肿问题。

具体的MVP结构就是每一个view也就是activity至少对应一个P的接口,一个M的接口,还有一个P的实现类,一个M的实现类。

以上可以看出来,另一个问题出现了,接口巨多,实现类巨多。。。。怎么办呢。没办法。。。。
只能通过不断的模块化,抽象对代码进行重构。

之后呢,架构继续演变出现了茫茫多的MVP,MVC演化架构,什么Passive View,什么TheMVP等。

之后就出现了MVVM的架构,具体的我相信只有知道并且用过databinding的人就会有体会,MVVM对于重复做的不好,因为代码和xml代码混在一起,所以出现问题不好定位,维护性就降低了,绑定一个model吧,重用性就降低了。也不完美。。

其实我觉得架构的实战中,不管是M什么,之间的界限并不是很明显,有时候自己都不知道自己用的是什么变种。所以,大家总体还是要熟悉面向对象的那几大原则进行,有时候真没必要纠结这是什么架构,解决问题才是关键。

由此验证了,我开始说的观点3,4。

解决问题才是关键,什么架构不重要,所有架构都不完美。

观点5的证明需要大家关注facebook在前端UI提出来的flux思路。AndroidFlux是Facebook的Flux架构Android实现。Flux是Facebook在14年提出的一种Web前端架构,主要用来处理复杂的UI逻辑的一致性问题(当时是为了解决Web页面的消息通知问题)。

具体的还是去看这篇文章

这里只写我对flux的理解和总结。

flux的整体结构

flux的整体结构如上图。核心的思想就是数据流。android编程就是拿数据,存数据,展示数据,最后加一个更新数据。
flux是view会通过actionCreater产生一个Action,这个Action经过Dispatcher的发送,也就是Bus的post到达了对应的store,store再经过post把数据返回到view。简单的说主要思想就是全局只有一个Dispatcher进行Action的发送,然后一个Activity(或Fragment)对应一个Action,一个store和一个ActionCreater。但是我们在实际开发的过程中这个映射关系是可以变得简单的,因为有一些action是不需要单独出来的,可以写成公共的减少类的数量。

现在的flux就像是一个孩子,有了基本的雏形。就好像,大家都知道她怀孕了但是具体的孩子还没长全了,也没有一个固定的模板,需要你在开发的过程中用聪明和智慧在面向对象的基础上进行封装和优化,争取搞一套成熟的东西出来作为大家开发android的规范。我们都应该朝着这个方向努力。所以这个东西我个人认为新手开发者不要使用,因为可能你的面向对象还欠火候,不足够驾驭这个不成熟的东西。

**
最后,港真,大家一定要充分理解面向对象的那几大原则真的太重要了。
简单的理解,点这里
**

flux的数据流

以下是本篇文章的参考
https://github.com/androidflux/AFlux-TodoList
http://developer.51cto.com/art/201508/489423.htm
http://www.jianshu.com/p/4b755df66a97
http://www.jianshu.com/p/9b411b21e800
http://www.cnblogs.com/wytiger/p/5305087.html
http://www.jianshu.com/nb/2723599
http://www.jianshu.com/p/896ce1a8e4ed

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

推荐阅读更多精彩内容