对Android 架构设计理解

1、架构设计特点

架构是针对某类业务场景通用的解决方案,是对具体业务场景的抽象描述。架构设计又分为业务架构和技术架构。技术架构依赖于业务架构,是对业务架构的一种具体实现。良好的的技术架构一般具有以下特点:

  1. 简单。架构要相对简单易懂,易于理解和使用。如果架构不易于理解,将会影响其推广和使用,从某种程度上会浪费开发人员的时间,导致效率低下,增加开发的成本。简单就意味着高效,一个易于使用的架构,不但开发效率高,可维护性也大大增强。

  2. 独立。也就是模块化。对程序中的相似功能或者相似业务进行封装,减少冗余代码,提高代码利用率,减少开发之间。但要防止过度的模块化,将功能或者业务过度划分,会导致模块过多导致程度复杂,增加维护成本。例如将一个简单的系统分为好几个模块。模块的划分可根据通用的业务或者功能划分。功能模块要独立于业务模块,只能业务模块引用功能模块,不能循环引用。

  3. 健壮。也就是稳定性。针对各种异常情况,分别进行处理,保证程度正常的进行。减少崩溃的发生。例如网络请求要考虑无网,弱网,请求超时等各种情况,即使出现问题也能给用户友好的提示,让用户知道哪里出现问题,该怎么解决。对于业务流相关,要告诉用户走到哪一步了,下一步该怎么操作。

  4. 安全。也就是数据安全。添加一些安全策略提高系统破解的难度。安全只是相对的。没有绝对的安全。可通过不同的安全策略,来提高破解的人工和时间成本。

  5. 监控。系统中出现问题能够检测到,并提供快速排查出现的问题。

《架构之美》 书中第一部分论架构,会让我们对架构有了一个大概的认识

  • 架构是一种折中,一种取舍。架构师要学会的就是平衡,质量与成本之间的平衡;

  • 架构师首先关注的不是系统的功能,而是满足需求,满足品质;

  • 架构设计要做的是让关注点分离,并且对每个关注点进行设计一定的结构,该结构都有利于解答这一个关注点所定义的问题;

  • 好的架构应该是可以指导产品、开发、测试人员都对这一设计感到非常的舒适可靠,该设计覆盖了所有该软件系统相关利益的人员以及其中的关注点;

  • 只设计你知道需要的东西,多余的设计是一种浪费;

  • 架构几乎影响了该系统相关的所有的人和事,决定了该软件系统是否健康。

架构设计原则

  • 关注点分离。不应在fragment或者Activity中编写所有的代码,应尽可能保持精简,尽量减少Android组件的依赖。

  • 数据驱动UI(一般是持久型模型)。应用的数据应独立于应用中的界面元素和其他组件。持久性模型有点:

    • 当网络连接不稳定或不可用时,应用会继续工作。

    • 如果 Android 操作系统销毁应用以释放资源,用户不会丢失数据。

  • 单一数据源 SSOT。 在应用中定义新数据类型时,您应为其分配单一数据源 (SSOT)。SSOT 是该数据的所有者,而且只有此 SSOT 可以修改或转变该数据。为了实现这一点,SSOT 会以不可变类型公开数据;而且为了修改数据,SSOT 会公开函数或接收其他类型可以调用的事件。此模式具有如下优点:

  • 将对数据的所有更改集中到一处。

  • 保护数据,防止其他类型篡改此数据。

  • 更易于跟踪对数据的更改。因此,更容易发现 bug。

  • UDF单向数据流。 单一数据源原则常常与单向数据流 (UDF) 模式一起使用。在 UDF 中,状态仅朝一个方向流动。修改数据的事件朝相反方向流动。在 Android 中,状态或数据通常从分区层次结构中较高的分区类型流向较低的分区类型。事件通常在分区层次结构中较低的分区类型触发,直到其到达 SSOT 的相应数据类型。例如,应用数据通常从数据源流向界面。用户事件(例如按钮按下操作)从界面流向 SSOT,在 SSOT 中应用数据被修改并以不可变类型公开。

3、架构演化

架构并不是一层不变的,随着技术的发展,业务的不断调整,架构在不断的变化。
APP 架构演化的三个阶段

  1. 单体宿主App。功能和业务在一起。通过包结构区分业务和功能,项目相对简单,使用MVC设计模式。

  2. 功能库和业务宿主。将通用的功能分离做成通用库,多个应用可以引用通用的库。

  3. 功能分离,业务分离。针对越来越复杂的App,将通用的功能进行分离,通用的业务也进行分离,通过不同的组合实现功能和业务的复用。一般使用组件化开发,组件化结构图如下图所示

image.png

架构整体演化符合 《软件架构设计》一书的一个模型图,如下图所示

B28CD442-F68A-4B37-9776-123859AF9756.jpg

架构从三个不同的角度进行演化,符合面向对象的设计原则。从技术角度上讲,将代码从类,模块,系统,一步步封装;从业务和功能来说,将功能和业务中可能需要变化的分离出来,将不可变的封装起来。从组件角度来讲,将系统分层,使系统职责分明。

4、 架构设计概念完整性

关于概念完整性,在《人月神话》一书在有大量的阐述,总结如下

1)概念完整性是系统设计中最重要的考虑因素。当你的系统规模越大,这一点体现得越明显。

2)为了获取概念的完整性,设计必须由一个人或者具有共识的小型团队来完成。这一点很好理解,关于设计,可以让所有的人参与,但是决定权在少数人手里,如果大家都想参与设计,这是根本没有办法保证系统设计是统一完整的。

3)要获得概念上的完整性,就必须有人控制这些概念,类似于贵族的专制统治。这里,对于团队中的项目经理或架构师必须对项目有绝对的权威,不然,这个项目里面的就无法统一号令。

4)概念完整性表现有:

  • 开发过程中,需求、设计、编码的一致性

  • 整个程序具有统一的风格,比如对话框样式,按钮风格,色调等UI元素

  • 整个程序具体统一的结构,比如不同模块访问网络,它们的调用方式一致,例如异步访问都用回调方式通知结果,相同的功能应该提取成通用模块。

  • 开发人员能很好的执行需求人员和设计人员的意图。

  • 有完整的文档,需求文档,设计文档,测试文档,处理流程的文档等。

如何保持概念完整性

  • 在制度上给予保证,产品的负责人必须建立技术上的绝对权威

  • 技术负责人员(SE,SL)必须严格执行项目的需求,设计,必须深入到编码细节

  • 在不同阶段,保持与所有人员的持续沟通,鼓励开发人员提意见。

  • 让开发人员参与设计,但不决定设计

  • 通过持续的反馈和沟通来实现模块重用

根据概念完整性将架构分为三个阶段:规划、设计、构建,每个阶段架构的设计有不同职能。在规划阶段,考虑的是产品的需求、质量的需求,技术的可行性分析以及预研。在设计阶段,考虑的如果将一个复杂的系统拆分,并设计如何进行组织这些拆分的模块。在构建阶段,考虑的就是具体的实施问题,并且要保证一定的伸缩扩展性,因为架构是不断演进的。

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

推荐阅读更多精彩内容