Android开发架构规范,带你解答未解之谜。

前言
在开发中,一个良好的开发习惯以及一个开发规范可能会让你少走很多弯路,也会一定程度上的提高代码的可读性,可维护性和可拓展性。当随着需求的不断变更,需要维护项目的时候。当随着项目的代码量的提升,需要重构的时候。你会明白一个好的开发规范多么多么的重要。

这里整理一下自己android开发中的一些规范。希望对各位有帮助。

命名规范
包命名规范

包名全部采用小写
主包名采用[公司性质].[公司名称].[项目名称]的命名方式
如果根据不同情况进行分包的话,可以将包名分别命名为util,view, adapter等。

代码命名规范

命名规则有很多高大上的名词,比如大驼峰,小驼峰,匈牙利命名法。其实最简单的就是按照谷歌命名学习。

常量、枚举等均采用大写形式,用下划线区分各单词。使用static final
例如:private static final String TAG_FOR_ACTIVITY = "XXXX";
类名、接口名、枚举名。第一个和后面的单词都要第一个字母大写
例如:MainActivity,PersonalLoginActivity
资源文件命名
例如:activity_main.xml,ic_launcher.png
注意图片文件命名只能用小写字母、数字,否则会导致R文件无法编译出来。也是比较费心的。
继承自安卓组件的类,一般采用父类名作为后缀,
例如:class LoginActivity extends Activity{}
自定义异常必须以Exception结尾
全局变量添加所有者前缀:实例成员变量前缀m(表示member),类静态变量前缀s(表示static),
例如:protected Subscription mSubscription;
控件变量添加组件前缀,顺序在所有者前缀之后,控件缩写button->btn,textview ->txw,listview->lst等
例如:全局名称mBtnNext局部名称btnNext
构造方法采用递增方式(参数多的写在后面),参数少的调用参数多的构造函数。这样也减少初始化代码。比如开源库PagerSlidingTabStrip

更多命名规范

之前收藏的这篇文章比较全。Android 命名规范 (提高代码可以读性)

编程规范
源文件编码格式为 UTF-8。
java代码中不出现中文,最多注释中可以出现中文
服务端可以实现的,就不要放在客户端
引用第三方库要慎重,避免应用大容量的第三方库,导致客户端包非常大
处理应用全局异常和错误,将错误以邮件的形式发送给服务端
图片的.9处理
使用静态变量方式实现界面间共享要慎重
单元测试(逻辑测试、界面测试)
不要重用父类的handler,对应一个类的handler也不应该让其子类用到,否则会导致message.what冲突
activity中在一个View.OnClickListener中处理所有的逻辑
strings.xml中使用%1$s实现字符串的通配
数据一定要效验,例如字符型转数字型,如果转换失败一定要有缺省值;服务端响应数据是否有效判断
对于未完成的方法,使用TODO加以标记
若功能已完成,但存在效率等潜在问题时,使用XXX加以标记
若代码存在严重问题或仅用于调试,使用FIXME加以标记
values目录下文件名称较固定,不得随意更改
代码提交规范
我们使用的无论是git,还是svn都需要遵守下面这些规范,个人比较倾向于git。

工作目录要及时更新,不要和服务器有太大的差别
提交代码时,如果出现冲突,必须仔细分析解决,不可以强行提交
提交代码之前先在本地进行测试,确保项目能编译通过,且能够正常运行,不可盲目提交
必须保证服务器上的版本是正确的,项目有错误时,不要进行提交
提交之前先更新
提交时注意不要提交本地自动生成的文件,比如我们Android Studio项目中的 idea,build文件夹是不需要提交的。
不要提交自己不明白的代码
提前协调好项目组成员的工作计划,减少冲突
对提交的信息采用明晰的标注(写注释)
使用git以及github,相信stormzhang的从0开始学习 GitHub 系列会对你有很大的帮助。

架构规范
这是我整个系列文章从零开始搭建android框架系列的重点,所以这里放在最后面。

架构方式

是选择MVP,MVC,MVVM ,Flux还是clean 架构?

,+dagger2?+rxjava?+Retrofit/okhtttp?+loader?+databinding?+contentProvider?

谷歌官方架构示例android-architecture,以及我之前github中整理的架构合集能给你答案。

开源库的选取以及封装。

对开源库的选取,一般都需要选择比较稳定的版本,还有作者在维护的项目

,比如这里在github搜索image,出现的安卓中的图片加载库。除了考虑star,还要考虑作者对issue的解决,以及开发者的知名度等各方面。

选取之后,一定的封装是必要的。

网络图片加载的封装这篇文章可能会从图片加载封装的角度给你讲讲封装的必要性。架构提示

这里尽量写出自己想到的点。

抽象层面上:

提高架构的拓展性是有必要的。
以前的框架可能会出现功能不足的情况,但是因为这点是不可预见的,所以我们选择框架时一定要了解好框架本身的扩展性如何,或者对框架有较深的理解,能够自己扩展框架,
提高架构的稳定性
架构的文档也是必不可少的。
具体操作时:

activity和fragment里面都会有许多重复的操作以及操作步骤,所以我们都需要提供一个BaseActivity和BaseFragment,让所有的activity和fragment都继承这个基类。
来看看我们BaseActivity中都提供了哪些操作:

必要的注释真的会一定程度上的降低你的工作量,而不是提高。
比如说我使用Rxjava做加载数据的操作。这里面的流程可能稍显复杂,但是能够step1, step2的写在上面,能够让别人看懂,自己维护也方便。

数据提供统一的入口。
无论是在mvp,mvc,还是mvvm中,提供一个统一的数据入口,都可以让代码变得更加易于维护。
比如,我使用的DataManager,里面的http还是preference,还是eventpost ,还是database ,都在DataManger里面进行操作,我们只需要与DataManger打交道。

多用组合, 少用继承
提取方法, 去除重复代码。
比如在我的架构中,我会吧imageloader单独的抽取出来作为一个widget,把对RecyclerView的封装单独抽取出来,把下拉刷新上拉加载抽取出来。如下图:

对于必要的工具类抽取也很重要,这在以后的项目中是可以重用的。

不要使用魔鬼数字/字符串/尺寸值/颜色值,正确的命名等
比如日间模式和夜间模式的对应颜色值,一看就很清晰了。

引入Dagger2 减少模块之间的耦合性
Dagger2 是一个依赖注入框架,使用代码自动生成创建依赖关系需要的代码。减少很多模板化的代码,更易于测试,降低耦合,创建可复用可互换的模块。
参考之前的文章 Google官方MVP+Dagger2架构详解
为你的项目引入Rxjava+RxAndroid这些响应式编程吧。极大的减少逻辑代码,让你爱上写代码停不下来。
通过引入 Event Bus(事件总线,这个项目使用的是otto)。它允许我们在Data Layer中发送事件,以便View Layer中的多个组件都能够订阅到这些事件。比如DataManager
中的退出登录方法可以发送一个事件,订阅这个事件的多个Activity在接收到该事件后就能够更改它们的UI视图,从而显示一个登出状态。
当然你也可以有很多的选择,EventBus,Otto,自定义RxBus等。减少回调。
添加日志打印,用于查找错误等。
logger 以及timber是我推荐的。
需要使用BuildConfig.DEBUG标记对Log进行封装,只在调试时输出重要信息,正式版不输出
TODO more
写在最后:

码字不易看到最后了,那就点个关注呗,只收藏不点关注的都是在耍流氓!

关注并私信我“架构”,免费送一些Java架构资料,先到先得!

原文地址:https://blog.51cto.com/14233733/2399542

时间: 2024-10-11 05:25:34

Android开发架构规范,带你解答未解之谜。的相关文章

Android开发编码规范(自用)

转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持!   Android开发编码规范 目的及指导原则 目的 统一规范 Eclipse编辑环境下Java的编码风格和标准 指导原则 1)首先是为人编写程序,其次才是计算机.这是软件开发的基本要点,软件的生命周期贯穿产品的开发.测试.生产.用户使用.版本升级和后期维护等长期过程,只有易读.易维护的软件代码才具有生命力. 2)保持代码的简单清晰,避免过分的编程技巧.保持代码的简单化是软件工程化的

Android开发代码规范(转)

Android开发代码规范 1.命名基本原则    在面向对象编程中,对于类,对象,方法,变量等方面的命名是非常有技巧的.比如,大小写的区分,使用不同字母开头等等.但究其本,追其源,在为一个资源其名称的时候,应该本着描述性以及唯一性这两大特征来命名,才能保证资源之间不冲突,并且每一个都便于记忆. 对于理解应用程序的逻辑流,命名方案是最有影响力的一种帮助.名称应该说明“什么”而不是“如何”.命名原则是:使名称足够长以便有一定的意义,并且足够短以避免冗长.唯一名称在编程上仅用于将各项区分开.以下几点

