Android 架构二:纵向横向结合构建项目


Android 架构系列:
Android 架构一:Android 架构浅析
Android 架构二:纵向横向结合构建项目
Android 架构三:组件化思想
Android 架构四:组件化架构实战
Android 架构五:MVVM+Data Binding构建项目
……


一、前言

过去的开发思想,一般都是采取纵向结构的方式去架构项目,自从推出组件化的横向架构后,我们一般都会纵横结合地去构建我们的项目。

前面已经介绍了最近出的几种架构思想,无论是最初的MVC, 还是近几年风头极盛的MVP, Google推出的MVVM,还是系统层面的组件化,他们都具有自己适用的场景,我们因地制宜,选择自己合适的架构,才能将设计效益最大化。

二、如何架构项目

无论是最初的MVC, 还是近几年风头极盛的MVP, Google推出的MVVM,还是系统层面的组件化,最终遵循的架构原则无非就是三点:

1、横向划分模块
2、纵向划分层次
3、解耦通信

image

1、横向分块

一个大的项目,代码量是极大的,甚至达到1G以上;这时必须先以大的层级进行划分,才能有效达到分离的目的。

现在流行的组件化思想便有了用武之地;组件化是指解耦复杂系统时将多个功能模块拆分、重组的过程,它是一种高效的处理复杂应用系统,更好的明确功能模块作用的方式,分离组件边界和责任,便于独立升级和维护。

组件化思想主张将一个系统横向切分为不同的子系统或者可以称之为组件,根据业务与开发需要将工程划分为:基础库组件,工具库组件,业务组件1, 业务组件2... ,同时不同的模块之间从大的层级实现职责单一原则。

2、组件之间解耦

一个系统划分为若干组件后,那么问题就产生了,就是每个子模块之间不能直接调用,那么我们怎么进行模块之间的跳转与数据交流呢。

首先想到的解决的办法有两个,隐式跳转和反射,但是,这两种方式一种实现维护麻烦,一种对性能会有影响,都不是理想的解决办法。

那么,什么方式是实现组件之间交互的的理想方法,从而达到解耦的目的呢?

组件化的解耦思路是实现一套注册路由机制,根据一套统一的注册路由系统来统一实现跨组件通信,当前比较流行的框架有ActivityRouter, ARouter等

另外,插件化的解耦则直接通过Android系统提供的Binder机制来进行

3、纵向分层

从横向做了组件划分后,每个组件必然也需要自己的架构,这时候就需要使用纵向分层的思想了,也就是要说的纵向分层策略。MVC, MVP, MVVM 这些设计则使用了纵向分层的思想;它们都执行了三层划分的标准,虽然各有不同,但大致可以理解:

  • Model层: 处理数据**
  • View层: 处理UI显示**
  • MVC 的 Controller
    MVP 的 Presenter
    MVVM 的 ViewModel 则处理主要逻辑**

经以上划分后,数据处理, Ui显示, 逻辑处理都放到了各自的层进行处理,每个层仅执行本层应该做的操作。分层后,代码已经做到了结构清晰,尽可能的解耦, 易于理解维护。

4、层次间解耦

根据CleanArchitecture原则,采用圆葱形式的分层与解耦策略,因此在设计时注意:

  • 1) 明确的层次限定
  • 2) 禁止跨层次调用
  • 3) 从内到外单向调用

拿MVP为例,根据洋葱结构,由内到外我们可以得到Model-> Presenter -> UI;

在调用时,某层只能调用向内的邻接层,如Presenter只能调用Model层,而不能出现Model层调用Presenter层的现象;相同的,UI层只能调用Presenter层,而不能跨层调用Model层;

层与层之间的通信,必然不能通过直接调用的方式(特别是View层与Presenter层),我们可以参考MVP模式中的接口通信方式来实现。

三、结语

我们这里只是从理轮上分析,如何搭建我们的项目架构

  • 组件化 + MVC
  • 组件化 + MVP
  • 组件化 + MVVM

横向只有组件化,而纵向选择多样化,并不是越新推出就越好,要根据自己的情况选择。

如果你的项目非常短小,就几个礼拜的功夫就可以搞完,就没必要考虑什么纵横分块分层架构了,抡起键盘一顿敲就是了。

当然还有插件化,理论上插件化不能说是项目上的设计,而是产品上的设计。

理论讲完,接下来,我们就开始实战吧。

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