Android 开发规范系统学习

来源:互联网 发布:linux 系统版本 编辑:程序博客网 时间:2024/06/06 05:48

本文出自:http://blog.csdn.net/dt235201314/article/details/66477296

一丶慨述

本周是雏鹰飞翔计划第一周,内容:开发规范系统学习

二丶正文

1.阿里巴巴Java开发手册(下载链接)

今日简书投稿遭拒,阅读投稿须知,有两点印象深刻:

(1)不收录个人感悟随笔,文章得面向大众 ;

(2)不收录纯思想感悟文章,要有诸如方法论,总结立意对大众有帮助。

这里就说说方法论

费曼四步学习法(学习→讲述→重复→简化)

学习(选择一个你想了解的话题或概念,进行学习 例:阿里巴巴Java开发手册)


(阅读笔记随机1页,字丑勿喷)


讲述(一旦你明白了其内容,找张纸把它写下来,就像你要把它教给别人一样;
最好在写的时候同时讲述,如同老师在黑板前做的那样。)

第一次给“师傅”汇报

1.很多IT专业性名词缩写(SOA,MVP等),概念性名称(Java五种对象等),都不敢说自己是对技术机毕业。(师傅:概念了解一下就好,只看Java前面部分就好)

2.很多强制规范,如果追问为什么,学问就大了。(师傅:记住就好了,先不深入,开发时注意)


重复(这将帮助你摸清自己掌握了哪些部分,看到哪些内容还没有弄懂。无论哪里不明白,反复进行学习,直到你能够完整地解释该内容)

这里就举例关于一些专业名词。(什么是JavaBean?)

这个问题很基础,但并不简单,网上知乎给的答案很多,深究的话可以谈到sun公司发展,Java历史了。


简化(当一切内容都尽在掌握后,从头进行复述,但要求简化自己的语言,或者使用图形来进行阐释。如果你的解释比较啰嗦或者不清楚,

那么很可能自己并没有很好地理解问题,应该重新进行学习。)

JavaBean:表达实体和信息的一种规范,便于封装重用。满足以下条件:

1.类public,属性private;2.提供默认构造方法;3.提供getter,setter,4.支持事件行为,可序列化便于储存。


关于其他概念性词语缩写:

Java五种对象:

VO:value object值对象
通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要。个人觉得同DTO(数据传输对象),在web上传递。
DAO:data access object 数据访问对象
此对象用于访问数据库。通常和PO结合使用,DAO中包含了各种数据库的*作方法。通过它的方法,结合PO对数据库进行相关的*作。
POJO:plain ordinary java object 简单无规则java对象
我个人觉得它和其他不是一个层面上的东西,VO和PO应该都属于它。
PO:persistant object 持久对象
可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的*作。
BO:business object 业务对象
封装业务逻辑的java对象,通过调用DAO方法,结合PO,VO进行业务*作。

EJB:执行任务的类,打包放在服务器(服务器相关)


super.toString();
调用父类toString()方法

......(有时间再补上)


2.Android开发规范相关

网上Android开发规范一搜一大把