ym——Android开发编码规范(自用)

Android开发编码规范 目的及指导原则 目的 统一规范 Eclipse编辑环境下Java的编码风格和标准 指导原则 1)首先是为人编写程序,其次才是计算机.这是软件开发的基本要点,软件的生命周期贯穿产品的开发.测试.生产.用户使用.版本升级和后期维护等长期过程,只有易读.易维护的软件代码才具有生命力. 2)保持代码的简单清晰,避免过分的编程技巧.保持代码的简单化是软件工程化的基本要求.不要过分追求技巧,否则会降低程序的可读性. 3)编程时首先保证正确性,其次考虑效率.编程首先考虑的是满足正确

世界十大未解之谜

世界十大未解之谜 1.泰坦尼克号沉没 1912年4月12日是个悲惨的日子——这一天,英国豪华客轮泰坦尼克号在驶往北美洲的处女航行中不幸沉没.这次沉船事件致使1 523人葬身鱼腹,是人类航海史上最大的灾难,震惊世界.这么多年来,泰坦尼克号沉没的真正原因,一直是人们探索的焦点. 1985年,人们在纽芬兰附近海域发现了沉没的泰坦尼克号残骸.紧接着,探索者们利用各种先进技术,甚至潜入冰冷黑暗的深海,企图揭示泰坦尼克号沉没的原因.然而,潜入水中的人只能看到泰坦尼克号的外观,却无法探查由于冰山撞击造成的“创

观《西游记未解之谜 》后记

前2周大学的某个课堂练习涉及到<西游记>,由于自己并没有对西游记有太多深刻的解析,所以在网络上搜索和西游记有关的讲解,就遇到了吴闲云写的<西游未解之谜>,简直吸引住了我--一个对西游一知半解的人,花上一个晚上如获珍宝似地看了一半,并在今晚看完了剩下的部分. 对于该文章的内容,基本是持一种"哇,这么高深吗?想想好像也有道理哎"的态度,所以看完这本书(大概10万字)也不是什么难题,也不觉得很累(ps:我要是学习其他也有这股劲就好了).看完一半后的那一段时间,我还经常

Android开发命名规范

刚开始进行android开发时候,命名都是按照拼音来,所以有的时候想看懂命名的那个控件什么是什么用的,就要读一遍甚至好几遍才知道,这样的话,在代码的审查和修改过程中就会浪费不少不必要的时间.如果就是我一个人开发,一个人维护的话还好,可是如果一个项目是团队分工合作,这样让你的同事去看你的代码就更加吃力了,因为大家之间的编程方式不一样,所以,在开发过程中,命名规范统一尤为重要,最好是团队中统一好大家命名方法,这样对于日后的工作会轻松很多. 在面试的时候,审核一个程序员的编程水平的时候,命名规范也是一

Android开发编码规范导致的内存泄露问题

在很久很久之前,看过一篇关于内存泄露的文章,里面列举了比较全的应该注意的问题,后来找不到原文地址,今天翻了微博,找到了该文章,为了方便日后自己查看,将注意的问题提取出来.在android开发中,我们的编码习惯可能会让我们编写出一些容易导致内存泄露的代码.所以我们应该要养成一个良好的编码习惯. 单例 平时,我们可能会这样写单例 public class Singleton{ private static Singleton instance; private Context mContext; p

Android开发必知会的多进程详解

在计算机操作系统中,进程是进行资源分配和调度的基本单位.这对于基于Linux内核的Android系统也不例外.在Android的设计中,一个应用默认有一个(主)进程.但是我们通过配置可以实现一个应用对应多个进程. 本文将试图对于Android开发中应用多进程做一些整理总结. android:process · 应用实现多进程需要依赖于android:process这个属性 · 适用元素:Application, Activity, BroadcastReceiver, Service, Cont

(转)Android开发:5大布局方式详解

原文链接 http://liangruijun.blog.51cto.com/3061169/632532 Android中常用的5大布局方式有以下几种: 线性布局(LinearLayout):按照垂直或者水平方向布局的组件. 帧布局(FrameLayout):组件从屏幕左上方布局组件. 表格布局(TableLayout):按照行列方式布局组件. 相对布局(RelativeLayout):相对其它组件的布局方式. 绝对布局(AbsoluteLayout):按照绝对坐标来布局组件. 1. 线性布局