天天看點

産品APP架構說明文檔

目錄介紹

  • 1.關于項目架構的技術堆棧
  • 1.1 該項目App整體架構 
    • 1.1.1 目前項目[準備中]使用的架構
    • 1.1.2 市面常見的架構
    • 1.1.3 MVP架構使用心得
  • 1.2 主要的技術要點 
    • 1.2.1 視訊播放技術
    • 1.2.2 音頻播放技術
    • 1.2.3 複雜頁面展示
    • 1.2.4 狀态切換
    • 1.2.5 緩存
    • 1.2.6 音視訊檔案下載下傳技術
  • 1.3 主要的開源架構介紹 
    • 1.3.1 網絡請求架構
    • 1.3.2 注解架構
    • 1.3.3 圖檔加載架構
    • 1.3.4 6.0之後權限申請架構
    • 1.3.5 事件總線架構
    • 1.3.6 記憶體洩漏測試架構
    • 1.3.7 bug管理
  • 1.4 常用的第三方庫或插件說明與選擇 
    • 1.4.1 上拉加載更多與下拉重新整理
    • 1.4.2 輪播圖
    • 1.4.3 關于頁面重新整理狀态的管理
    • 1.4.4 常見的彈窗,吐司
    • 1.4.5 常用工具類庫
    • 1.4.6 阿裡編碼規則插件
    • 1.4.7 測試部分
  • 2.項目中的代碼規範
  • 2.1 關于包名,類名,方法名,變量等命名規則 
    • 2.1.1 包名與分包規則
    • 2.1.2 類名命名,類名規範,以及類名注釋統一
    • 2.1.3 方法名命名,規範以及注釋
    • 2.1.4 變量,常量命名規範及注意要點
  • 2.2 日志列印 
    • 2.2.1 日志統一列印,測試打開,上線關閉
  • 2.3 UI相關說明,資源檔案string,color
  • 2.4 代碼布局規範
  • 3.項目中的常見業務分析
  • 3.1 版本更新分析
  • 4.關于代碼解耦和抽離思索
  • 4.1 業務代碼避免耦合度過高
  • 4.2 如何解耦
  • 4.3 接口的分離
  • 5.其他問題說明
  • 5.1 版本更新情況
  • 5.2 參考連結
  • 5.2 個人部落格

1.關于項目架構的技術堆棧

1.1 該項目App整體架構

  • 1.1.1 目前項目[準備中]使用的架構
  • 準備使用架構是MVP,Rx+Retrofit是網絡請求架構,Vlayout是阿裡出的處理複雜UI界面架構,ijkplayer是bilibili公司出的音視訊播放架構
  • MVP作為MVC的演化,解決了MVC不少的缺點,對于Android來說,MVP的model層相對于MVC是一樣的,而activity和fragment不再是controller層,而是純粹的view層,所有關于使用者事件的轉發全部交由presenter層處理。
  • 1.1.2 市面常見的架構
  • 目前存在常見架構有MVC,MVP,MVVM等,具體可以看我的印象筆記之架構分析文檔
  • 1.1.3 演變後的心得
  • MVP架構由3部分組成:View負責顯示,Presenter負責邏輯處理,Model提供資料。在MVP模式裡通常包含3個要素(加上View interface是4個): 
    • View:負責繪制UI元素、與使用者進行互動(在Android中展現為Activity)
    • Model:負責存儲、檢索、操縱資料(有時也實作一個Model interface用來降低耦合)
    • Presenter:作為View與Model互動的中間紐帶,處理與使用者互動的負責邏輯。
    • View interface:需要View實作的接口,View通過View interface與Presenter進行互動,降低耦合,友善進行單元測試
  • 感覺最大的差别差别就是view層和model層不再互相可知,完全的解耦,取而代之的presenter層充當了橋梁的作用,用于操作view層發出的事件傳遞到presenter層中,presenter層去操作model層,并且将資料傳回給view層,整個過程中view層和model層完全沒有聯系,雖然view層和model層解耦了,但是view層和presenter層不是耦合在一起了嗎?其實不是的,對于view層和presenter層的通信,我們是可以通過接口實作的,具體的意思就是說我們的activity,fragment可以去實作實作定義好的接口,而在對應的presenter中通過接口調用方法。解決了MVC模式中一個activity代碼量太大問題,維護難的問題。

1.2 主要的技術要點

  • 1.2.1 視訊播放技術
  • 具體可以參考我的視訊播放器案例,記錄視訊播放中各個要點和代碼邏輯思路,以及記錄bug出現與解決辦法,持續更新中。連結位址:http://www.jcodecraeer.com/plus/view.php?aid=9147
  • 1.2.2 音頻播放技術
  • 具體可以參考我的音頻播放器項目與筆記,記錄音頻的各種知識要點。關于音視訊,涉及到編碼解碼的問題,比較複雜,比較複雜,連結位址:http://blog.csdn.net/m0_37700275/article/details/79256959
  • 1.2.3 複雜頁面展示
  • 對于複雜頁面,由于需求會變化,是以初期選擇一定要支援拓展性強,功能強大。避免業務變化導緻重新寫代碼,或者頁面展示了,但是會出現頁面卡頓,滑動沖突,或者代碼内部混亂不便于維護。是以可以選擇阿裡Vlayout架構。關于如何使用以及案例展示,可以參考我的部落格:http://blog.csdn.net/m0_37700275/article/details/79006266
  • 對應的如何使用的項目有:https://github.com/yangchong211/YCVideoPlayer
  • 對于一般list頁面,一般不會太複雜。但是可能會有多種狀态,比如重新整理中,展示頁面成功,加載資料失敗,加載資料為空多種狀态,且支援上拉加載下拉重新整理。ok,則剛好可以使用之前封裝庫,YCRefreshView。項目使用和案例位址:https://github.com/yangchong211/YCRefreshView
  • 1.2.4 狀态切換
  • 對于Android加載頁面來說,有些項目将加載狀态寫在Base類中,如果是不繼承那麼會出現問題。如果寫在布局中,然後根據資料通路情況展示或者隐藏不同狀态的布局,也會比較複雜,比較淩亂。
  • 後來,參考大神思路,讓View狀态的切換和Activity,fragment徹底分離開,必須把這些狀态View都封裝到一個管理類中,然後暴露出幾個方法來實作View之間的切換。 在不同的項目中可以需要的View也不一樣,是以考慮把管理類設計成builder模式來自由的添加需要的狀态View。關于項目的使用可以參考我的封裝庫案例。位址是:https://github.com/yangchong211/YCStateLayout
  • 1.2.5 緩存
  • 1.2.6 音視訊檔案下載下傳技術

1.3 主要的開源架構介紹

  • 1.3.1 網絡請求架構
  • Retrofit 是 Square 公司出品的預設基于 OkHttp 封裝的一套 RESTful 網絡請求架構。
  • Retrofit 的封裝可以說是很強大,使用 Retrofit + OkHttp + RxJava + Dagger2可以說是目前比較潮的一套架構。
  • 1.3.2 注解架構
  • butterknife,專注于Android系統的View注入架構
  • 1.3.3 圖檔加載架構
  • 谷歌原生glide,功能強大,使用方法以及源碼分析可以參考郭霖大神部落格:http://blog.csdn.net/guolin_blog/article/details/53759439
  • squareup公司出品的picasso也不錯
  • 圖檔加載在項目中許多地方都會用到,建議将所有的加載圖檔的方法整理成工具類,然後通過類靜态調用方法,可以統一管理。那麼使用的使用,就可以一行代碼搞定,簡潔代碼。便于閱讀與定位!
  • 1.3.4 6.0之後權限申請架構
  • 對于權限管理,可以直接使用谷歌原生權限架構,具體使用可以參考業餘項目:https://github.com/yangchong211/YCAudioPlayer
  • 1.3.5 事件總線架構
  • 關于activity,fragment,service等不同元件直接通信,可以使用事件總線架構。關于事件總線EventBus使用以及源碼分析,可以參考我的部落格:https://www.jianshu.com/p/4cec5d7233e8
  • 1.3.6 記憶體洩漏測試架構
  • 使用squareup公司出品的leakcanary架構,項目測試階段不僅要修改崩潰bug,也要避免記憶體洩漏問題。關于常見的記憶體洩漏場景與解決辦法,可以參考我的部落格Leakcanary檢測記憶體洩漏彙總:https://www.jianshu.com/p/c345f63ec8e5
  • 1.3.7 bug管理
  • 可以使用騰訊出品的bugly,內建第三方bug管理平台,可以有效收集廣大使用者APP使用崩潰情況。

