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