前言
良好的規(guī)范朵栖,就像軍隊(duì)紀(jì)律陨溅。
所謂绍在,沒有規(guī)矩,不成方圓件舵。
在編程中也是一樣的,良好的代碼規(guī)范總是能給人賞心悅目合武。哪怕讀不懂代碼稼跳,或者寫的代碼不夠優(yōu)秀,但給保持一個標(biāo)準(zhǔn)的規(guī)范也算一種態(tài)度吃沪。就像書面整潔一樣汤善,在高考中還能加分呢。
下面票彪,我們開始修煉吧~
1红淡、縮進(jìn)、換行:
縮進(jìn) 保持 ==4== 個字符降铸。
-
換行 有些代碼句(語句在旱、條件表達(dá)式、方法參數(shù))太長桶蝎,可選擇性換行。我們可規(guī)定為 ==>150== 字符換行谅畅。
- 條件表達(dá)式:以操作符作為換行的開頭登渣。如果有多行,則每換一行毡泻,比上一行條件表達(dá)式的首字符增加縮進(jìn) ==2== 字符胜茧,成階梯式,清晰牙捉。低優(yōu)先級操作符處開始換行為宜竹揍;信息分組處換行。 即:
if (isIgnoreRules && hasChangedContent() || mOldCount < mNewCount) { // TO-DO }
- 方法參數(shù):
public static void putData(int newsId, String newsTitle, String newsContent, String from, String to) { // TO-DO }
- {}的換行邪铲,特別注意
try-catch-finally
:
public void queryFromSQLite() { try { // TO-DO } catch (Exception e) { // cautch excetpion } finally { // release } }
2 芬位、條件+循環(huán),避免多層嵌套:
- 長代碼+多層嵌套带到,在程序塊}后加注釋標(biāo)記昧碉,便于閱讀。
- 一個方法里嵌套最好不要超過3層, ==最優(yōu)2層== 被饿!
如:public void caculate() { if (!isNeedReCaculate) { return; } if (null != mData) { Object obj; for (int i = 0, size = mData.size(); i < size; i++) { obj = mData.get(i); if (null == obj) { continue; } ... } // # End of for } // # End of (null != mData) }
3四康、資源規(guī)范
-
colors.xml:
忌寫:<resources> <color name="button_foreground">#FFFFFF</color> <color name="button_background">#2A91BD</color> <color name="comment_background_inactive">#5F5F5F</color> <color name="comment_background_active">#939393</color> <color name="comment_foreground">#FFFFFF</color> <color name="comment_foreground_important">#FF9D2F</color> ... <resources>
可重用:
<resources> <!-- grayscale --> <color name="white" >#FFFFFF</color> <color name="gray_light">#DBDBDB</color> <color name="gray" >#939393</color> <color name="gray_dark" >#5F5F5F</color> <color name="black" >#323232</color> <!-- basic colors --> <color name="green">#27D34D</color> <color name="blue">#2A91BD</color> <color name="orange">#FF9D2F</color> <color name="red">#FF432F</color> </resources>
string.xml:
-
layout.xml:
- id命名模式為: ==view縮寫模塊名邏輯名==,比如 btn_contact_search狭握。同時闪金,java中聲明對應(yīng)的view的命名規(guī)則與之反向,即 ==邏輯名_模塊名_view縮寫==论颅,比如 mSearchContactBtn哎垦。再者,這樣有一個好處——容易對應(yīng)恃疯,
如view的聲明:
Button mSearchContactBtn = findViewById(R.id.btn_contact_search);
當(dāng)然漏设,我個人更喜歡這種格式:
==1. view的id命名:{模塊名}{邏輯名}{view的縮寫}==
==2. view在java中命名:m{View的縮寫}{模塊名}{邏輯名}==
個人覺得這樣更好,比如當(dāng)搜索某個按鈕時今妄,你只需鍵入mBtn
然后郑口,IDE就會自動補(bǔ)全提示所有的btn變量。Button mBtnSearchContact = findViewById(R.id.contact_search_btn);
- id命名模式為: ==view縮寫模塊名邏輯名==,比如 btn_contact_search狭握。同時闪金,java中聲明對應(yīng)的view的命名規(guī)則與之反向,即 ==邏輯名_模塊名_view縮寫==论颅,比如 mSearchContactBtn哎垦。再者,這樣有一個好處——容易對應(yīng)恃疯,
4盾鳞、 分包管理
參考Google I/O 2015的代碼結(jié)構(gòu)犬性,按功能分包具體可以這樣做:
src └─com └─domain └─app │ AppApplication.java 定義Application類 │ Config.java 定義配置數(shù)據(jù)(常量) │ ├─framework │ 定義interface以及相關(guān)基類 │ ├─io │ 數(shù)據(jù)定義(model)、數(shù)據(jù)操作(比如json解析雁仲,但不包括db操作) │ ├─model │ 定義model(數(shù)據(jù)結(jié)構(gòu)以及getter/setter仔夺、compareTo、equals等等攒砖,不含復(fù)雜操作) │ 以及modelHelper(提供便于操作model的api) │ ├─provider │ 實(shí)現(xiàn)ContentProvider缸兔,及其依賴的db操作 │ ├─receiver │ 實(shí)現(xiàn)Receiver │ ├─service │ 實(shí)現(xiàn)Service(比如IntentService),用于在獨(dú)立線程中異步do stuff │ ├─ui │ 實(shí)現(xiàn)BaseActivity吹艇,以及自定義view和widget惰蜜,相關(guān)的Adapter也放這里 │ ├─util │ 實(shí)現(xiàn)工具類,提供靜態(tài)方法 │ ├─feature1 │ Item.java 定義model │ ItemHelper.java 實(shí)現(xiàn)modelHelper │ feature1Activity.java 定義UI │ feature1DAO.java 私有db操作 │ feature1Utils.java 私有工具函數(shù) │ ...其它私有class │ ├─...其它feature
另外受神,google的sample~iosched:
java └─com └─google └─samples └─apps └─iosched │ AppApplication.java 定義Application類 │ Config.java 定義配置數(shù)據(jù)(常量) │ ├─about │ AboutActivity.java │ ├─appwidget │ ScheduleWidgetProvider.java │ ScheduleWidgetRemoteViewsService.java │ ├─debug │ │ DebugAction.java │ │ DebugActivity.java │ │ DebugFragment.java │ │ │ └─actions │ DisplayUserDataDebugAction.java │ ForceAppDataSyncNowAction.java │ ForceSyncNowAction.java │ ... │ ├─explore │ │ ExploreIOActivity.java │ │ ExploreIOFragment.java │ │ ExploreModel.java │ │ ... │ │ │ └─data │ ItemGroup.java │ LiveStreamData.java │ MessageData.java │ ... │ ├─feedback │ FeedbackApiHelper.java │ FeedbackConstants.java │ FeedbackHelper.java │ ... │ ├─framework │ FragmentListener.java │ LoaderIdlingResource.java │ Model.java │ ...定義interface并實(shí)現(xiàn) │ ├─gcm │ │ GCMCommand.java │ │ GCMIntentService.java │ │ GCMRedirectedBroadcastReceiver.java │ │ ... │ │ │ └─command │ AnnouncementCommand.java │ NotificationCommand.java │ SyncCommand.java │ ... │ ├─io │ │ BlocksHandler.java │ │ HandlerException.java │ │ HashtagsHandler.java │ │ ...處理model │ │ │ ├─map │ │ └─model │ │ MapData.java │ │ Marker.java │ │ Tile.java │ │ │ └─model │ Block.java │ DataManifest.java │ Hashtag.java │ ... │ ├─map │ │ InlineInfoFragment.java │ │ MapActivity.java │ │ MapFragment.java │ │ ... │ │ │ └─util │ CachedTileProvider.java │ MarkerLoadingTask.java │ MarkerModel.java │ ... │ ├─model │ ScheduleHelper.java │ ScheduleItem.java │ ScheduleItemHelper.java │ ...定義model以及實(shí)現(xiàn)model相關(guān)操作 │ ├─myschedule │ MyScheduleActivity.java │ MyScheduleAdapter.java │ MyScheduleFragment.java │ ... │ ├─provider │ ScheduleContract.java │ ScheduleContractHelper.java │ ScheduleDatabase.java │ ...實(shí)現(xiàn)ContentProvider │ (也在此處定義provider依賴的其它類抛猖,比如db操作) │ ├─receiver │ SessionAlarmReceiver.java │ ├─service │ DataBootstrapService.java │ SessionAlarmService.java │ SessionCalendarService.java │ ├─session │ SessionDetailActivity.java │ SessionDetailConstants.java │ SessionDetailFragment.java │ ... │ ├─settings │ ConfMessageCardUtils.java │ SettingsActivity.java │ SettingsUtils.java │ ├─social │ SocialActivity.java │ SocialFragment.java │ SocialModel.java │ ├─sync │ │ ConferenceDataHandler.java │ │ RemoteConferenceDataFetcher.java │ │ SyncAdapter.java │ │ ... │ │ │ └─userdata │ │ AbstractUserDataSyncHelper.java │ │ OnSuccessListener.java │ │ UserAction.java │ │ ... │ │ │ ├─gms │ │ DriveHelper.java │ │ GMSUserDataSyncHelper.java │ │ │ └─util │ UserActionHelper.java │ UserDataHelper.java │ ├─ui │ │ BaseActivity.java │ │ CheckableLinearLayout.java │ │ SearchActivity.java │ │ ...BaseActivity以及自定義UI組件 │ │ │ └─widget │ AspectRatioView.java │ BakedBezierInterpolator.java │ BezelImageView.java │ ...自定義小UI控件 │ ├─util │ AboutUtils.java │ AccountUtils.java │ AnalyticsHelper.java │ ...工具類,提供靜態(tài)方法 │ ├─videolibrary │ VideoLibraryActivity.java │ VideoLibraryFilteredActivity.java │ VideoLibraryFilteredFragment.java │ ... │ └─welcome AccountFragment.java AttendingFragment.java ConductFragment.java ...
最后鼻听,
參考:
——————創(chuàng)建于 2017/04/20 by hsong
——————更新于 2021/03/22 by hsong