Android作為目前移動(dòng)互聯(lián)網(wǎng)領(lǐng)域當(dāng)中的主流系統(tǒng),其開發(fā)無疑成為行業(yè)大熱。 Android開發(fā)人員在工作中不可避免的將遇到項(xiàng)目架構(gòu)的設(shè)計(jì)的問題,對(duì)于這個(gè)問題,很多開發(fā)人才雖然具有開發(fā)經(jīng)驗(yàn),但卻不一定能很好地進(jìn)行解釋。對(duì)于這個(gè)問題,中培偉業(yè)《Android APP開發(fā)應(yīng)用實(shí)踐》培訓(xùn)專家劉老師給出了專業(yè)回答。
劉老師指出,對(duì)很多開發(fā)新人來說,這個(gè)問題體現(xiàn)著項(xiàng)目分層、功能模塊劃分以及公共模塊提取等基本意識(shí),以及對(duì)一些經(jīng)典架構(gòu)的理解,比如MVCMVPMVVMCLEAN等。其主要涉及到以下幾個(gè)方面的問題。
1.你為什么選擇使用MVC而不是MVP或者其他架構(gòu)?
這個(gè)問題實(shí)際考察的是你對(duì)市面上主流的Android架構(gòu)模式的了解。你至少需要知道每種架構(gòu)的大致結(jié)構(gòu),然后了解一下它們各自解決的是其它架構(gòu)無法解決的什么問題。最后,在談你自己的選擇時(shí),結(jié)合項(xiàng)目的特點(diǎn)來說就可以了。其實(shí),大部分學(xué)生時(shí)期的項(xiàng)目用個(gè)MVC就足夠了,如果你代碼行數(shù)最多的Activity都不到百行,那么使用MVP或者其它架構(gòu)給你帶來的額外負(fù)擔(dān)恐怕要比你的收益高很多,切忌矯枉過正。不過,抱著學(xué)習(xí)心態(tài)去使用這些架構(gòu)都是值得鼓勵(lì)的。
2.寫過BaseActivityBaseFragment怎么設(shè)計(jì)的?
劉老師的觀點(diǎn)是:一是在項(xiàng)目開始階段可以先提出一個(gè)基類,但不用花太多時(shí)間想著怎么填充內(nèi)容進(jìn)去,很可能得不償失,其實(shí)隨著你項(xiàng)目的進(jìn)展,那些重復(fù)實(shí)現(xiàn)的內(nèi)容就會(huì)慢慢浮現(xiàn),這些內(nèi)容就是需要你在基類里實(shí)現(xiàn)的。二是在你實(shí)在不知道BaseActiviy里要放些什么的時(shí)候,至少可以編寫各個(gè)生命周期方法中的的log,以及像eventbus這類第三方庫的初始化以及銷毀操作。
3.你項(xiàng)目中的package劃分,是按照層次劃分的呢,還是按照功能劃分的呢為什么?
按層次劃分的package這個(gè)大家可能比較常用,那么按功能劃分呢可以看下面這張圖。 這么做的好處是什么呢看到代碼結(jié)構(gòu)你就能辨別這個(gè)app是干嘛的更加模塊化代碼切換更容易更高級(jí)別的抽象功能和層都分離開來了可讀性更強(qiáng)以及更易維護(hù)的結(jié)構(gòu)更高的內(nèi)聚更易擴(kuò)展更少遇到改動(dòng)無關(guān)類或者文件的情況添加或者移除功能要容易很多更多可復(fù)用的模塊。 我這里并不是說按功能劃分就比按層次劃分好,只是想讓大家看看別的思路。這題沒有絕對(duì)的答案,但一定說出你在劃分時(shí)的思考。
4.了解過AOP項(xiàng)目中有用到過么?
AOP面向切面編程與面向?qū)ο缶幊虒?duì)應(yīng)。我們都知道面向?qū)ο竺枋龅氖强v向上的關(guān)系,從父到子再到孫。而面向切面解決的是橫向的問題,這些問題可以簡(jiǎn)單地理解為與業(yè)務(wù)邏輯無關(guān)的代碼重用問題。大家在自己的項(xiàng)目其實(shí)都或多或少的用到過,比如在處理Http, SharedPreferences, Json, Xml, File, Device, System, Log, 格式轉(zhuǎn)換等是,我們提取出來的公共類。 這樣做能夠使得App整體的結(jié)構(gòu)更清晰合理,避免局部的代碼臃腫,方便開發(fā)、測(cè)試以及后續(xù)的維護(hù)。