模塊化的好處 且與組件的區(qū)別

我們要進行模塊化開發(fā)呢届囚?

模塊化開發(fā)的好處主要有這么幾點:

1.使用模塊化開發(fā)能解決文件之間的依賴關(guān)系竿屹。

當你引入很多個JS文件的時候各淀,很有可能會不清楚這些JS文件之間的依賴關(guān)系盾鳞,從而導致加載順序出錯犬性。使用模塊化開發(fā)之后就能避免這個問題。

2.使用模塊化開發(fā)可以避免命名的沖突腾仅。

JS本身是沒有命名空間的乒裆,為了減少命名沖突,經(jīng)常使用對象或者閉包來減少命名沖突推励。對象只能減少命名沖突的概率鹤耍,閉包的過多使用會造成內(nèi)存泄漏。模塊化開發(fā)之后验辞,在模塊內(nèi)任何形式的命名都不會和其他模塊的命名產(chǎn)生沖突稿黄,有效的解決了命名沖突的問題。

3.使用模塊化開發(fā)能進行代碼的復用跌造。

當我們想要實現(xiàn)某個功能的時候杆怕,如果某個模塊正好有這個功能,我們就可以直接引用該模塊壳贪,不必再寫多余的代碼陵珍,這樣可以提高代碼整體的效率,減少重復冗余的代碼违施。

組件化開發(fā)和模塊化開發(fā)概念辨析

網(wǎng)上有許多講組件化開發(fā)互纯、模塊化開發(fā)的文章,但大家一般都是將這兩個概念混為一談的磕蒲,并沒有加以區(qū)分伟姐。而且實際上許多人對于組件收苏、模塊的區(qū)別也不甚明了亿卤,甚至于許多博客文章專門解說這幾個概念都有些謬誤愤兵。

想分清這兩個概念我覺得結(jié)合一下軟件的漸進式開發(fā)場景更容易理解。但是下面的篇幅會比較長排吴,所以我先說結(jié)論秆乳,不耐煩的同學可以先看:

概念區(qū)別

1608260347(1).png

說明

  • 組件:最初的目的是代碼重用,功能相對單一或者獨立钻哩。在整個系統(tǒng)的代碼層次上位于最底層屹堰,被其他代碼所依賴,所以說組件化是縱向分層街氢。
  • 模塊:最初的目的是將同一類型的代碼整合在一起扯键,所以模塊的功能相對復雜,但都同屬于一個業(yè)務(wù)珊肃。不同模塊之間也會存在依賴關(guān)系荣刑,但大部分都是業(yè)務(wù)性的互相跳轉(zhuǎn),從地位上來說它們都是平級的伦乔。

因為從代碼組織層面上來區(qū)分厉亏,組件化開發(fā)是縱向分層,模塊化開發(fā)是橫向分塊烈和,所以模塊化并沒有要求一定組件化爱只。也就是說你可以只做模塊化開發(fā),而不做組件化開發(fā)招刹。那這樣的結(jié)果是什么樣的呢恬试?就是說你的代碼完全不考慮代碼重用,只是把相同業(yè)務(wù)的代碼做內(nèi)聚整合疯暑,不同模塊之間還是存在大量的重復代碼训柴。這樣的成果也算是做到了模塊化,只不過我們一般不會這樣而已缰儿。

和組件模塊近似的一對概念是庫和框架畦粮。庫的概念偏近于代碼的堆集,是分層的概念乖阵,所以對應(yīng)組件化宣赔。框架是結(jié)構(gòu)化的代碼瞪浸,所以應(yīng)用于模塊化儒将。框架是骨对蒲,模塊化是肉钩蚊。
比如贡翘,ReactiveCocoa是庫,只是提供了響應(yīng)式編碼能力砰逻,而基于此的MVVM具體實現(xiàn)成果才叫框架鸣驱,因為框架本身就有架構(gòu)思想在里面。

舉例

下面我們舉例來說明蝠咆。
組件化就比如公共的alert框踊东,最初在許多頁面都有使用,后面提取出一份相同的代碼刚操,其實就是基于代碼復用的目的闸翅。

