參考文章:
https://juejin.cn/post/6854573206700130317
一、移動端架構(gòu)設(shè)計到底做什么臣疑?
常規(guī)來看拱撵,基本就是MVC振定、MVP、MVVM以及組件化的東西篙螟,這些東西說是架構(gòu)秒际,但本質(zhì)上就是模塊化的變種慎宾,這類東西主要是做業(yè)務(wù)架構(gòu),將一個很大的業(yè)務(wù)劃分為很多小業(yè)務(wù)甸赃,每個小業(yè)務(wù)就是一個模塊柿汛。
另一部分架構(gòu)內(nèi)容則是技術(shù)架構(gòu),一般是分層的埠对,最底層是基礎(chǔ)框架络断,包括網(wǎng)絡(luò)、存儲项玛、日志貌笨、圖片加載等第三方庫;中間層則是上層業(yè)務(wù)經(jīng)過抽象后所形成的公共業(yè)務(wù)層襟沮,也可以叫做中臺躁绸,這一塊往往包含賬號、支付臣嚣、客服净刮、地圖等相對獨立的業(yè)務(wù);最上層就是核心業(yè)務(wù)了硅则。從變動性來說淹父,基礎(chǔ)框架變動最低,公共業(yè)務(wù)層次之怎虫,上層業(yè)務(wù)變動最高暑认。
總結(jié)來看:移動端架構(gòu) = 業(yè)務(wù)架構(gòu)(模塊化) + 技術(shù)架構(gòu)(分層)
二、為什么要做架構(gòu)設(shè)計大审?
主要總結(jié)為如下幾點:
“為了讓項目看起來更有技術(shù)含量”
“大家都做架構(gòu)設(shè)計蘸际,我也得做”
“提高程序性能和可擴展性,降低后續(xù)的維護成本”
其實這些目標都比較抽象徒扶,不好衡量粮彤,做完架構(gòu)設(shè)計后未必能達到預期。
舉個例子,MVP特別流行导坟,MVP的好處就是降低耦合屿良,降低后續(xù)維護成本,但事實上惫周,用了MVP后尘惧,代碼極度膨脹,新增了很多類递递,代碼可讀性也差喷橙,很多新人上手困難,在一大堆presenter中迷失了登舞,大家想想重慢,這樣做維護成本是否真的降低了?
三逊躁、架構(gòu)設(shè)計的目標
為了尋找架構(gòu)設(shè)計的目標似踱,我們要尋找當前項目中的復雜度來源,也就是說看看當前項目中哪個方面最痛最急需改進稽煤,舉個例子吧核芽,像滴滴出行這種APP,復雜度來自于大量相似的業(yè)務(wù)線酵熙,而且這些業(yè)務(wù)線又是在不同的團隊開發(fā)轧简,那團隊協(xié)作問題就極為迫切,那我們的架構(gòu)就要圍繞這個來匾二。
換言之哮独,架構(gòu)設(shè)計的目標是解決當前項目的痛點,如果當前項目沒有痛點察藐,那就先別進行架構(gòu)設(shè)計了皮璧。
四、如何做架構(gòu)設(shè)計
架構(gòu)設(shè)計要以實用為目的分飞,不要光想著造一個世上最牛逼的架構(gòu)悴务,這樣往往是不靠譜的,我們不是救世主譬猫⊙堕埽總結(jié)下,架構(gòu)設(shè)計有三個基本原則:
1染服、合適優(yōu)于先進
適合自己當前業(yè)務(wù)的就好别洪,不要總想搞世界領(lǐng)先的架構(gòu),比如一個用戶量100萬的系統(tǒng)柳刮,光想著對標微信的架構(gòu)挖垛,那微信日活上億痒钝,適合微信的架構(gòu)未必適合自己。
2晕换、簡單優(yōu)于復雜
如同寫代碼一樣午乓,代碼量越少越簡單越好站宗,架構(gòu)設(shè)計也是一樣闸准,越簡單的架構(gòu)越牛逼。
3梢灭、演進優(yōu)于一步到位
可擴展性我們當然要考慮夷家,但是人不是神,無論你怎么去預測未來的系統(tǒng)演進敏释,總是很大可能會失算库快。所以架構(gòu)設(shè)計優(yōu)先解決當下的問題,至于后來的問題钥顽,到時候再對架構(gòu)方案進行改進义屏。
架構(gòu)設(shè)計還要考慮成本,你設(shè)計了一個很好的架構(gòu)蜂大,但是需要投入20個人闽铐,還要項目停止2個月專門做架構(gòu)開發(fā),那這種成本就太高奶浦,很難推進兄墅。拿后端來舉例,你設(shè)計了一個巨牛逼有效的架構(gòu)澳叉,但需要1000臺服務(wù)器隙咸,然后公司買不起這么多服務(wù)器,那也是白搭成洗。
這三個原則也是有優(yōu)先級的五督,具體是:
合適優(yōu)于先進 > 演化優(yōu)于一步到位 > 簡單優(yōu)于復雜
合適也就是適應當前需要是首位的,連當前需求都滿足不了談不到其他瓶殃。架構(gòu)整體發(fā)展是要不斷演進的概荷,在這個大前提下,盡量追求簡單碌燕,但也有該復雜的時候误证,就要復雜,比如生物從單細胞一直演化到如今修壕,復雜是避免不了的愈捅。
現(xiàn)在大家都對架構(gòu)設(shè)計的目的以及是否需要有了進一步的認識,下面我們講講移動端的架構(gòu)設(shè)計的實現(xiàn)方案有哪些慈鸠。
上面講了架構(gòu)設(shè)計分為技術(shù)架構(gòu)和業(yè)務(wù)架構(gòu)蓝谨,技術(shù)架構(gòu)是基礎(chǔ),業(yè)務(wù)架構(gòu)是基于技術(shù)架構(gòu)之上的。
對技術(shù)架構(gòu)進行分層:
最底層是基礎(chǔ)框架譬巫,包括網(wǎng)絡(luò)請求咖楣、數(shù)據(jù)存儲、布局約束芦昔、bug檢測诱贿、圖片加載等第三方庫;中間層則是針對當前項目的業(yè)務(wù)編寫的工具類庫咕缎,也可以叫做中臺珠十,這一塊往往包含賬號、支付凭豪、客服焙蹭、地圖等相對獨立的業(yè)務(wù),以及一些工具類:比如字符串嫂伞、數(shù)組孔厉、字典的數(shù)據(jù)轉(zhuǎn)換、系統(tǒng)UI層的一些類的擴展帖努、加解密等等撰豺。
業(yè)務(wù)層:
就是MVC、MVP然磷、MVVM以及組件化的東西郑趁,這些東西說是架構(gòu),但本質(zhì)上就是模塊化的變種姿搜,這類東西主要是做業(yè)務(wù)架構(gòu)寡润,將一個很大的業(yè)務(wù)劃分為很多小業(yè)務(wù),每個小業(yè)務(wù)就是一個模塊舅柜。
最上層就是核心業(yè)務(wù)了梭纹。從變動性來說,基礎(chǔ)框架變動最低致份,工具類庫層次之变抽,業(yè)務(wù)層變動最高。
關(guān)于業(yè)務(wù)層的架構(gòu)設(shè)計可以采用MVC氮块、MVP绍载、MVVM或者是組件化,下面具體講下幾者的區(qū)別及用途:
http://www.reibang.com/p/640352715b01