Android開發規範
爲了規範開發,減小重構成本,總結編碼規範如下,分享給大家,提供個參考
命名規範
關於MVP
對於MVP模式,由於需要實現衆多的接口,導致代碼臃腫,故決定採取Contract模式,即將接口統一放置在同一類中。
e.g.
特別注意:爲了減少開發成本,請特別注意Contract內部類的命名,如確定此方案,則務必不要命名爲NewsModel等形式
public interface NewsContract{ interface Model{ } interface Presenter{ } interface View{ } }
對應實現類:
特別注意:爲了減少開發成本,請特別注意Presenter內部接口的命名,如確定此方案,則務必不要命名爲NewsPresenterImpl等形式
NewsPresenter
public class NewsPresenter implments NewsContract.Presenter{ }
NewsModel
public class NewsModel implments NewsContract.Model{ }
特別注意:明確區分Model與Entity 所有實體類放入Entity包,業務邏輯處理放入Model包
關於成員與變量
- 爲了區分成員與local變量,採取與Android源碼一致規範,即成員前加m。
- 靜態常量命名需大寫,且爲final。
e.g.
public class Goods{ public static final String GOODS = "goods"; private String mGoodsName; private int mId; public class Goods(String goodsName,int id){ mGoodsName = goodsName; mId = id; } }
需要用作類似key判斷的應寫在靜態常量裏,切勿出現以下情況:
//這是錯誤的範例,不要學!!!
intent.getStringExtra("key");
if(message.what == 0x123){
}
webView.loadUrl("http://baidu.com");
規範寫法如下:
static final String KEY = "key";
intent.getStringExtra(KEY);
static final int FLAG = 0x123;
if(message.what == FLAG){
}
static final String HOST = "http://baidu.com";
webView.loadUrl(Constant.HOST);
關於Activity
對於需要參數的Activity啓動,統一提供靜態方法,可以明確地通知調用者需要的參數,避免漏參情況。
特別注意:爲了減少開發成本,請注意方法命名,如確定此方案,則務必不要命名爲startWebViewActivity()等形式
e.g.
public static void startActivity(Context context, String title, String url) { Intent intent = new Intent(context, WebViewActivity.class); intent.putExtra(WebViewActivity.EXTRA_URL, url); intent.putExtra(WebViewActivity.EXTRA_TITLE_TEXT, title); context.startActivity(intent); }
關於fragment
統一提供newInstance()方法返回實例.
特別注意:爲了減少開發成本,請注意方法命名,如確定此方案,則務必不要命名爲newPlaceFragment()等形式
e.g.
public static PlaceholderFragment newInstance(int sectionNumber){ PlaceholderFragment fragment = new PlaceholderFragment(); Bundle args = new Bundle(); args.putInt(ARG_SECTION_NUMBER, sectionNumber); fragment.setArguments(args); return fragment; }
關於佈局文件
對於xml文件命名,前綴有layout、view、item、activity、fragment
對於id命名,有如下映射表,以此類推:
控件名稱 id命名 TextView tv_sample RecyclerView rv_sample LinearLayout ll_sample RelativeLayout rl_sample