无码人妻精一区二区三区,eeuss影院www在线观看,无码精品久久久久久人妻中字,日韩av高清在线看片

推薦新聞
Android基礎(chǔ)知識(shí):項(xiàng)目架構(gòu)基礎(chǔ)概述
發(fā)布者:深藍(lán)互聯(lián)
發(fā)布時(shí)間:2019-07-18
點(diǎn)擊:次

1、前言

這篇記錄一下架構(gòu)方面的相關(guān)知識(shí)總結(jié)以及自己學(xué)習(xí)后對(duì)模塊化、組件化和插件化這三化概念的理解。

2、MVC、MVP、MVVM

2.1 MVC

Model-View-Controller,即模型-視圖-控制器。Model負(fù)責(zé)獲取數(shù)據(jù),View負(fù)責(zé)界面展示,Controller負(fù)責(zé)交互控制,是最經(jīng)典的架構(gòu)模式。例如Android中的ListView就是MVC運(yùn)用的典型例子。界面里的ListView是View,Adapter是Controller,數(shù)據(jù)集合是Model,Model和View通過(guò)Adapter這個(gè)Controller聯(lián)系起來(lái)。MVC架構(gòu)使得代碼之間分工明確,降低了代碼耦合性,提高了代碼重用性。但是MVC中View和Controller聯(lián)系太過(guò)緊密,Android開(kāi)發(fā)中往往把Activity充當(dāng)Controller的角色,使得Activity的代碼過(guò)于龐大。

2.2 MVP

Model-View-Presenter,和MVC類(lèi)似,Model負(fù)責(zé)獲取數(shù)據(jù),View負(fù)責(zé)界面展示,Presenter作為中間調(diào)度者,負(fù)責(zé)交互邏輯控制。在MVP中Model和View間沒(méi)有任何聯(lián)系,全靠Presenter進(jìn)行傳遞控制,使得Model和View完全的隔離,并且Presenter還可以重用。Android開(kāi)發(fā)中使用MVP將控制邏輯從Activity中轉(zhuǎn)移到Presenter中,大大減輕了Activity的負(fù)擔(dān),讓Activity單純的充當(dāng)View的角色。

2.3 MVVM

Model-View-ViewModel,還是和之前的類(lèi)似,Model負(fù)責(zé)獲取數(shù)據(jù),View負(fù)責(zé)界面展示,而ViewModel成為了View和Model溝通的橋梁,通過(guò)數(shù)據(jù)綁定技術(shù)實(shí)現(xiàn)了數(shù)據(jù)與界面的雙向綁定,數(shù)據(jù)有變動(dòng)了通知界面更新,界面數(shù)據(jù)有改動(dòng)通知數(shù)據(jù)也修改。Android中通過(guò)Google官方推出的DataBinding上來(lái)實(shí)現(xiàn)數(shù)據(jù)的雙向綁定,MVVM模式進(jìn)一步降低了代碼耦合性。

3、模塊化

關(guān)于模塊化,我第一次接觸Module是在開(kāi)始使用Android Studio的時(shí)候,相比原來(lái)使用Eclipse的時(shí)候多了這樣一個(gè)Module的概念,這個(gè)Module就是模塊。

在剛開(kāi)始學(xué)習(xí)開(kāi)發(fā)的時(shí)候或者開(kāi)發(fā)一個(gè)單一功能應(yīng)用的時(shí)候,因?yàn)楣δ芎?jiǎn)單,所以項(xiàng)目架構(gòu)也可以很簡(jiǎn)單,或者說(shuō)也不需要什么架構(gòu),全部寫(xiě)在一個(gè)模塊里問(wèn)題也不大,而且用這種方式開(kāi)發(fā)上手快,開(kāi)發(fā)效率高,沒(méi)有這樣那樣的設(shè)計(jì)模式,啥也不用管,拿起鍵盤(pán)就是碼,簡(jiǎn)單粗暴,對(duì)新手而言十分的友好。

單一模塊項(xiàng)目
模塊化

但是一旦項(xiàng)目的業(yè)務(wù)功能稍微復(fù)雜一些,或者是多人協(xié)作開(kāi)發(fā),這種簡(jiǎn)單粗暴的方式就不行了,開(kāi)發(fā)效率直線下降,所有功能的代碼耦合在一起,簡(jiǎn)直是一團(tuán)亂麻,多人開(kāi)發(fā)面對(duì)不是自己寫(xiě)的代碼更是噩夢(mèng),這樣開(kāi)發(fā)不僅耦合度高,而且代碼冗余也會(huì)很高。所以Android開(kāi)發(fā)者按照原先后端的項(xiàng)目開(kāi)發(fā)方法,開(kāi)始使用MVC的分層架構(gòu)進(jìn)行開(kāi)發(fā),這樣讓代碼結(jié)構(gòu)更加清晰,耦合度和冗余也大大降低。在MVC使用了一段時(shí)間之后又相繼出現(xiàn)了MVP、MVVM等適合移動(dòng)端的分層架構(gòu)方式,這些架構(gòu)的出現(xiàn)讓復(fù)雜項(xiàng)目的開(kāi)發(fā)也變得僅僅有條,各層代碼分工明確,邏輯清晰,項(xiàng)目開(kāi)發(fā)效率也有顯著提高。但是光光這樣還不夠,單模塊的項(xiàng)目架構(gòu)在迭代久了之后,代碼量變大,變得十分臃腫。所以不僅要將代碼分層,還需要根據(jù)業(yè)務(wù)邏輯將單模塊項(xiàng)目拆分成多個(gè)業(yè)務(wù)模塊,抽出公共模塊和基礎(chǔ)模塊。這樣多模塊的開(kāi)發(fā)就是模塊化。在開(kāi)發(fā)中修改一行代碼就能引入Module或者剔除Module,也是非常的靈活方便。

