对于做App架构设计的一些思考

文 | Promise Sun


注:本文是个人经过学习之后,所做的一篇简单的笔记,并不涉及理论分析,仅供参考。)

 

一、如何理解架构?

架构分为三个阶段:规划、设计、构建

规划阶段,考虑的是产品的需求、质量的需求,技术的可行性分析以及预研。

设计阶段,考虑的如何将一个复杂的系统拆分,并设计如何进行组织这些拆分的模块。

构建阶段,考虑的就是具体的实施问题,并且要保证一定的伸缩扩展性,因为架构是不断演进的。

 

 架构的设计可以从两个维度来考虑,一是架构思维,二是架构原则

思维是我们的思考方式,是我们解决问题的方法。

原则是我们思考问题的方向,是我们解决问题的一些标准。

 

二、移动端的app架构

移动端的app架构是一种基于产品和技术的进行统筹管理最终所形成的共识。

1.产品

产品,是我们产品经理们设计的结果,也是开发人员开发的最终成果,是前后两种人群的共同目标。

开发的角度来思考产品: 产品设计(做什么)、迭代计划(计划怎么做)开发资源(用什么做)产品质量(做的怎么样)风险规避产品交付。

1)产品设计(做什么)用户群体(什么人用)、核心理念(要做什么)。

需求可以分两种,一种是人性本能的需求,还有一种,是我们的产品催生的需求。

 

2)开发资源

     (1)开发团队配置(人)

       一个App的开发团队至少需要5个角色,即产品、交互、UI、软件、测试。不同角色也分不同的层次。

       eg:软件分初级、中级、高级。不同角色、不同层次合理搭配,才能够获得更高的工作效率,保证产品开发顺利进行。

     (2)数据内容配置(物)

       产品最终呈现给用户的是数据

       数据分两种,一种是私有的数据,是由开发商自己生产的数据。一种是平台自生的数据,是由用户生产的。

       如果是自己生产的数据,就得考虑数据来源,数据的覆盖率,数据的准确性,合法性等。如果是用户生产数据,就得考虑用户生产数据的动力、入口以及数据安全性、传播性等。

     (3)开发投入预算(钱)

       完成一款app开发,需要一支专业的开发团队,就需要考虑,开发周期多长、需要多少人、后期维护怎么办等等

       综合公司预算是多少去思考,毕竟多少钱能办多大事;需要考虑开发团队会消耗公司多少资源,公司能否获得相应或者更高的产出。

     (4)第三方资源

       很多资源是可以寻找第三方合作的。eg:服务器、云存储、支付接口、登录接口、内容数据以及开发过程中的一些开源框架等等。我们需要选择、商务谈判直到集成到自己的APP中。

3)产品质量(做的怎么样):
             用户体验、软件性能产品安全质量评测

软件的性能主要从软件的启动速度、流畅度、内存、功耗、流量、apk体积等几个方面来评判。

产品的安全性可以从两个角度来看,产品的生产商和产品的最终用户

对于生产商而言,有许多的内容是需要受到法律保护的,有许多的敏感信息,核心技术、网络接口等是不可以泄露的。

对于用户而言,在本地或者服务器存储了大量的用户信息,eg:账号密码,一些信息一旦泄露将严重伤害到用户的个人利益。

我们需要通过代码混淆、数据加密、权限限制等等一些技术手段来保护我们的应用。

质量评测主要从上述用户体验、软件性能、产品安全三个维度来进行评判。另外,相比同类产品来讲,app的优缺点,还有哪些改进空间。了解我们的产品质量是一件非常有意义的事情。

4)风险规避:

人力变动风险主要是人员的流动对项目的影响,eg:公司内部的调整,员工跳槽等。思考如果某某不在了,项目是否可以正常运行。开发团队之间是否能够交叉熟悉各自之间的业务。

上层决策风险eg:假设就在项目做一半你的老板说你现在的项目不做了,那么如何才能最大程度的挽回损失?如何进行项目的收尾工作?而不至于在项目又突然重启的时候接收的是一个烂摊子。

项目延期风险严格的掌控项目的进度,平衡可能会遇到的问题(eg:需求变动、技术难题等),保证能够按时交付产品。

软件缺陷风险能够提供一个稳定的版本。

人为失误风险测试版本、灰度机制(先给少量的用户发布,看看用户的反馈,而后逐步发布给所有用户。)、版本管理

 

2.技术

1)主要从以下6个方面进行思考技术选型、业务拆分、开发实现、开发规范、软件测试、开发等

技术选型 开发平台、开发工具、 开发语言、开发模式(eg:MVP、MVVM等)、开源框架、 新兴技术

业务拆分常用基础业务、通用技术业务、特定功能业务

架构设计(关注点分离、抽象):

开发实现项目分包、抽象接口、数据存储、性能管理、特殊处理、Log打印、软件重构、兼容适配

2)一些常用的第三方库

注:以下只简单列出一小部分在开发中常用的库)

网络:okhttp、 android-asyn-http、 volley、 Retrofit

事件总线:otto、 EventBus

依赖注入:Dagger、 RoboGuice、 ButterKnife

图片:Fresco、Glide、 picasso

数据库:GreenDao、 Ormlite、LitePal

Json解析: Gson、JackSon、 FastJson

响应式编程: RxJava、 RxAndroid

异常统计平台:腾讯Bugly、Crashlytics

性能优化: blockcanary、 leakcanary

3)其他技术:

AndroidSupport:DataBinding、MaterialDesign等;

混合开发:ReactNative、Hybrid、Weex等;

编程语言:Java8、Kotlin;

热修复:AndFix、HotFix、Tinker等;

构建:InstantRun、Freeline

 

三、App架构开发设计的推荐准则

1)不要把在Manifest中定义的组件作为提供数据的来源(包括Activity、Services、Broadcast Receivers等),因为他们的生命周期相对于App的生命周期是相对短暂的。

2)严格的限制每个模块的功能。eg:MVVM中不要在ViewModel中增加如何获取数据的代码。

3)每个模块尽可能少的对外暴露方法。

4)模块中对外暴露的方法要考虑单元测试的方便。

5)不要重复造轮子,把精力放在能够让App脱颖而出的业务上。

6)尽可能多的持久化数据,因为这样即使是在网络条件不好的情况下,用户仍然能够使用App

7)保证数据来源的唯一性

 

四、常见的几种App架构模式

请点击《了解MVC、MVP、MVVM、AAC等App架构模式》

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值