【架构篇】Android移动app架构设计浅谈

前言

架构,又名软件架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。

软件架构设计目标:

1.可靠性(Reliable)。软件架构的可靠是产品设计的前提。
2.安全性(Secure)。软件架构的安全性是产品可持续发展的条件。
3.可扩展性(Scalable)。软件架构必须能够不同的功能需求情况下,支持可扩散性。
4.可定制化(Customizable)。同样的一套软件,可以根据客户群的不同和市场需求的变化进行调整。
5.可伸缩 (Extensible)。在新技术出现的时候,一个软件架构应当允许导入新技术,从而对现有系统进行功能和性能的扩展。
6.可维护性(Maintainable)。软件系统的维护包括两方面,一是排除现有的错误,二是将新的软件需求反映到现有系统中去。一个易于维护的系统可以有效地降低技术支持的花费。

架构是项目形成到一定阶段的趋势。是对整个产品是否合格的有效保证。对于很多项目设计人员,在不考虑产品本身,不考虑团队,不考虑时间周期的前提下,一味的强调软件构架,是不合理的,也不利于整个产品的发展。当然,一个好的项目架构师,是很能清楚,项目在不同阶段,所需要处理的不同职责。能够最大限度的发挥能效,将产品周期,与功能模块做出最合适的匹配规划,这才是一个架构师所必须追求的。

以下是个人对Android移动项目架构设计简单的经验之谈。欢迎与更多的朋友交流,若有疑问,或不合理之处,都可以随时交流。

从项目功能开始

每一个项目架构师,在拿到一个新项目的时候,都会不同的着重点。在项目规划风格上,都会有不同的考虑。而我个人在着手项目时,都会从功能上去着手。先了解项目整体的功能模块,区分出主体功能模块有哪些类,对不同的功能模块进行细致的划分。这是我开始的第一步。因为,只有对项目整体有个把握,才能更快的对项目有了解,才能知道怎样去合理安排项目的研发,才能更好的去安排项目进度流程,和人员的安排调度。

功能划分之后,接下来就是项目的实际研发阶段。这个阶段就是项目实际进展阶段了。必须要有合理的安排调度,才是保证项目的高效。比如:我们进行的大部分项目,都有网络交互的部分,也有本地功能部分,还有一些基础数据模块部分,这些功能必须要有合理的时间安排。

项目研发之前,几点提要说明:
一、团队之间统一编码规范。
二、需求文档统一管理。
三、多人协同开发,根据文档开发(一切以文档为主)。

项目以功能划分,功能以模块划分。在项目初期,除了产品原型可能是提前设计成形外,其它的项目文档都还未出来,产品也是有个确定功能,但是细节文档还未成形,这个时候已经是项目开始阶段,即使在有一些文档还未成形前,也可以开始项目的基础开发了。

功能模块

网络模块,数据库存储模块,数据加密模块,数据缓存模块,数据解析器,日志信息收集模块等。这些都是项目的基本模块,也可以独立于功能的模块,可以提前开发,测试。便于后期直接使用。

移动安全机制

做过移动项目的都知道,移动安全是项目前期需要考虑的一个重要环节。所以,在项目之初,就应该对自身的数据存储做必要的数据加密,对网络传输的数据进行必要加密。
移动数据加密分为两种:
一种是本地数据加密,只是本机存储的信息,本地加密保存。
一种是网络传输数据加密,这是涉及到网络协议,与服务器之间的加密协议。

本地加密方式有很多种:
一、MD5加密算法。 MD5是个不可逆的算法 没有解密的算法(目前据说也有方法破解)。
二、DES加密。可逆。
三、RSA加密。可逆
对于不是需要绝对足够安全的项目,以上三种加密足够用。

网络数据加密主要从两个方面考虑:
1. 保证API的调用者是经过自己授权的App;
2. 保证数据传输的安全。

保证API是自己授权的App,采用设计签名的方式。对每个移动平台,都会有不同的AppKey和AppSecret。在调用API时,将AppKey加入到请求参数中,然后,把AppSecret与其它参数,通过某种签名算法生成一个签名字符串,把数据传输给服务器端。而服务器根据AppKey和AppSecret,用相同的签名算法生成的签名与之一致,则说明请求安全。签名算法可以采用自己规定的一套签名算法(更安全),也可采用外部公开的签名算法(初期使用)。另外,在参数列表中再加入一个时间戳,还可以防止部分重放攻击。
对于数据传输安全,可以使用HTTPS。因为HTTPS添加了ssl安全协议。但是android项目开发,大部分都没有去实现。主要是没有对ssl证书进行安全性检查。

API协议标准化

项目开发,协议一定需要标准化,并且需要严格执行接口协议。完成每个版本的协议文档更新,方便后续使用者查看。
目前协议都是使用Json格式传输。需要注意的是,JSON数据和实体对象在传输时,序列化和反序列化因平台不同,会产生不同的区别。比如:JSON库将Date类型的数据序列化时会转为String,传输到服务器时,服务器反序列化经常会出现不同的结果。

API接口版本控制

一般解决接口更新变化问题,我们采取的做法是,每个API接口,都会带有协议的版本,若是协议发生改变,则版本号相应改变,在处理数据请求时,则可以根据不同协议的版本进行处理,解决了版本的兼容性问题。

架构分层

架构设计,主要的目的就解决功能和代码的复用,减少重复开发,方便功能扩展,降低功能和代码层级的耦合。
目前移动设计框架,主流的有三种:MVC、MVP、MVVM三种方式(具体详情,请参考框架小结)。
任何的框架设计都是在满足开发需求为前提,千万不能为了设计而设计,不要问我这三种设计,哪种最合适开发?如果你还这样去问,那只能说你还不是一个成熟的产品设计者。三种框架都有各自的利弊,是应该在不同的阶段和不同人员的配备情况下,选择更合理的方式。我曾经参与一个创业团队开发视频项目,前期只有两个移动开发人员,项目时间紧的情况下。项目负责人就只会天天在那里修改需求,谈项目架构。初期的项目,在产品验证功能阶段,在项目需要快速迭代阶段,应该使用最有效的框架,才是合理的选择。而且项目的发展,一定是随着项目功能的确立,产品的定型和需求完善,对项目本身的稳定性和性能的要求,才是一个逐步提高的过程。想要一步达到完美的产品,不仅是在设计上很难做到,而且在目前所有的产品中,都是很难达到的。

任何框架都是在此三层数据模型上。View,Model,Controller/Presenter/ViewModel。上层View:用户行为操作,数据结果显示。底层Model:数据处理,提供显示数据。中间的就是业务逻辑层。

Android项目设计,重在对项目的理解,重在对需求功能的划分,重在对团队合理分配。高效的产出,快速的迭代,才是移动项目的生存之道。

Android测试

移动开发,为保证质量产出,需要进行必须要逻辑测试。而在项目框架设计中,简单的mvc模式,若view和model中混有业务逻辑,则不利于接口测试。所以,在后续版本的迭代中,需要逐渐使用mvp或mvvm框架设计,让view和model与业务逻辑实现完整的解耦合。

Android环境

自从Android提供了更高效稳定的android studio之后,对于开发者来说是更便捷,更方便了。在android gradle多平台打包。proguard代码优化,混淆。随着android studio的越来越强大,越来越稳定,相信开发android项目也会变得越来越so easy了。

总结在最后

一个合格的移动项目架构师,必须是在不断的项目开发中成长的。不仅仅懂得项目的高效快速部署,也懂得怎样合理优化团队,才能有更优质的产品产出。移动产品,是一个快速产出的产品,怎样做出适合团队产出的产品,才是移动架构师的学习之道。

android移动高级开发,请加入群交流:247039470

转载,请说明出处!谢谢!

时间: 2025-01-20 19:30:30

【架构篇】Android移动app架构设计浅谈的相关文章

Android应用安全开发之浅谈密钥硬编码

Android应用安全开发之浅谈密钥硬编码 作者:伊樵.呆狐@阿里聚安全 1 简介 在阿里聚安全的漏洞扫描器中和人工APP安全审计中,经常发现有开发者将密钥硬编码在Java代码.文件中,这样做会引起很大风险.信息安全的基础在于密码学,而常用的密码学算法都是公开的,加密内容的保密依靠的是密钥的保密,密钥如果泄露,对于对称密码算法,根据用到的密钥算法和加密后的密文,很容易得到加密前的明文:对于非对称密码算法或者签名算法,根据密钥和要加密的明文,很容易获得计算出签名值,从而伪造签名. 2 风险案例 密

Android应用安全开发之浅谈网页打开APP

一.网页打开APP简介 Android有一个特性,可以通过点击网页内的某个链接打开APP,或者在其他APP中通过点击某个链接打开另外一个APP(AppLink),一些用户量比较大的APP,已经通过发布其AppLink SDK,开发者需要申请相应的资格,配置相关内容才能使用.这些都是通过用户自定义的URI scheme实现的,不过背后还是Android的Intent机制.Google的官方文档<Android Intents with Chrome>一文,介绍了在Android Chrome浏览

Web App设计浅谈

HTML5技术的强势发展,为互联网带来的最大改变就是: web从"已死"的预言中回过头来给Native app一记沉重的回马枪,web app成为举世瞩目的明星开始走在各大公司研发的时刻表中.Google .微软.苹果三大巨头紧锣密鼓地在web app的研发产品领域圈地设岗,并试图建立以自己为中心的"云"服务平台,企图在web app时代到来的时候充当霸主. 本文将围绕web app的设计,与大家讨论几点设计技巧. 什么是web app? Web app是一种通过网

用户体验设计:浅谈可用性测试中沟通的技巧

文章描述:如何快速解除用户防备?--浅谈可用性测试中沟通的技巧.   一般来说,在产品的设计和开发过程中,不同阶段会使用到不同的用户研究方法.比如,在产品正式发布之前,通常会进行可用性测试.可用性测试,是指让一群有代表性的用户尝试对产品进行典型操作,同时观察员和开发人员在一旁观察.聆听.记录.该产品可能是一个网站.软件,或其他任何产品,它可能已经做好,也可能尚未成型. 对于一个典型的可用行测试,我们可以:1. 通过观察用户在使用产品过程中出现的一些问题,发现产品的可用性问题2. 从测试参与者的表

用户体验设计:浅谈引导用户设计的问题

文章描述:如果说传统媒体最差的用户体验是用户不知道"它是什么",那么互联网最差的用户体验就是用户不知道 "该做什么". 引言 作为163免费邮wap版的交互设计师,每天会收到很多用户反馈,其中一些用户反映:不知如何修改邮箱密码:在写邮件页面找不到"发送"按钮:甚至不知道登录邮箱要填写的用户名是指什么--一些看似简单的操作,对于用户来讲都有可能造成困扰,产生"挫败感".而对于一个新产品/新功能而言,用户将要花费比上述情况更多的学

Android应用安全开发之浅谈加密算法的坑

Android开发中,难免会遇到需要加解密一些数据内容存到本地文件.或者通过网络传输到其他服务器和设备的问题,但并不是使用了加密就绝对安全了,如果加密函数使用不正确,加密数据很容易受到逆向破解攻击.还有很多开发者没有意识到的加密算法的问题. 1.需要了解的基本概念 密码学的三大作用:加密( Encryption).认证(Authentication),鉴定(Identification)  加密:防止坏人获取你的数据.  认证:防止坏人修改了你的数据而你却并没有发现.  鉴权:防止坏人假冒你的身

C#权限管理和设计浅谈_C#教程

此文主要想和大家分享的是这段时间,对权限管理和设计的断断续续的思考学习,和个人的一些软件开发等方面的看法. 提到'权限管理和设计',大家可能会第一时间想到这园子里的 吉日嘎拉,在这方面他可以算是'大牛'或专家 --他的'通用权限管理系统',究竟做的怎样,看看他的博客就差不多可以知道了(貌似我在给他做推广,呵呵...,but in fact,is not),别的暂且不敢说,最起码可以看出他研究的比较深入和狂热,其系统也具有一定的'成熟度',用他的话来说--就是在努力做到他的极致.他做的是通用权限管

一起谈.NET技术,C#权限管理和设计浅谈

权限管理是很多软件中相当重要的一个模块它的设计的好坏直接影响到软件的安全性.权限管理的可扩展性和易操作性 以及代码中权限判断的复杂程度和效率等方面.此文主要想和大家分享的是这段时间,对权限管理和设计的断断续续的思考学习,和个人的一些软件开发等方面的看法. 提到'权限管理和设计',大家可能会第一时间想到这园子里的吉日嘎拉,在这方面他可以算是'大牛'或专家 他的'通用权限管理系统',究竟做的怎样,看看他的博客就差不多可以知道了(貌似我在给他做推广,呵呵...,but in fact,is not),

C#“.NET研究”权限管理和设计浅谈

权限管理是很多软件中相当重要的一个模块它的设计的好坏直接影响到软件的安全性.权限管理的可扩展性和易操作性 以及代码中权限判断的复杂程度和效率等方面.此文主要想和大家分享的是这段时间,对权限管理和设计的断断续续的思考学习,和个人的一些软件开发等方面的看法. 提到'权限管理和设计',大家可能会第一时间想到这园子里的吉日嘎拉,在这方面他可以算是'大牛'或专家 他的'通用权限管理系统',究竟做的怎样,看看他的博客就差不多可以知道了(貌似我在给他做推广,呵呵...,but in fact,is not),