溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

模塊化與組件化有什么區(qū)別

發(fā)布時間:2020-06-11 21:23:19 來源:億速云 閱讀:617 作者:元一 欄目:web開發(fā)

概念區(qū)別

對比

模塊化與組件化有什么區(qū)別 

說明

組件:簡而言之,組件就是對象。C++ Builder中叫組件,Delphi中叫部件,而在Visual BASIC中叫控件。組件是對數(shù)據和方法的簡單封裝。C++ Builder中,一個組件就是一個從TComponent派生出來的特定對象。組件可以有自己的屬性和方法。屬性是組件數(shù)據的簡單訪問者。方法則是組件的一些簡單而可見的功能。

模塊:模塊,又稱構件,是能夠單獨命名并獨立地完成一定功能的程序語句的集合(即程序代碼和數(shù)據結構的集合體)。它具有兩個基本的特征:外部特征和內部特征。外部特征是指模塊跟外部環(huán)境聯(lián)系的接口(即其他模塊或程序調用該模塊的方式,包括有輸入輸出參數(shù)、引用的全局變量)和模塊的功能;內部特征是指模塊的內部環(huán)境具有的特點(即該模塊的局部數(shù)據和程序代碼)。

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

和組件模塊近似的一對概念是庫和框架。庫的概念偏近于代碼的堆集,是分層的概念,所以對應組件化??蚣苁墙Y構化的代碼,所以應用于模塊化??蚣苁枪?,模塊化是肉。

舉例

下面我們舉例來說明。

組件化就比如公共的alert框,最初在許多頁面都有使用,后面提取出一份相同的代碼,其實就是基于代碼復用的目的。

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

漸進式開發(fā)過程

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

首先我們定義一個虛擬的產品——一款知識類應用,包含咨詢、問答、學院、直播等功能。

接下來我們逐步拆分這個產品。

如果開發(fā)時沒有考慮任何組件化模塊化開發(fā),那么此應用的所有功能都是堆積在一起的,總結起來就是高耦合,低內聚,無重用。

1.組件

那么代碼重構的第一步是什么呢?

將重復的代碼合并成為一份,也就是重用。

我們來看組件化開發(fā)的定義,它的著重點就是重用,那這一步最后的結果就是提煉出一個個組件給不同的功能使用。

這里我們可以看一下依賴關系,是具體功能依賴提煉出來的組件,組件本身之間可能也有依賴關系,但一般不多。所以我們總結組件化開發(fā)的原則就是高重用,低依賴。當然這只是相對而言。

基于這樣的認識,我們甚至于可以把資訊、問答、學院、直播等功能封裝成組件,只不過這些組件比較大,依賴可能多些,不過本質上沒有多少區(qū)別,而且實際上網上許多文章說所的模塊化開發(fā)其實就是這種組件化的“模塊”。

2.模塊

下面再說模塊,按照模塊的定義,它是以關注點進行劃分的,關注點說到底就是功能,也就是說根據我們上面的例子,資訊、問答、學院、直播可以分成不同的模塊。

我們最開始定義這個虛擬產品的時候說,它有三個特點——高耦合、低內聚、無重用。而第一點組件化開發(fā)主要是解決了重用問題,提升了部分內聚,而耦合問題則沒有涉及。

所以說我們上面可以將這個產品在邏輯上劃分為資訊、問答、學院、直播四個模塊,但在代碼層面上它們卻不是四個模塊,因為它們的代碼都是混雜在一起的。比如產品首頁,可能推薦了部分資訊、顯示了熱門問答、推送了目前的直播,而這些功能的代碼則是寫在一起的;再比如程序啟動的時候,這四個模塊都需要初始化一些數(shù)據,而初始化數(shù)據的代碼也是寫在一起的;再比如程序需要顯示未讀消息數(shù),而這幾個模塊都有自己的未讀消息數(shù)邏輯。

如果未進行模塊化開發(fā)的拆分,那么很多時候不同模塊的同一類的代碼都是直接寫在一起的,比如系統(tǒng)啟動的時候,我們會在啟動方法里直接寫多個模塊的初始化代碼。

而模塊化開發(fā)就是為了解決這一問題,即提高內聚,將分屬同一模塊代碼放到一起;降低耦合,將不同模塊間的耦合程度弱化。

高內聚是目標,但是現(xiàn)狀是有許多地方會用到多個模塊,比如啟動的時候會調用四個模塊,首頁會展示三個模塊的界面。如果要高內聚,那么必然需要這些模塊為不同的場景提供相同的方法,這就是說所有模塊要實現(xiàn)同一套多個接口。這樣主應用和模塊之間的重耦合就變成了主應用和接口耦合,接口和模塊耦合這樣的松耦合。

但這樣的簡單模塊只是輕模塊,統(tǒng)一接口較少。而統(tǒng)一定義的接口越多,模塊和統(tǒng)一接口的耦合就越高,也便是重模塊。

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

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI