搭建高质量的Android项目框架系列一

1.编程规范
1.1.Application Name: 项目应用名,命名规则简单
1.2.Package Name:包名遵循“DNS反转”约定,亦即将企业组织或公司的域名反转后,在尾部附加上应用名称。遵循此约定可以保证包名的唯一性,遵循MVC的命名原则。

![这里写图片描述](https://img-blog.csdn.net/20160318184941119)
![这里写图片描述](https://img-blog.csdn.net/20160318185016995)
![这里写图片描述](https://img-blog.csdn.net/20160318185044465)
![这里写图片描述](https://img-blog.csdn.net/20160318185112794)
2.设计框架
![这里写图片描述](https://img-blog.csdn.net/20160318185146607)

根据经验,一个良好的架构设计可大致分三层:

  1. 上层是Activity、Fragment、Views&Widget等视图渲染和业务调用。
  2. 中层是针对业务的三方库,以及主要逻辑实现,业务流程在这完成,此层还可以细分,不再赘述。
  3. 底层是业务无关的框架库,用之四海而皆准,各类库内高内聚,不同库间低耦合
    1)遵循原则:基本遵循MVC的设计模式,以及23种设计模式和六大原则
    2)设计模式六大原则:
    http://www.uml.org.cn/sjms/201211023.asp#1
    3)23种设计模式:、
    https://github.com/iluwatar/java-design-patterns
    http://chjavach.iteye.com/category/111368?show_full=true

这里写图片描述
同款APP不同终端
App View层 :视图&控制层,重视交互、体验、布局、资源,作为上层快速实现视觉和界面,activity、fragment、layout、resource等在这里。
App SDK:业务层,重视业务、逻辑、模型,作为中层因其界面无关性而快速支持同款App的不同终端或者UI层,全部业务逻辑在这里实现,逻辑控制、数据解析和模型等在这实现。
Lite SDK :功能层,重视通用、性能、便捷,作为底层快速支撑不同App,由HTTP、ORM、IOC、Async、Base/Common等通用组件组成。
3.设计原则
总体:一个好的框架设计是基于业务需求的,脱离了具体业务谈框架也没多大的意义,把一些通用的功能模块抽象出来,作为服务提供给开发人员使用。

1) 功能单一的。也就是设计法则中的单一职责。单一职责原则适用于类和方法的设计,同样也适用于框架的设计。
2) 良好的封装以及简单地 API 调用。框架作为服务提供者,很多情况下是为了提升开发效率,对于一个相对稳定的第三方框架,开发者是不会关注于其具体实现的。
3) 良好的扩展性。也就是开闭原则,一个设计良好的模块,应该在不被修改的前提下被扩展。我们扩展开来,一个设计良好的框架,应该在具体代码业务不被修改的前提下进行修改。
4) 低耦合高内聚。其实就是对前面1 2 3 点的总结。
5) 稳定性高于一切。
6) 测试覆盖率,尽量保证每一个功能点都被覆盖。
7) 异常机制。就像前面所说的,稳定性高于一切。稳定性不光得益于良好的设计,还需要良好的异常机制的设计。对异常进行处理,不光适用于框架的设计,也适用于App 的设计。抛出异常来说明异常状况,但是不要强迫客户端使用异常来控制流。

8) 从普通使用者的角度去考虑抽象,技师增加一定的代码量,这也是值得的。

9) 起一个萌一点的名字,最好能够萌到看一眼就知道功能。这包括类的设计、方法的设计以及参数列表的命名。

10) 需要开发者配置的参数尽量对象化。比如一个方法参数可接受三种 int 型的值(1 , 2, 3),用以表示不同的意思。那么尽可能的创建一个 State 类,里面有三个静态常量 STATE_ONE ,STATE_TWO ,STATE_THREE 。

11) 对参数进行校验。接收到参数之后,尽可能的对每一个参数进行非法验证,比如非空判断、参数无意义的判断等,用异常的方式告知开发者需要传递正确的参数。

12) 尽可能简单地方法参数。或者说尽可能多的重载方法。但是需要注意模棱两可的重载。

13) 如12所说,延展说来就是尽量避免使用长参数列表。长参数列表更容易出差,而且对于维护以及编译、运行并不友好。如有必要,创建参数助手类(参考11)。

14) 对可能会犯的错误进行预计,要用发展的思维来设计框架,这一点有点跟11意思一样。

15) 版本兼容性。保证框架升级之后,对于老版本的支持。

16) 框架 API 生命周期的管理。具体的手段可以是设计 API 级别,比如内部、测试、开发、稳定等等。

4.常用框架:[其实就是jar包库,为业务服务Architecture is About Intent, not Frameworks]
4.1.Http/ REST 请求网络通信 :Volley/okhttp/android-async-http/ Retrofit/ RoboSpice/ http-common/ Retrofit 2
4.2.图片异步加载:ImageLoader/Glide/Fresco/Picasso/ CommonLib/UIL
4.3.数据解析:GSON/FastJSON/ Jackson/JSON快速生成实体Java类:Jsonschema2pojo/AndroidStudio插件 GsonFormat
4.4.UI效果 :PullRefreshListView
4.5.检查内存泄露 leakcanary
4.6.View 注解,控件注入和事件绑定:ButterKnife(配合 ButterKnife Zelezny 有奇效)
4.7.各种各样的弹窗:DialogPlus
4.8.代替 Toast 的消息提示:AppMsg
4.9.事件总线EventBus/ otto【为了解耦】
4.10.依赖注入Dagger/ RoboGuice/ ButterKnife/ Dagger2
【1)使用类似Guice或者RoboGuice等framework injection他们能够简化代码。但是mapped pages会长时间的被保留在RAM中,让内存消耗更严重】
【2)dagger的注解会在编译的时候生成代码,所以不会产生Guice等依赖runtime注解的内存问题,而且dagger2似乎是google自己fork dagger然后经一步改进了的】
4.11.数据库ActiveAndroid /ormlite /greendao/dbflow
【简化对于SQlite操作的对象关系映射框架OrmLite:】
4.12.响应式编程RxJava/ RxAndroid
4.13.日志输出Logger/ KLog/ LogUtils/Timber/hugo
4.14.崩溃统计平台Crittercism/ Crashlytics
4.15. 版本兼容:官方 support 全家桶
4.16. Java8:Retrolambda/Lightweight-Stream-API
4.17. 快速开发合集:Afinal/xUtils/Android Annotations/ Square 全家桶/ Jake大神的各种库,Facebook的Android库,support库
4.18.常用工具类:https://github.com/l123456789jy/Lazy
4.19.游戏开发:https://github.com/lfkdsk/JustWeEngine
4.20.动画:NineOldAndroids
4.21.单元测试:https://github.com/robolectric/robolectric
4.22. 切图、图片压缩:cutterman 这个Photoshop的插件值得拥有
4.23. PNG优化工具: windows : PNGGauntlet/Mac: ImageOptim/web app: https://tinypng.com/ 能极大减小图片体积,并保障图片质量
4.24.UI:Support Lib + Design Lib + 各种开源 View 控件。
【1】Tab滑页 、广告页 的 PagerSlidingTabStrip 或 ViewPagerIndicator +ViewPager
【2】查看图片的 PhotoView
【3】选择时间日期 省市地域的 各种改版 WheelView
【4】support包里的 SwipeRefreshLayout, DrawerLayout,新出的 recyclerview cardview 等 ,还有toolbar,design
【5】Listview 加动效的listviewanimations
【6】提高操作性的左滑后退 SwipeBackLayout
【7】多标签流的 flowlayout;
【8】 material design的设计和控件,还有一些牛人实现的ui效果
github搜索awesome android

更多参考【包括一些开源项目】:https://www.zhihu.com/question/37160415
https://www.zhihu.com/question/27667028
https://www.zhihu.com/question/34452706
Trinea 汇总的开源项目,类目非常全面: https://github.com/cesards/AndroidElementals
国外开发者汇总的开源项目: https://github.com/Trinea/android-open-project
http://blog.daimajia.com/android-library-collection/
http://litesuits.com/

5.框架之余
这里写图片描述
其实对于初学者而言:学习四大组件,研究ActivityManager,PackgeMag-
不使用开源的控件尝试使用Canvas 或者OpenGL自绘,阅读一下Dalvik的源代码理解ClassLoader和内存回收,看看整个Android的核心架构Binder,直接使用Android提供的HttpClient,HttpConnection网络请求库,自己动手写写SQL查询语句。

6.三大模式
https://www.zhihu.com/question/19729778
http://v.youku.com/v_show/id_XNzQzNDkzMjUy.html
https://www.zhihu.com/question/20148405

延伸阅读:
怎么做好互联网公司的技术团队负责人?
https://www.zhihu.com/question/39421456/answer/81233608?from=profile_answer_card
https://www.zhihu.com/question/27163593/answer/42703123
https://www.zhihu.com/question/27163593

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值