(注:本文是个人经过学习之后,所做的一篇简单的笔记,并不涉及理论分析,仅供参考。)
一、如何理解架构?
架构分为三个阶段:规划、设计、构建。
在规划阶段,考虑的是产品的需求、质量的需求,技术的可行性分析以及预研。
在设计阶段,考虑的如何将一个复杂的系统拆分,并设计如何进行组织这些拆分的模块。
在构建阶段,考虑的就是具体的实施问题,并且要保证一定的伸缩扩展性,因为架构是不断演进的。
架构的设计可以从两个维度来考虑,一是架构思维,二是架构原则。
思维是我们的思考方式,是我们解决问题的方法。
原则是我们思考问题的方向,是我们解决问题的一些标准。
二、移动端的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架构模式》