Android常用的三种架构分析

1.前言


项目开发的过程中必然会接触到两个概念,那就是框架和设计模式。框架是什么,也许你不知道,但网络请求框架、图片加载框架和数据存储框架,这些一定不会陌生,甚至每个项目中都会引入。设计模式大家就很熟悉了,从学Java开始,会有意无意地去了解它。可架构和这两者是什么关系,为什么要提及它们?

在软件开发领域有三种级别的重用:内部重用,即在同一应用中能公共使用的抽象块;代码重用,即将通用模块组合成库或工具集,以便在多个应用和领域都能使用;框架重用,即为专用领域提供通用的或现成的基础架构,以获得最高级别的重用性。——《Android源码设计模式解析与实战》

看来,设计模式、框架、架构是级别不断升高的过程。架构的基本目的是保证项目的可读性和可维护性,框架则是对常用软件功能进行整合,设计模式归纳了各种情况下具体的解决方案

2.核心思想


还记得当始学习安卓开发吗?对,就一界面,上面写着“Hello World”。那么,这是什么架构?写的第一个完整项目,就几个界面分别对应着Activity或者Fragment,所有的交互响应、业务逻辑、数据请求存储等都放在其中。这时,又是什么架构?
  原来开发应用并不一定需要架构,只有当项目规模达到一定程度,才需要对整体结构做个规划,防止代码过于集中,导致结构混乱。设计架构的目的就是解耦,方法有两种:模块化和分层。前者按功能横向地将项目划分开(具体见下一篇),后者根据事件处理和更新频率,纵向地确定了层次。

3.共同点MV


以点击收藏按钮为例,分为事件传递、业务处理、数据存储和界面更新四个部分,涉及到了界面、业务、数据。界面的布局会随着应用版本升级不断变化,更新最为频繁;数据的结构会根据产品发展需要随之改变,更新较为频繁;业务的逻辑是项目的根本和特色,一般情况不会去变动。
  按照解耦的要求,变化的部分必须独立出来,即最上面为View层,与用户进行交互,包括UI布局、效果显示和事件传递等;最底下为Model层,涉及本地和网络的数据,变化时发送通知,同时提供对外的操作接口,实现增删改查;中间是业务逻辑,扩展空间大,所以架构的改进集中在此。

4.C、P、VM


4.1.Controller

  MVC的数据流是单向的,即Controller只负责对View传给的事件加以判断,按照业务逻辑进行处理,需要数据操作就调用Model的接口。而View界面的显示由Model内数据变化时发出的通知来更新。
  在这个过程中,View是依赖于Model的,需要对数据进行分析处理,导致业务逻辑被塞入View中,增加View的复杂性。当界面修改时,不得不提取业务逻辑,麻烦不说,还会影响测试过的代码的正确性,不符合开闭原则。

4.2.Presenter

  MVP就是将Model到View的数据流,变成Model到Presenter再到View。Presenter收到更新通知,从Model中获取数据,解析以后交由View显示。这样Model和View之间变化互不影响,同时将业务逻辑全部移到Presenter中,使各层职责单一,方便进行单元测试。
  由于是通过接口解耦合的,这样会引入更多的类文件。若项目不够大,反而结构会显得复杂;项目大了,Presenter承担更多的业务,也就复杂了(但是考虑到Activity和Fragment不能被混淆,而Presenter可以,我就忍了)。

4.3.ViewModel


  MVVM就是MVP的升级版,结构都是一样的。唯一区别引入双向绑定机制,当Model和View一方发生变化则会反应到另一方上,代替了Presenter来回传数据的工作,使它专注于业务逻辑的处理,以及Model和View状态改变。
  最后,我们发现Controller、Presenter、ViewModel是一回事,就是在不同架构中为了区分而重命名。不得不称赞一下谷歌,它不仅提供了各种情况下MVP的搭建方式,还给出了双向绑定的支持库,让你自己选择。这里只是提取关键点以便于理解,详细内容参考hudan2714的文章

5.总结


我们发现架构的变化是针对上一个的缺点,用新的技术加以弥补,其目的是层次的解耦,使每个层次符合面向对象的设计原则,提高项目的可维护性、可扩展性和可测试性。但是,任何框架没有好坏之分,需根据项目的发展阶段和团队的整体能力做出合适的选择,不能一味追求“高大上”,从而影响项目的开发进度,本末倒置。

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

推荐阅读更多精彩内容