模塊化就比如一個資訊功能,它本身只在這一個地方使用菊霜,沒有復用的需求坚冀,但系統(tǒng)啟動的時候要初始化它的數(shù)據(jù),首頁顯示的時候要展示它的數(shù)據(jù)鉴逞,顯示紅點的時候要拉取它的未讀數(shù)记某。這樣一來應(yīng)用中就有很多地方涉及到它的代碼。如果我們將它看做一個整體华蜒,那么資訊模塊和主應(yīng)用的耦合性就非常高了辙纬。所以我們也要把它封裝成模塊,把相關(guān)的代碼放到獨立的單元文件里叭喜,并提供公共方法贺拣,這就是高內(nèi)聚的要求。

漸進式開發(fā)過程

當然這幾個概念在服務(wù)端開發(fā)和客戶端開發(fā)領(lǐng)域有些微差別捂蕴,我下面的例子就從移動端開發(fā)的角度上進行辨析譬涡。

首先我們定義一個虛擬的產(chǎn)品——一款知識類應(yīng)用,包含咨詢啥辨、問答涡匀、學院、直播等功能溉知。

接下來我們逐步拆分這個產(chǎn)品陨瘩。

如果開發(fā)時沒有考慮任何組件化模塊化開發(fā),那么此應(yīng)用的所有功能都是堆積在一起的级乍,總結(jié)起來就是高耦合舌劳,低內(nèi)聚,無重用玫荣。

1.組件

那么代碼重構(gòu)的第一步是什么呢甚淡?
將重復的代碼合并成為一份,也就是重用捅厂。
我們來看組件化開發(fā)的定義贯卦,它的著重點就是重用资柔,那這一步最后的結(jié)果就是提煉出一個個組件給不同的功能使用。

這里我們可以看一下依賴關(guān)系撵割,是具體功能依賴提煉出來的組件贿堰,組件本身之間可能也有依賴關(guān)系,但一般不多睁枕。所以我們總結(jié)組件化開發(fā)的原則就是高重用官边,低依賴。當然這只是相對而言外遇。
基于這樣的認識,我們甚至于可以把資訊契吉、問答跳仿、學院、直播等功能封裝成組件捐晶,只不過這些組件比較大菲语,依賴可能多些,不過本質(zhì)上沒有多少區(qū)別惑灵,而且實際上網(wǎng)上許多文章說所的模塊化開發(fā)其實就是這種組件化的“模塊”山上。

2.模塊

下面再說模塊,按照模塊的定義英支,它是以關(guān)注點進行劃分的佩憾,關(guān)注點說到底就是功能,也就是說根據(jù)我們上面的例子干花,資訊妄帘、問答、學院池凄、直播可以分成不同的模塊抡驼。

我們最開始定義這個虛擬產(chǎn)品的時候說,它有三個特點——高耦合肿仑、低內(nèi)聚致盟、無重用。而第一點組件化開發(fā)主要是解決了重用問題尤慰,提升了部分內(nèi)聚馏锡,而耦合問題則沒有涉及。
所以說我們上面可以將這個產(chǎn)品在邏輯上劃分為資訊割择、問答眷篇、學院、直播四個模塊荔泳,但在代碼層面上它們卻不是四個模塊蕉饼,因為它們的代碼都是混雜在一起的虐杯。比如產(chǎn)品首頁,可能推薦了部分資訊昧港、顯示了熱門問答擎椰、推送了目前的直播,而這些功能的代碼則是寫在一起的创肥;再比如程序啟動的時候达舒,這四個模塊都需要初始化一些數(shù)據(jù),而初始化數(shù)據(jù)的代碼也是寫在一起的叹侄;再比如程序需要顯示未讀消息數(shù)巩搏,而這幾個模塊都有自己的未讀消息數(shù)邏輯。
如果未進行模塊化開發(fā)的拆分趾代,那么很多時候不同模塊的同一類的代碼都是直接寫在一起的贯底,比如系統(tǒng)啟動的時候,我們會在啟動方法里直接寫多個模塊的初始化代碼撒强。

