前言
我們移動開發程序員應該首先明白一個要點,能夠學習的東西可以區分為『知識』和『技能』。
知識,就是你知道就知道、不知道就不知道的東西,比如『計算機系統中一個字節是包含8個bit』,你知道了之后就算掌握了。
技能,是需要練習的東西,不是知道不知道的區別,只有熟練還是不熟練的區分,比如『寫代碼要用有意義的命名規則』,你知道了這一點,不代表你掌握了這個寫代碼命名的技巧,你需要去寫代碼練習,但是練習還不夠,你需要反復練習,還需要別人給你反饋,你才能練習得更好。
是的,知乎上有些內容全都是『知識』(有的還只是偽知識),不是技能,記住,知識只需要記憶力,技能需要反復練習。
此次手寫架構,解決的問題是:
1、讓 App內 各個功能模塊能夠獨立開發單元測試,也可以 所有模塊集成打包,統一測試
獨立開發
更改gradle.properties的配置,使得每個功能模塊都成為application, 可以獨立打包成apk,單獨運行。單個模塊,獨立測試。
集成打包
更改gradle.properties的配置,使得原先每個單獨模塊,都變成library,被 主模塊引用,這時候只有主模塊能夠打包apk,所有功能都集成在這個apk內。
2、實現 功能模塊的整體移植,靈活拔插
故事背景
當你們公司有多個安卓開發人員,開發出核心業務相同,但是UI不同,其他業務不同的一系列App時(如果核心業務是X,你們有5個開發人員,做出了A,B,C,D,E 5個app,都包含核心業務X,但是除了X之外,其他的業務模塊各不相同)這時候,如果領導要把A里面的一個非核心功能,挪到B里面…
現狀
開發B的程序猿可能要罵娘,因為他在從移植A的代碼中剝離代碼 遇到了很多高耦合,低內聚 的類結構,挪過來之后,牽一發而動全身,動一點小地方,整個代碼滿江紅。
理想
如果這個時候,我們通過代碼框架的配置,能夠把A里面的一個模塊,作為一個module 移植到 工程內部,然后主module 來引用這個module,略微寫一些代碼來使得這個功能模塊在app中生效。那么無論是多少個功能模塊,都可以作為整體來 給其他app復用。這樣開發人員也不用相互罵娘了,如果挪過來的模塊存在bug或者其他問題,也不用甩鍋,模塊原本是誰開發的,找誰就好了。
3、保證App內 業務模塊的相互隔離,但是又不妨礙業務模塊之間的數據交互
我們開發app的功能模塊,一個業務,可能是通過一個Activity或者 一個Fragment 作為對外的窗口,也可能是。***所謂窗口,就是這個業務,相對于其他模塊,"有且只有"一個入口,沒有任何其他可以觸達到這個業務的途徑。***業務代碼之間相互隔離,絕對不可以有相互引用。那么,既然相互不會引用,那A模塊一定要用到B模塊的數據,怎么辦呢?下文提供解決方案。
正文大綱
1、代碼結構現狀以及理想狀態一覽
2、功能組件化的實現思路,實現組件移植拔插
3、參考ARouter源碼,寫出自己的Router框架,統一通過Router來進行模塊的切換 以及 組件之間數據的交互
4、使用組件api化,在模塊很多的情況下優化公共模塊的結構
正文
1、代碼結構現狀以及理想狀態一覽
現狀;
代碼有模塊化的跡象,但是沒有對業務模塊進行非常明顯的模塊化(不明白啥意思是吧?不明白就對了,app這個module里面其實還有很多東西沒有展示出來,請看下圖:試想,把所有的模塊集中到一個module的一個包里面,當你要移植某一個功能的時候,想想那酸爽…當然如果你口味別致,那當我沒說)
理想:
理想化的話,參照:理想.png; 項目結構層次分明,脈絡清晰
按照圖中的分層,詳細解釋一下:
外殼層:app module
內部代碼只寫 app的骨骼框架,比如說,你的app是這個樣子的結構:
下方有N個TAB,通過Fragment來進行切換模塊。這種架構肯定不少見。
這個時候,外殼層 app module,就只需要寫上 上面這種UI架構的框架代碼就行了,至于有多少個模塊,需要代碼去讀取配置進行顯示。你問我怎么寫這種UI框架嗎?網上一大把的,如果實在找不到,來我的 github
業務層
我們的業務模塊,對外接口可能是一個
Activity
* *(**比如說,登錄模塊,只對外提供一個LoginActivity
,有且僅有這一個窗口)或者 是一個Fragment
,就像上圖(典型的app架構.png), 如果app的UI框架是通過切換Fragment
來卻換業務模塊的話。用business
**這個目錄,將所有的業務模塊包含進去,每個模塊又是獨立的module
,這樣既實現了業務代碼隔離,又能一眼看到所有的業務模塊,正所謂,一目了然。
功能組件層
每一個業務模塊,不可避免的需要用到一些公用工具類,有的是第三方SDK的再次封裝,有的是自己的工具類,或者自己寫的自定義控件,還有可能是 所有業務模塊都需要的 輔助模塊,都放在這里。
路由框架層
設計這一層,是想讓app內的所有Activity,業務模塊Fragment,以及模塊之間的數據交互,都由 這一層開放出去的接口來負責
gradle統一配置文件
工程內部的一些全局gradle變量,放在這里,整個工程都有效
module編譯設置
setting.gradle 配置要編譯的module; 也可以做更復雜的操作,比如,寫gradle代碼去自動生成一些module,免除人為創建的麻煩.
總結
**其實上面說了這么多,錢是永遠賺不完的,在這個知識付費的時代,知識技能提升才是是根本!我作為一名8年的高級工程師,知識技能已經學習的差不多。**在看這篇文章的可能有剛剛入門,剛剛開始工作,或者大佬級人物。
像剛剛開始學Android開發小白想要快速提升自己,最快捷的方式,就是有人可以帶著你一起分析,這樣學習起來最為高效,所以這里分享一套高手學習的源碼和框架視頻等精品Android架構師教程,保證你學了以后保證薪資上升一個臺階。
這么重要的事情說三遍啦!點贊+點贊+點贊 免費分享所有學習秘籍!
直達領取鏈接:點擊鏈接免費領取【Android高級架構師】
【Android高級架構師系統學習資料】高級架構師進階必備——設計思想解讀開源框架
第一章、熱修復設計
第二章、插件化框架設計
第三章、組件化框架設計
第四章、圖片加載框架
第五章、網絡訪問框架設計
第六章、RXJava 響應式編程框架設計
第七章、IOC 架構設計
第八章、Android 架構組件 Jetpack
計
第二章、插件化框架設計
第三章、組件化框架設計
第四章、圖片加載框架
第五章、網絡訪問框架設計
第六章、RXJava 響應式編程框架設計
第七章、IOC 架構設計
第八章、Android 架構組件 Jetpack