简书:Android 编码规范(http://www.jianshu.com/p/0a984f999592)

郭神订阅号:Android 命名规范(http://blog.tinyx.cc/android-naming.html)

github:Android开发规范(updating)(https://github.com/Blankj/AndroidStandardDevelop)

这里做复制粘贴,按学习计划提纲问答补充


命名规范:

包(packages): 采用反域名命名规则,全部使用小写字母。一级包名为地顶级域名如com,二级包名为xx(可以是公司或则个人的随便),三级包名根据应用进行命名,四级包名为模块名或层级名; 如 com.tinyx.myapp.activities;

类(classes):用Pascal命名法,尽量避免缩写,如:MyActivity;缩写是众所周知的,如HTML,URL;类名称中包含单词缩写,则单词缩写的每个字母均应大写,如:PublicHTML,CommonURL。

接口(interface):与类一样用Pascal命名法,多以able或ible结尾,多用作表示行为,如Runnable,Accessible;

方法(methods):动词或动名词,采用Camel命名法,如:onCreate(),run();下面是一些建议:

  • 初始化相关方法,使用init为前缀标识,如:初始化布局initView();
  • boolean型使用is或check为前缀标识, 如:checkValue()、isValidate();
  • 返回某个值的方法,使用get为前缀标识,如:getName();
  • 数据进行处理相关,尽量使用process为前缀标识,如:processUpdate();
  • 保存数据相关,使用save为前缀标识,如:saveData();
  • 对数据重置的,使用reset前缀标识,如:resetData();
  • 清除数据相关,使用clear前缀标识,如:clearData();
  • 移除某些项目,使用remove前缀标识,如:removeItem();
  • 绘制数据或效果相关的,使用draw前缀标识,如:drawCircle();

变量(variables):采用Pascal命名法,建议采用有意义的命名如:firstName,lastName;

    • 模型类变量默认以上规则
01public class User {
02    public String name;
03    public String phone;
04    public int sex; //1,男 2,女
05
06   public User() {
07         this.name = "myname";
08        this.phone = "123
09        this.sex = 0;
10    }
11}
  • 非模型类全局参数建议加上小写m开头;
01public class TestActivity extends Activity{
02    private ZoomableImageView mZoomableView;
03    private TabLayout mTabLayout;
04    private int mItemsCount;
05
06   @Override
07    protected void onCreate(Bundle savedInstanceState) {
08        super.onCreate(savedInstanceState);
09        setContentView(R.layout.test_activity);
10    }
11}

常量(constants): 全部大写,采用下划线命名法.如下:

1public static final int MAX_ITEMS= 10;
2public static final String TAG = User.class.getSimpleName();

资源文件命名(resources):采用下划线命名法,全部小写,针对不同资源,建议用下面的命名方法;

    • drawable资源,加前缀命名:前缀_功能_模块_说明.xml/png/
说明命名范例图标:建议格式 ic_xxx;ic_appicon.png背景:建议格式 bg_xxx;bg_normal_button_default.xml,bg_normal_button_press.xml
    • layout 资源文件,前缀命名:类型_模块_功能_说明.xml,举一些常用的例子如下:
说明命名范例Activity布局文件activity_main.xmlFragment布局文件fragment_main.xml局部布局View文件view_main_header.xml,view_main_bottom.xml自定义提示对话框dialog_alert.xml列表项等fragment_user_list_item.xml
    • 动画anim资源文件(anim只有一种资源,所以不必加前缀区分):模块_功能_动画_方向.xml
说明命名范例淡入main_button_fade_in.xml淡出main_button_fade_out.xml从下方推入button_push_down_in.xml从下方推出main_button_push_down_out.xml
    • menu菜单资源文件(menu只有一种资源,所以不必加前缀区分),模块_功能_说明.xml
说明命名范例主界面菜单main_activity.xmlFragment界面菜单user_fragment.xml
  • values资源,这个主要分下面几种资源:

1、 ids资源,主要存放是界面控件的id值,用下划线小写命名法,前缀方式:前缀_模块_功能_说明,常用界面控件命名如下:

说明命名范例布局和子控件(ViewGroup,自定义View)view_main_topnavTextViewtv_main_titleButtonbtn_user_addImageButtonimgbtn_user_delImageViewimg_thumbCheckBoxcb_sexRadioButtonrbtn_answerEditTextet_usernameToggleButtontoggle_funtionProgressBarpb_downloadSeekBarsb_progressProgressBarpb_downloadVideoViewvv_courseWebViewwv_downloadRantingBarrb_downloadSpinnersp_citiesScollViewsv_mainTextSwitchsp_citiesListView/ExpandListView/RecyclerViewlv_citiesMapViewmv_location

2、strings/arrays/dimens资源,用下划线小写命名法,不加任何前后缀,格式,模块_功能_说明

3、attrs/colors/ids的属性和名称使用 Camel命名法; styles的属性使用Camel命名法,名称使用Pascal命名法;如下面:

01<!--attrs-->
02<attr name="text" format="string" />
03<attr name="itemIcon" format="reference" />
04<attr name="showToggle" format="boolean" />
05<attr name="showVersion" format="boolean" />
06<style name="Theme.AppCompat.Light.NoActionBar">
07        <item name="windowActionBar">false</item>
08        <item name="windowNoTitle">true</item>
09</style>
10
11 <!--colors-->
12 <color name="colorPrimary">#009688</color>
13 <color name="colorPrimaryDark">#00796b</color>
14 <color name="colorAccent">#cddc39</color>
15
16 <!--ids-->
17 <item name="tabLayout" type="id"/>
18 <item name="viewPager" type="id"/>
19 <item name="viewContainer" type="id"/>
格式规范:

1. 编码方式统一用UTF-8. Android Studio默认已是UTF-8,只要不去改动它就可以了。

2. 缩进统一为4个空格,将Tab size设置为4则可以保证tab键按4个空格缩进。另外,不要勾选上Use tab character,可以保证切换到不同tab长度的环境时还能继续保持统一的4个空格的缩进样式。

3. 花括号不要单独一行,和它前面的代码同一行。而且,花括号与前面的代码之间用一个空格隔开。

public void method() { // Good } public void method(){ // Bad}  public void method(){ // Bad} 

4. 空格的使用

if、else、for、switch、while等逻辑关键字与后面的语句留一个空格隔开。

// Goodif (booleanVariable) {    // TODO while booleanVariable is true} else {    // TODO else}// Badif(booleanVariable) {    // TODO while booleanVariable is true}else {    // TODO else}

运算符两边各用一个空格隔开。

int result = a + b; //Good, = 和 + 两边各用一个空格隔开int result=a+b; //Bad,=和+两边没用空格隔开

方法的每个参数之间用一个空格隔开。

public void method(String param1, String param2); // Good,param1后面的逗号与String之间隔了一个空格method(param1, param2); // Good,方法调用时,param1后面的逗号与param2之间隔了一个空格method(param1,param2); // Bad,没有用一个空格隔开

5. 空行的使用

将逻辑相关的代码段用空行隔开,以提高可读性。空行也只空一行,不要空多行。在以下情况需用一个空行:

  • 两个方法之间
  • 方法内的两个逻辑段之间
  • 方法内的局部变量和方法的第一条逻辑语句之间
  • 常量和变量之间

6. 当一个表达式无法容纳在一行内时,可换行显示,另起的新行用8个空格缩进。

someMethod(longExpression1, longExpression2, longExpression3,          longExpression4, longExpression5);

7. 一行声明一个变量,不要一行声明多个变量,这样有利于写注释。

private String param1; // 参数1private String param2; // 参数2

8. 行宽设置为100,设置格式化时自动断行到行宽位置。

9. 使用快捷键进行代码自动格式化。

Windows:CTRL+ALT+L
Mac:OPTION+COMMAND+L

10. 一个方法最多不要超过40行代码。

11. 范围型的常量用枚举类定义,而不要直接用整型或字符,这样可以减少范围值的有效性检查。

// 用枚举类定义,Goodpublic enum CouponType {    // 现金券    @SerializedName("1")    CASH,    // 抵用券    @SerializedName("2")    DEBIT,    // 折扣券    @SerializedName("3")    DISCOUNT}// 用整型定义,Badpublic static final int TYPE_CASH = 1; // 现金券public static final int TYPE_DEBIT = 2; // 抵扣券public static final int TYPE_DISCOUNT = 3; // 折扣券

12. 文字大小的单位统一用sp,元素大小的单位统一用dp。

13. 应用中的字符串统一在strings.xml中定义,然后在代码和布局文件中引用。

14. 颜色值统一在colors.xml中定义,然后在代码和布局文件中引用。另外,不要在代码和布局文件中引用系统的颜色,除了透明。

 

注释规范

为了减少他人阅读你代码的痛苦值,请在关键地方做好注释。

1 类注释

每个类完成后应该有作者姓名和联系方式的注释,对自己的代码负责。

/** * <pre> *     author : Blankj *     e-mail : xxx@xx *     time   : 2017/03/07 *     desc   : xxxx描述 *     version: 1.0 * </pre> */public class WelcomeActivity {       ...}

具体可以在AS中自己配制,Settings → Editor → File and Code Templates → Includes → File Header,输入

/** * <pre> *     author : ${USER} *     e-mail : xxx@xx *     time   : ${YEAR}/${MONTH}/${DAY} *     desc   :  *     version: 1.0 * </pre> */

这样便可在每次新建类的时候自动加上该头注释。

2 方法注释

每一个成员方法(包括自定义成员方法、覆盖方法、属性方法)的方法头都必须做方法头注释,在方法前一行输入/** + 回车或者设置Fix doc comment(Settings → Keymap → Fix doc comment)快捷键,AS便会帮你生成模板,我们只需要补全参数即可,如下所示。

/** * bitmap转byteArr * * @param bitmap bitmap对象 * @param format 格式 * @return 字节数组 */public static byte[] bitmap2Bytes(Bitmap bitmap, CompressFormat format) {    if (bitmap == null) return null;    ByteArrayOutputStream baos = new ByteArrayOutputStream();    bitmap.compress(format, 100, baos);    return baos.toByteArray();}

3 块注释

块注释与其周围的代码在同一缩进级别。它们可以是/* ... */风格,也可以是// ...风格(//后最好带一个空格)。对于多行的/* ... */注释,后续行必须从*开始, 并且与前一行的*对齐。以下示例注释都是OK的。

/* * This is          // And so           /* Or you can * okay.            // is this.          * even do this. */ */

注释不要封闭在由星号或其它字符绘制的框架里。

Tip:在写多行注释时,如果你希望在必要时能重新换行(即注释像段落风格一样),那么使用/* ... */

4 其他一些注释

AS已帮你集成了一些注释模板,我们只需要直接使用即可,在代码中输入todofixme等这些注释模板,回车后便会出现如下注释

// TODO: 17/3/14 需要实现,但目前还未实现的功能的说明// FIXME: 17/3/14 需要修正,甚至代码是错误的,不能工作,需要修复的说明

总结:

1.开发规范是职业化的第一步

2.学会使用开发工具十分重要(Android Studio设置上需要提高)

3.代码不规范的话会影响本节拿A

2 0
原创粉丝点击