android开发编码规范
命名规范
android包命名规范
因为android包目录的命名会直接影响到整个APP项目工程后期的开发效率和拓展性,所以在创建项目的初期,包目录的命名非常重要。
android工程本身对包目录命名没有要求,可以将代码文件直接放置在默认目录下,但这样做会导致很多无关文件的堆积,不利于查找以及维护,所以一般不建议采用这种方式。
android包目录命名常用的方式有两种:
PBL(package by Layer) 和
PBF(package by Feature)。
1. Package By Layer
PBL 是按照层次划分的,实际就是按照职能划分,如在根目录里面命名activity,fragment、view、service、db、net、util、bean、base等包名。
例如activity的职能是管理所有的activity,只要这个类继承自activity,都放在这个目录下,以此类推。
早期的android APP开发采用这种形式开发。
d643d2a08932131cf088faf4cbe1085.jpg
PBL优点
- 项目结构清晰明了,上手快
- 适合开发人员不多、项目功能简单、后期维护不大的项目。
PBL缺点
-
低内聚
同一个目录下会有各种功能模块,这些模块本身没有很强的关联性,却被放在一起,导致聚合性降低。 -
高耦合
指的是目录之间的关联性,(例如activity目录内可能引用到fragment目录里面的类,导致目录之间耦合性较高). -
影响开发效率
开发一个功能模块,往往需要在不同的包目录之间切换,目录之间频繁切换会影响开发效率,同样,修改、调试一个功能也需要这样的操作,如果后期项目功能代码增多,会大大降低开发效率。
2.Package By Feature
image.pngPBF是按照功能划分包目录的,以功能模块作为目录名,所有与这个功能模块相关的开发都放在这个目录内。
可以看到,除了与业务无关的模块,如utils这样的通用模块,每个包目录都对应一个功能模块,Google的项目采用PBF进行包目录的名
PBF优点
-
高内聚
所有功能都在一个包下完成。 -
低耦合
包目录之间没有很强的关联性,以模块的功能只需要在对应的包目录下面即可进行开发,除了基础类以外,一般不需要引入其他类。 -
开发效率高
增删改查都只需要在对应的包目录下操作即可,便于团队开发管理,提升问题排查效率,也方便后续开发人员接收。 -
便于后期组件转化
如果项目是按照PBF来进行包目录划分的,后期进行组件化改造发的时候会非常的方便,可以直接把功能模块独立出来作为一个组件,同时划分好代码边界,对外保留好模块间的访问接口。
android代码命名规范
以java为例,来说明一下如何制定代码的命名规范,命名规范如下:
代码命名不以下划线和美元符号开头。
类名
采用大驼峰命名法 :【功能】+ 【类型】
Activity类:命名以Activity为后缀。如:LoginActivity。
Fragment类:命名以Fragment为后缀。如:ShareFragment。
方法名
采用小驼峰命名法
初始化方法,命名以init开头,如initView。
点击方法,命名以to开头,如:toLogin。
设置方法,命名以set开头,如:setData。
具有返回值的获取方法,命名以get开头 如:getData.
通过异步加载数据的方法,命名以load开头,如:loadData
布尔性的判断方法,命名以is、has或者check开头 如:isEmpty、checkNull。
对数据进行处理,命名以handle开头,如:handleUserInfo.
弹出框名称以show开头,如:showAgreement.
更新数据,命名以update开头,如:updateUserInfo。
保存数据,命名以save开头,如:saveUserInfo。
重置数据,命名以reset开头,如:resetUserInfo.
删除数据,命名以delete开头,如:deleteUserinfo。
查询数据,命名以query开头,如:queryUserInfo。
移除数据,命名以remove开头,如:removeUserInfo。
变量名
采用小驼峰命名法,变量名应该简短有规则,所有变量都要显示的赋值
如:int number = 0;
布尔变量应该包含Is 如:isFirstLogin。
-
成员变量(类变量)
常量、静态变量全大写,采用下划线命名法
其他变量以消息字母开头,前面不在加任何前缀。
public class Demo{
public static final int SOME_CONSTANT = 2020;
public int publicField = 1;
private static Demo sSingleton;
int mPackagePrivate;
private int mPrivate = 0;
protected int mProtected = 10;
}
-
局部变量
变量为一个单词,以小写字母开头。
如:GiftBean bean。 -
参数
参数为一个或者多个单词组成,以小写字母开头。
如: fun(int position)、fun(String userName)。 - 临时变量