概念區(qū)別
對比
| 類別 | 目的 | 特點 | 接口 | 成果 | 架構(gòu)定位 |
|---|---|---|---|---|---|
| 組件 | 重用、解耦 | 高重用、松耦合 | 無統(tǒng)一接口 | 基礎(chǔ)庫、基礎(chǔ)組件 | 縱向分層 |
| 模塊 | 隔離、封裝 | 高內(nèi)聚、松耦合 | 統(tǒng)一接口 | 業(yè)務(wù)框架、業(yè)務(wù)模塊 | 橫向分塊 |
說明
- 組件:最初的目的是代碼重用,功能相對單一或者獨立。在整個系統(tǒng)的代碼層次上位于最底層,被其他代碼所依賴,所以說組件化是縱向分層
- 模塊:最初的目的是將同一類型的代碼整合在一起,所以模塊的功能相對復雜,但都同屬于一個業(yè)務(wù)。不同模塊之間也會存在依賴關(guān)系,但大部分都是業(yè)務(wù)性的互相跳轉(zhuǎn),從地位上來說它們都是平級的。
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ā)一樣。
原文出處: https://blog.csdn.net/blog_jihq/article/details/79191008