Android应用开发架构概述

简介:

通常一个App的成长过程都是这样的:

第一阶:先用最少的成本和时间快速把东西做出来。

第二阶段:积累一定用户量之后在小步快跑的迭代功能。

第三阶段:性能和体验上逐步求精。

我发现好多项目在第二阶段和第三阶段耗费了好多本来不应该浪费的人力成本、时间成本。究其原因就是因为前期忽略了合理的架构,我甚至经历过因为前期的设计不合理导致后期技术债务太多项目濒临死掉、整个项目组全员换掉重造锅炉的境地。所以,我们为什么不既能使用最简洁的方式实现功又能要保证后期灵活的扩展能力呢?下面是本人最近项目实践的一些整理,抛砖引玉,希望一起讨论。

视图和数据

好的代码一定是层次分明、职责分明,糟糕的代码架构就是没有层次没有模块,每次修改代码都是牵一发动全身。从大的方面来讲Android应用都会被分为两层:视图层、数据层。

20160103091000_66420.png

数据和视图

视图:一般以Activity为依托的各种View,包含View、ViewGroup和WebView,还有各种fragment。

数据:支撑整个应用逻辑的数据,分为两类。一类存储在远端服务器上的,一类在本地。远端数据需要通过网络(通常是Http)获取,本地数据包括sqlite存储的关系型数据,文件系统,内存缓存对象。

必然联系

用数据驱动视图变化,这才产生了丰富多彩的应用交互世界,所以,视图和数据的联系是必然的。

视图数据的直接联系

在Android平台和整个移动开发生态都发展的非常快,在Android兴起之初,对层的重要性不是太强调,所有很多开始写Android程序的开发对层划分不是太清晰 ,看到很多入门书本里很多直接在Activity里面直接处理数据的代码,例如直接在Activity里面直接调SharedPrefrence操作数据,直接在Activity 里面直接调用网络请求等,很多初级选手的很容易写出这样没有层次的代码出来。当接口变更,当存储方式更好的时候整个UI层面的逻辑都受影响。

解耦

好一点的设计必然会做一次隔离:尽量做到UI和数据彼此透明、“互不干涉内政”。

解耦

隔离的好处是:一、 提高可维护性。在UI逻辑发生变化甚至整个端掉都不会影响到处理逻辑。二、 提高可复用性。复用通常是数据的复用,数据逻辑不受UI的左右,由此可以服务于多个UI视图。三、 可读性。层次分清之后按照统一的架构思路去理解代码,当然还得靠开发人员良好的编程素养和代码规范。

那么怎么做到隔离呢?关于解耦,业界比较流行的可以归纳为两种:MVC、MVP(MVVM)。

MVC解耦

MVC

V:V在MVC架构中Activity(托管Fragment,View,WebView等)首先充当V的角色。

M:业务逻辑层划分出来专门处理数据。例如:数据的http请求,数据解析和储存等逻辑都封装在这一层。Activity 不直接和Http,Dao(数据访问对象层)直接有联系了,视图数据从此为路人。

C:C是什么?

MVC这个概念,在移动应用开发出现之前就已经产生了,最经典的使用场景:JSP +servlet+javabean,我开始接触MVC页是在做JavaWeb开发的时候。后来Android开发火了,把这套模式搬上来。但是控制器(C)的概念在Android应用开发中不太好理解,也只能很狭义的理解为接受或控制事件或逻辑层的回调响应,所以在Android应用开发中,套上MVC,Activity 兼具V和C的角色。

MVP解耦

很多时候视图层面还是充斥中很多复杂的逻辑,例如UI事件的响应处理,网络响应的回调等等,充斥着各种监听器的回调。我们期望视图V便当更简单、更纯粹,V只负责绘制和刷新其他逻辑都不用管了,也不想和M有直接的联系。从MVC的VC(Activity)中我们分离一层出来叫做Presenter,由它来负责调度UI何时刷新、由它来接受UI的事件响应并传达指令给M。从此V和M是路人,V和数据的距离跟远了。

mvp

V:Activity为代表,这时候的Activity更为简单了,只负责UI的绘制和刷新。

P:负责传达指令。向上接收V的事件指令并需要的时候传达给M,向下接收M的指令并通知V刷新UI。

M:只负责出来数据逻辑。其实还可以细分一些东西,比如Http请求,很多时候我们的Http框架都是用的第三方开源框架,如果有一天更优秀的框架出现了,要更换,怎么才能做到不影响其他层次?如果我门做了分层隔离那么,我门可以很轻松的换掉,如果没有做分层隔离,那么我门可能要在每一个功能模块的M中修改代码,修改代价是巨大的,所以一遍第三方开源框架我都不会直接使用而是在业务上做一层抽象隔离。同理,本地数据的存储,也有必要做响应的封装或隔离,因为今天是用Litepal,也许某一天想用GreenDao了,只需要修改封装类的代码就好了。

MVP的依赖关系:

MVP依赖关系

MVP类图:

MVP类图

我们把每一层都抽象成一个接口,例如V层,我们定义一个接口为View(不要和Android API里的View弄混了),让后Activity为这个View的具体实现。每一层对另一层的依赖都是接口依赖,并不关心另一层的具体实现,每一层我们都可以写不同的实现,随时切换,这就意味着,有一天如果有一层不好用了,我们可以轻松的重写另一个实现来替换掉,而不是如履薄冰的修改。

MVP demo

https://github.com/liuguangli/androidmvp

未完待续…

关于架构与解耦,并非一篇博客文章就能说清楚的,文章如有不足之处恳请指正,后续有时间还会做相关补充总结。 
目录
相关文章
|
2天前
|
存储 安全 数据库
安卓应用开发中的四大关键技巧月26日
在这篇技术性文章中,我们将深入探讨安卓应用开发的四大关键技巧。通过分析每个技巧的理论基础和实际应用案例,帮助读者更好地理解和掌握这些技巧,从而提升安卓应用的开发效率和质量。
14 2
|
9天前
|
IDE Java 程序员
安卓应用开发入门:打造你的第一个“Hello World”
【9月更文挑战第11天】在编程的世界里,每一个初学者的旅程都从一个简单的“Hello World”开始。本文将带领安卓开发的新手们,通过简单直观的方式,一步步构建出自己的第一个安卓应用。我们将探索安卓工作室(Android Studio)的安装、项目的创建,以及如何运行和调试你的应用。无论你是编程新手还是想扩展技能的老手,这篇文章都将为你打开一扇通往安卓世界的大门。
43 7
|
7天前
|
前端开发 Android开发 开发者
安卓应用开发中的自定义视图基础
【9月更文挑战第13天】在安卓开发的广阔天地中,自定义视图是一块神奇的画布,它允许开发者将想象力转化为用户界面的创新元素。本文将带你一探究竟,了解如何从零开始构建自定义视图,包括绘图基础、触摸事件处理,以及性能优化的实用技巧。无论你是想提升应用的视觉吸引力,还是追求更流畅的交互体验,这里都有你需要的金钥匙。
|
7天前
|
API Android开发 iOS开发
掌握安卓与iOS应用开发中的依赖注入技术
本文探讨了在安卓和iOS应用开发中,如何有效利用依赖注入技术来提升代码的模块化、可测试性和可维护性。通过对比分析两种平台下依赖注入的实现方式与工具,本文旨在为开发者提供一套清晰、实用的依赖管理策略,助力打造高质量软件产品。
|
9天前
|
IDE 开发工具 Android开发
探索iOS与安卓应用开发的异同
在数字时代的浪潮中,移动应用开发成为连接用户与企业的桥梁。本文将深入探讨iOS和安卓这两大主流平台在应用开发上的差异与共通之处,从技术架构、开发工具、市场定位到用户群体等方面进行全面分析,旨在为开发者提供清晰的指导和参考。通过比较这两个系统的开发环境,我们将揭示它们各自的优势和挑战,以及如何根据项目需求选择合适的平台。
|
9天前
|
Java Android开发 UED
安卓应用开发中的内存管理优化技巧
在安卓开发的广阔天地里,内存管理是一块让开发者既爱又恨的领域。它如同一位严苛的考官,时刻考验着开发者的智慧与耐心。然而,只要我们掌握了正确的优化技巧,就能够驯服这位考官,让我们的应用在性能和用户体验上更上一层楼。本文将带你走进内存管理的迷宫,用通俗易懂的语言解读那些看似复杂的优化策略,让你的开发之路更加顺畅。
17 2
|
9天前
|
IDE Java API
安卓应用开发入门:打造你的第一个"Hello World"
【9月更文挑战第11天】在探索安卓开发的海洋中,每个开发者的航行都从简单的"Hello World"开始。本文将作为你的航标,引导你驶向安卓应用开发的精彩世界。我们将一起启航,通过浅显易懂的语言和步骤,学习如何构建并运行你的第一个安卓应用。无论你是编程新手还是希望扩展技能的老手,这篇文章都将为你提供所需的知识和信心。准备好了吗?让我们揭开安卓开发的神秘面纱,一起创造些令人兴奋的东西吧!
|
2天前
|
搜索推荐 Linux Android开发
深入解析安卓与iOS系统架构设计差异
本文旨在探讨Android和iOS两大主流操作系统在架构设计上的根本差异。通过分析两种系统的设计理念、核心组件以及实际应用表现,揭示它们如何反映不同的开发哲学和用户体验策略。我们将从系统层级结构、内存管理机制、用户界面设计三个方面入手,逐一对比Android的开放性和灵活性如何与其对手iOS的封闭性和一致性相互辉映。
|
3天前
|
Android开发 Swift iOS开发
掌握安卓与iOS应用开发:关键技术与市场趋势
本文深入探讨了安卓和iOS平台的应用开发,通过分析关键技术如Kotlin、Swift及Flutter,并结合当前市场趋势,为开发者提供全面的技术指南。同时,比较了两大平台的优劣势,帮助开发者做出更明智的决策。
|
3天前
|
存储 Java API
深入探索安卓应用开发:从基础到高级
本文将引导读者从安卓应用开发的基础出发,逐步深入到高级技巧和最佳实践。无论是刚入门的新手还是已有一定经验的开发者,都能在本文中找到有价值的内容。通过详细的步骤解析和实用的代码示例,我们将一步步揭示安卓开发的精髓,助你在技术之路上不断进步。
13 0