1.4 常用的第三方庫說明與選擇

  • 注意:關于第三方庫選擇,隻選擇合适的,不選擇代碼量最多的庫。比如有些庫,代碼很多,功能很強大,但是你隻是用到一個很小的功能。倒不如選擇輕量級的庫。
  • 1.4.1 上拉加載更多與下拉重新整理
  • 可以選擇王浩大神BGA重新整理,便于拓展
  • 也可以使用封裝庫YCRefreshView,支援該功能,也支援多種狀态切換
  • 1.4.2 輪播圖
  • 可以用banner開源庫,輪播圖這塊star最多,功能也很強大。代碼量大,支援樣式很多……
  • 如果輪播圖使用範圍很小,且要求樣式單一,可以使用自己封裝庫YCBanner。
  • 1.4.3 關于頁面重新整理狀态的管理
  • 可以使用封裝庫YCStateLayout
  • 1.4.4 常見的彈窗,吐司
  • 待更新
  • 1.4.5 常用工具類庫
  • 可以使用Blankj[布蘭柯基]的開源工具庫,GitHub頗受好評,一鍵內建與使用
  • 1.4.6 其他庫
  • 待更新

2.項目中的代碼規範【重要】

2.1 關于包名,類名,方法名,變量等命名規則

  • 2.1.1 包名與分包規則
  • 包名:com.zero2ipo.sqdx
  • 分包的結構如下所示
  • 關于分包的規範以及注意事項,可以參考我整理的Android編碼規範一文:http://www.jcodecraeer.com/plus/view.php?aid=9337 
    産品APP架構說明文檔
  • 2.1.2 類名命名,類名規範,以及類名注釋
  • 2.1.3 方法名命名,規範以及注釋
  • 2.1.4 變量,常量命名規範及注意要點

2.1.2 編碼規範文檔

  • 具體這一塊命名規則可以直接參考另外一篇筆記:Android編碼規範

2.2 日志列印

  • 2.2.1 日志統一列印,測試打開,上線關閉

2.3 UI相關說明,資源檔案string,color

  • 2.3.1 對于UI中的字型顔色。可以參看新芽昊哥的做法,統一備注資源color屬性。比如:
  • 看到網上好多案例,發現對于這個color資源檔案,定義不規範而且有點雜亂,引用的使用會有點苦惱。 
    産品APP架構說明文檔
  • 2.3.2 關于這塊,個人感覺非常不錯,可以參考網易雲音樂Android 3.0視覺設計規範文檔:http://www.25xt.com/appdesign/12385.html

3.項目中的常見業務分析

3.1 版本更新分析

4.關于代碼解耦和抽離思索

4.1 業務代碼避免耦合度過高

  • 待更新

4.2 如何解耦

4.3 接口的分離

5.其他問題說明

5.1 版本更新情況

  • v1.0.0 2018年1月17日
  • v1.0.1 2018年2月8日

5.2 參考連結

  • 安居客Android項目架構演進:http://blog.csdn.net/baron_leizhang/article/details/58071773
  • 為什麼要重視程式的架構設計:http://blog.csdn.net/johnny901114/article/details/54783106
  • 基于MVP建立适合自己的架構:https://www.jianshu.com/p/2ca7767df08c
  • 劉望舒大神,Android架構(一)MVP全解析:http://blog.csdn.net/itachi85/article/details/52293236

5.2 個人部落格

  • github: https://github.com/yangchong211
  • 知乎: https://www.zhihu.com/people/yang-chong-69-24/pins/posts
  • 簡書: http://www.jianshu.com/u/b7b2c6ed9284
  • csdn: http://my.csdn.net/m0_37700275
  • 喜馬拉雅聽書: http://www.ximalaya.com/zhubo/71989305/
  • 泡在網上的日子:http://www.jcodecraeer.com/member/content_list.php?channelid=1
  • 郵箱:[email protected]
  • 阿裡雲部落格:https://yq.aliyun.com/users/article?spm=5176.100239.headeruserinfo.3.dT4bcV

版權聲明:本文為部落客原創文章,轉載請注明出處 https://blog.csdn.net/m0_37700275/article/details/79296188

繼續閱讀