引入不同模塊

模塊化的開(kāi)發(fā)進(jìn)一步降低了代碼的耦合,每個(gè)模塊各司其職,解決了單個(gè)模塊的臃腫問(wèn)題。多人開(kāi)發(fā)過(guò)程中,每個(gè)人負(fù)責(zé)不同模塊,分工明確,效率也會(huì)提高。這種多模塊加分層架構(gòu)解決了項(xiàng)目開(kāi)發(fā)中的大部分問(wèn)題,也最簡(jiǎn)單常見(jiàn)的架構(gòu)模式。

模塊化多個(gè)模塊

4、組件化

在模塊化開(kāi)發(fā)了一段時(shí)間之后,隨著項(xiàng)目業(yè)務(wù)的增加,模塊越來(lái)越多,又會(huì)出現(xiàn)一些問(wèn)題。例如:

  • 由于模塊太多使得每次調(diào)試都要編譯整個(gè)項(xiàng)目,編譯速度太慢。
  • 項(xiàng)目運(yùn)行依賴于所有模塊,模塊間若有沖突,使開(kāi)發(fā)這這無(wú)法專注于單個(gè)模塊的功能。
  • 多個(gè)項(xiàng)目要使用一個(gè)模塊時(shí),無(wú)法對(duì)業(yè)務(wù)模塊進(jìn)行靈活的組裝

組件化很好的解決了這些問(wèn)題。通過(guò)一個(gè)APP空殼工程,將多個(gè)組件組裝成一個(gè)應(yīng)用。組件化為單個(gè)組件配置了單獨(dú)的啟動(dòng)入口Activity,使得單個(gè)組件既可以作為application單獨(dú)運(yùn)行,又可以作為library引入項(xiàng)目。這樣在多人開(kāi)發(fā)時(shí),每個(gè)開(kāi)發(fā)者只需要專注于自己組件的功能問(wèn)題,調(diào)試時(shí)只需要調(diào)試單個(gè)組件,只編譯一個(gè)組件大大提高了編譯速度,提升了開(kāi)發(fā)效率。而且還可以將一些常用組件打成aar包進(jìn)行單獨(dú)版本維護(hù),在其他項(xiàng)目需要時(shí)直接引入就行。 組件化其實(shí)和模塊化有點(diǎn)類(lèi)似,我覺(jué)得可以這樣理解,組件化就是模塊化的一個(gè)升級(jí)加強(qiáng)版,組件化比起模塊化更加的靈活,耦合度更低,而且單個(gè)組件可以獨(dú)立運(yùn)行,不必每次編譯整個(gè)項(xiàng)目,提高了開(kāi)發(fā)效率。

組件化
組件化工程
組件可以作為單獨(dú)應(yīng)用運(yùn)行

5、插件化

插件化技術(shù)的產(chǎn)生也是類(lèi)似,由于業(yè)務(wù)進(jìn)一步復(fù)雜,項(xiàng)目規(guī)模進(jìn)一步的變大,模塊越也來(lái)越多,耦合度變高,并且有時(shí)候需求要求不再是單獨(dú)的應(yīng)用,可能要接入其他應(yīng)用的業(yè)務(wù)功能,而且太多個(gè)組件接入應(yīng)用會(huì)使得應(yīng)用的體積變得很大,而且編譯時(shí)間也會(huì)變的很長(zhǎng)。還有Android中655536方法的限制,模塊增多代碼增多方法很容易就超過(guò)65536個(gè),而且應(yīng)用也會(huì)占用很大內(nèi)存。所以插件化技術(shù)應(yīng)運(yùn)而生,插件化技術(shù)從本質(zhì)上來(lái)說(shuō)是一種動(dòng)態(tài)加載技術(shù)。插件化中存在宿主APK和插件兩個(gè)概念,宿主APK就是指先被安裝到手機(jī)中的APK,插件指經(jīng)過(guò)處理的APK、so、dex等文件,插件可以被宿主進(jìn)行加載。插件化的應(yīng)用一開(kāi)始加載到內(nèi)存的只有宿主應(yīng)用,當(dāng)使用到其他插件時(shí)才會(huì)加載對(duì)應(yīng)插件到內(nèi)存中,減少了內(nèi)存的占用?,F(xiàn)在很多大廠都早已推出了自己的插件化框架,例如VirtualApk、RePlugin等等。

插件化

6、總結(jié)

內(nèi)容本身比較簡(jiǎn)單,就是基礎(chǔ)概念的總結(jié)。對(duì)于開(kāi)發(fā)架構(gòu)的選擇來(lái)說(shuō),沒(méi)有最好的架構(gòu)只有最合適的架構(gòu),規(guī)模大業(yè)務(wù)多的項(xiàng)目不選擇好合適的架構(gòu),項(xiàng)目開(kāi)發(fā)將無(wú)法順利進(jìn)行,功能單一內(nèi)容簡(jiǎn)單的項(xiàng)目也沒(méi)必要什么技術(shù)架構(gòu)都往項(xiàng)目里上,徒增開(kāi)發(fā)成本。只有使用最合適自己項(xiàng)目的架構(gòu)才能保證項(xiàng)目開(kāi)發(fā)能快速、高效、順利的進(jìn)行。

 

關(guān)注深藍(lán)互聯(lián)公眾號(hào)
Copyright ? 2013-2025 深藍(lán)互聯(lián) 版權(quán)所有
友情鏈接: