1.程式設計規範
1.1.Application Name: 項目應用名,命名規則簡單
1.2.Package Name:包名遵循“DNS反轉”約定,亦即将企業組織或公司的域名反轉後,在尾部附加上應用名稱。遵循此約定可以保證包名的唯一性,遵循MVC的命名原則。




2.設計架構

根據經驗,一個良好的架構設計可大緻分三層:
- 上層是Activity、Fragment、Views&Widget等視圖渲染和業務調用。
- 中層是針對業務的三方庫,以及主要邏輯實作,業務流程在這完成,此層還可以細分,不再贅述。
-
底層是業務無關的架構庫,用之四海而皆準,各類庫内高内聚,不同庫間低耦合
1)遵循原則:基本遵循MVC的設計模式,以及23種設計模式和六大原則
2)設計模式六大原則:
http://www.uml.org.cn/sjms/201211023.asp#1
3)23種設計模式:、
https://github.com/iluwatar/java-design-patterns
http://chjavach.iteye.com/category/111368?show_full=true

同款APP不同終端
App View層 :視圖&控制層,重視互動、體驗、布局、資源,作為上層快速實作視覺和界面,activity、fragment、layout、resource等在這裡。
App SDK:業務層,重視業務、邏輯、模型,作為中層因其界面無關性而快速支援同款App的不同終端或者UI層,全部業務邏輯在這裡實作,邏輯控制、資料解析和模型等在這實作。
Lite SDK :功能層,重視通用、性能、便捷,作為底層快速支撐不同App,由HTTP、ORM、IOC、Async、Base/Common等通用元件組成。
3.設計原則
總體:一個好的架構設計是基于業務需求的,脫離了具體業務談架構也沒多大的意義,把一些通用的功能子產品抽象出來,作為服務提供給開發人員使用。
1) 功能單一的。也就是設計法則中的單一職責。單一職責原則适用于類和方法的設計,同樣也适用于架構的設計。
2) 良好的封裝以及簡單地 API 調用。架構作為服務提供者,很多情況下是為了提升開發效率,對于一個相對穩定的第三方架構,開發者是不會關注于其具體實作的。
3) 良好的擴充性。也就是開閉原則,一個設計良好的子產品,應該在不被修改的前提下被擴充。我們擴充開來,一個設計良好的架構,應該在具體代碼業務不被修改的前提下進行修改。
4) 低耦合高内聚。其實就是對前面1 2 3 點的總結。
5) 穩定性高于一切。
6) 測試覆寫率,盡量保證每一個功能點都被覆寫。
7) 異常機制。就像前面所說的,穩定性高于一切。穩定性不光得益于良好的設計,還需要良好的異常機制的設計。對異常進行處理,不光适用于架構的設計,也适用于App 的設計。抛出異常來說明異常狀況,但是不要強迫用戶端使用異常來控制流。
8) 從普通使用者的角度去考慮抽象,技師增加一定的代碼量,這也是值得的。
9) 起一個萌一點的名字,最好能夠萌到看一眼就知道功能。這包括類的設計、方法的設計以及參數清單的命名。
10) 需要開發者配置的參數盡量對象化。比如一個方法參數可接受三種 int 型的值(1 , 2, 3),用以表示不同的意思。那麼盡可能的建立一個 State 類,裡面有三個靜态常量 STATE_ONE ,STATE_TWO ,STATE_THREE 。
11) 對參數進行校驗。接收到參數之後,盡可能的對每一個參數進行非法驗證,比如非空判斷、參數無意義的判斷等,用異常的方式告知開發者需要傳遞正确的參數。
12) 盡可能簡單地方法參數。或者說盡可能多的重載方法。但是需要注意模棱兩可的重載。
13) 如12所說,延展說來就是盡量避免使用長參數清單。長參數清單更容易出差,而且對于維護以及編譯、運作并不友好。如有必要,建立參數助手類(參考11)。
14) 對可能會犯的錯誤進行預計,要用發展的思維來設計架構,這一點有點跟11意思一樣。
15) 版本相容性。保證架構更新之後,對于老版本的支援。
16) 架構 API 生命周期的管理。具體的手段可以是設計 API 級别,比如内部、測試、開發、穩定等等。
4.常用架構:[其實就是jar包庫,為業務服務Architecture is About Intent, not Frameworks]
4.1.Http/ REST 請求網絡通信 :Volley/okhttp/android-async-http/ Retrofit/ RoboSpice/ http-common/ Retrofit 2
4.2.圖檔異步加載:ImageLoader/Glide/Fresco/Picasso/ CommonLib/UIL
4.3.資料解析:GSON/FastJSON/ Jackson/JSON快速生成實體Java類:Jsonschema2pojo/AndroidStudio插件 GsonFormat
4.4.UI效果 :PullRefreshListView
4.5.檢查記憶體洩露 leakcanary
4.6.View 注解,控件注入和事件綁定:ButterKnife(配合 ButterKnife Zelezny 有奇效)
4.7.各種各樣的彈窗:DialogPlus
4.8.代替 Toast 的消息提示:AppMsg
4.9.事件總線EventBus/ otto【為了解耦】
4.10.依賴注入Dagger/ RoboGuice/ ButterKnife/ Dagger2
【1)使用類似Guice或者RoboGuice等framework injection他們能夠簡化代碼。但是mapped pages會長時間的被保留在RAM中,讓記憶體消耗更嚴重】
【2)dagger的注解會在編譯的時候生成代碼,是以不會産生Guice等依賴runtime注解的記憶體問題,而且dagger2似乎是google自己fork dagger然後經一步改進了的】
4.11.資料庫ActiveAndroid /ormlite /greendao/dbflow
【簡化對于SQlite操作的對象關系映射架構OrmLite:】
4.12.響應式程式設計RxJava/ RxAndroid
4.13.日志輸出Logger/ KLog/ LogUtils/Timber/hugo
4.14.崩潰統計平台Crittercism/ Crashlytics
4.15. 版本相容:官方 support 全家桶
4.16. Java8:Retrolambda/Lightweight-Stream-API
4.17. 快速開發合集:Afinal/xUtils/Android Annotations/ Square 全家桶/ Jake大神的各種庫,Facebook的Android庫,support庫
4.18.常用工具類:https://github.com/l123456789jy/Lazy
4.19.遊戲開發:https://github.com/lfkdsk/JustWeEngine
4.20.動畫:NineOldAndroids
4.21.單元測試:https://github.com/robolectric/robolectric
4.22. 切圖、圖檔壓縮:cutterman 這個Photoshop的插件值得擁有
4.23. PNG優化工具: windows : PNGGauntlet/Mac: ImageOptim/web app: https://tinypng.com/ 能極大減小圖檔體積,并保障圖檔品質
4.24.UI:Support Lib + Design Lib + 各種開源 View 控件。
【1】Tab滑頁 、廣告頁 的 PagerSlidingTabStrip 或 ViewPagerIndicator +ViewPager
【2】檢視圖檔的 PhotoView
【3】選擇時間日期 省市地域的 各種改版 WheelView
【4】support包裡的 SwipeRefreshLayout, DrawerLayout,新出的 recyclerview cardview 等 ,還有toolbar,design
【5】Listview 加動效的listviewanimations
【6】提高操作性的左滑後退 SwipeBackLayout
【7】多标簽流的 flowlayout;
【8】 material design的設計和控件,還有一些牛人實作的ui效果
github搜尋awesome android
更多參考【包括一些開源項目】:https://www.zhihu.com/question/37160415
https://www.zhihu.com/question/27667028
https://www.zhihu.com/question/34452706
Trinea 彙總的開源項目,類目非常全面: https://github.com/cesards/AndroidElementals
國外開發者彙總的開源項目: https://github.com/Trinea/android-open-project
http://blog.daimajia.com/android-library-collection/
http://litesuits.com/
5.架構之餘
其實對于初學者而言:學習四大元件,研究ActivityManager,PackgeMag-
不使用開源的控件嘗試使用Canvas 或者OpenGL自繪,閱讀一下Dalvik的源代碼了解ClassLoader和記憶體回收,看看整個Android的核心架構Binder,直接使用Android提供的HttpClient,HttpConnection網絡請求庫,自己動手寫寫SQL查詢語句。
6.三大模式
https://www.zhihu.com/question/19729778
http://v.youku.com/v_show/id_XNzQzNDkzMjUy.html
https://www.zhihu.com/question/20148405
延伸閱讀:
怎麼做好網際網路公司的技術團隊負責人?
https://www.zhihu.com/question/39421456/answer/81233608?from=profile_answer_card
https://www.zhihu.com/question/27163593/answer/42703123
https://www.zhihu.com/question/27163593