本文出自: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();下面是一些建议:
变量(variables):采用Pascal命名法,建议采用有意义的命名如:firstName,lastName;
01 |
public 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 |
} |
01 |
public 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): 全部大写,采用下划线命名法.如下:
1 |
public static final int MAX_ITEMS= 10 ; |
2 |
public static final String TAG = User. class .getSimpleName(); |
资源文件命名(resources):采用下划线命名法,全部小写,针对不同资源,建议用下面的命名方法;
说明 | 命名范例 |
---|---|
图标:建议格式 ic_xxx; | ic_appicon.png |
背景:建议格式 bg_xxx; | bg_normal_button_default.xml,bg_normal_button_press.xml |
说明 | 命名范例 |
---|---|
Activity布局文件 | activity_main.xml |
Fragment布局文件 | fragment_main.xml |
局部布局View文件 | view_main_header.xml,view_main_bottom.xml |
自定义提示对话框 | dialog_alert.xml |
列表项等 | fragment_user_list_item.xml |
说明 | 命名范例 |
---|---|
淡入 | main_button_fade_in.xml |
淡出 | main_button_fade_out.xml |
从下方推入 | button_push_down_in.xml |
从下方推出 | main_button_push_down_out.xml |
说明 | 命名范例 |
---|---|
主界面菜单 | main_activity.xml |
Fragment界面菜单 | user_fragment.xml |
1、 ids资源,主要存放是界面控件的id值,用下划线小写命名法,前缀方式:前缀_模块_功能_说明,常用界面控件命名如下:
说明 | 命名范例 |
---|---|
布局和子控件(ViewGroup,自定义View) | view_main_topnav |
TextView | tv_main_title |
Button | btn_user_add |
ImageButton | imgbtn_user_del |
ImageView | img_thumb |
CheckBox | cb_sex |
RadioButton | rbtn_answer |
EditText | et_username |
ToggleButton | toggle_funtion |
ProgressBar | pb_download |
SeekBar | sb_progress |
ProgressBar | pb_download |
VideoView | vv_course |
WebView | wv_download |
RantingBar | rb_download |
Spinner | sp_cities |
ScollView | sv_main |
TextSwitch | sp_cities |
ListView/ExpandListView/RecyclerView | lv_cities |
MapView | mv_location |
2、strings/arrays/dimens资源,用下划线小写命名法,不加任何前后缀,格式,模块_功能_说明
3、attrs/colors/ids的属性和名称使用 Camel命名法; styles的属性使用Camel命名法,名称使用Pascal命名法;如下面:
01 |
|
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 |
|
12 |
< color name = "colorPrimary" >#009688 color > |
13 |
< color name = "colorPrimaryDark" >#00796b color > |
14 |
< color name = "colorAccent" >#cddc39 color > |
15 |
|
16 |
|
17 |
< item name = "tabLayout" type = "id" /> |
18 |
< item name = "viewPager" type = "id" /> |
19 |
< item name = "viewContainer" type = "id" /> |
public void method() { // Good
}
public void method()
{ // Bad
}
public void method(){ // Bad
}
// Good if (booleanVariable) { // TODO while booleanVariable is true } else { // TODO else } // Bad if(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,没有用一个空格隔开
someMethod(longExpression1, longExpression2, longExpression3, longExpression4, longExpression5);
private String param1; // 参数1 private String param2; // 参数2
// 用枚举类定义,Good public enum CouponType { // 现金券 @SerializedName("1") CASH, // 抵用券 @SerializedName("2") DEBIT, // 折扣券 @SerializedName("3") DISCOUNT } // 用整型定义,Bad public static final int TYPE_CASH = 1; // 现金券 public static final int TYPE_DEBIT = 2; // 抵扣券 public static final int TYPE_DISCOUNT = 3; // 折扣券
注释规范
为了减少他人阅读你代码的痛苦值,请在关键地方做好注释。
每个类完成后应该有作者姓名和联系方式的注释,对自己的代码负责。
/**
*
* author : Blankj
* e-mail : xxx@xx
* time : 2017/03/07
* desc : xxxx描述
* version: 1.0
*
*/
public class WelcomeActivity {
...
}
具体可以在AS中自己配制,Settings → Editor → File and Code Templates → Includes → File Header,输入
/**
*
* author : ${USER}
* e-mail : xxx@xx
* time : ${YEAR}/${MONTH}/${DAY}
* desc :
* version: 1.0
*
*/
这样便可在每次新建类的时候自动加上该头注释。
每一个成员方法(包括自定义成员方法、覆盖方法、属性方法)的方法头都必须做方法头注释,在方法前一行输入/** + 回车或者设置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();
}
块注释与其周围的代码在同一缩进级别。它们可以是/* ... */
风格,也可以是// ...
风格(//
后最好带一个空格)。对于多行的/* ... */
注释,后续行必须从*
开始, 并且与前一行的*
对齐。以下示例注释都是OK的。
/*
* This is // And so /* Or you can
* okay. // is this. * even do this. */
*/
注释不要封闭在由星号或其它字符绘制的框架里。
Tip:在写多行注释时,如果你希望在必要时能重新换行(即注释像段落风格一样),那么使用
/* ... */
。
AS已帮你集成了一些注释模板,我们只需要直接使用即可,在代码中输入todo
、fixme
等这些注释模板,回车后便会出现如下注释
// TODO: 17/3/14 需要实现,但目前还未实现的功能的说明
// FIXME: 17/3/14 需要修正,甚至代码是错误的,不能工作,需要修复的说明
总结:
1.开发规范是职业化的第一步
2.学会使用开发工具十分重要(Android Studio设置上需要提高)
3.代码不规范的话会影响本节拿A