而模塊化開發(fā)就是為了解決這一問題禽捆,即提高內(nèi)聚,將分屬同一模塊代碼放到一起飘哨;降低耦合胚想,將不同模塊間的耦合程度弱化。
高內(nèi)聚是目標芽隆,但是現(xiàn)狀是有許多地方會用到多個模塊浊服,比如啟動的時候會調(diào)用四個模塊,首頁會展示三個模塊的界面摆马。如果要高內(nèi)聚臼闻,那么必然需要這些模塊為不同的場景提供相同的方法,這就是說所有模塊要實現(xiàn)同一套多個接口囤采。這樣主應(yīng)用和模塊之間的重耦合就變成了主應(yīng)用和接口耦合述呐,接口和模塊耦合這樣的松耦合。
但這樣的簡單模塊只是輕模塊蕉毯,統(tǒng)一接口較少乓搬。而統(tǒng)一定義的接口越多,模塊和統(tǒng)一接口的耦合就越高代虾,也便是重模塊进肯。

而我們一般講的路由問題其實只是解決模塊間耦合的問題,并不是模塊化開發(fā)的必然需求棉磨,更多時候是基于產(chǎn)品上的動態(tài)化要求江掩,只不過我們一般都會在這個時間考慮這一事情而已,就像我們不會只做模塊化開發(fā)同時不做組件化開發(fā)一樣。

講到這里环形,模塊和組件的區(qū)別就已經(jīng)很明顯了策泣。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市抬吟,隨后出現(xiàn)的幾起案子萨咕,更是在濱河造成了極大的恐慌,老刑警劉巖火本,帶你破解...
    沈念sama閱讀 211,423評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件危队,死亡現(xiàn)場離奇詭異,居然都是意外死亡钙畔,警方通過查閱死者的電腦和手機茫陆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刃鳄,“玉大人盅弛,你說我怎么就攤上這事∈迦瘢” “怎么了?”我有些...
    開封第一講書人閱讀 157,019評論 0 348
  • 文/不壞的土叔 我叫張陵见秽,是天一觀的道長愉烙。 經(jīng)常有香客問我,道長解取,這世上最難降的妖魔是什么步责? 我笑而不...
    開封第一講書人閱讀 56,443評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮禀苦,結(jié)果婚禮上蔓肯,老公的妹妹穿的比我還像新娘。我一直安慰自己振乏,他們只是感情好蔗包,可當我...
    茶點故事閱讀 65,535評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著慧邮,像睡著了一般调限。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上误澳,一...
    開封第一講書人閱讀 49,798評論 1 290
  • 那天耻矮,我揣著相機與錄音,去河邊找鬼忆谓。 笑死裆装,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播哨免,決...
    沈念sama閱讀 38,941評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼茎活,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了铁瞒?” 一聲冷哼從身側(cè)響起妙色,我...
    開封第一講書人閱讀 37,704評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎慧耍,沒想到半個月后身辨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,152評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡芍碧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,494評論 2 327
  • 正文 我和宋清朗相戀三年煌珊,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泌豆。...
    茶點故事閱讀 38,629評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡定庵,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出踪危,到底是詐尸還是另有隱情蔬浙,我是刑警寧澤,帶...
    沈念sama閱讀 34,295評論 4 329
  • 正文 年R本政府宣布贞远,位于F島的核電站畴博,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蓝仲。R本人自食惡果不足惜俱病,卻給世界環(huán)境...
    茶點故事閱讀 39,901評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望袱结。 院中可真熱鬧亮隙,春花似錦、人聲如沸垢夹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽棚饵。三九已至煤裙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間噪漾,已是汗流浹背硼砰。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留欣硼,地道東北人题翰。 一個月前我還...
    沈念sama閱讀 46,333評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親豹障。 傳聞我的和親對象是個殘疾皇子冯事,可洞房花燭夜當晚...
    茶點故事閱讀 43,499評論 2 348

推薦閱讀更多精彩內(nèi)容