組件化開發和模塊化開發概念辨析

網上有許多講組件化開發、模塊化開發的文章,但你們通常都是將這兩個概念混爲一談的,並無加以區分。並且實際上許多人對於組件、模塊的區別也不甚明瞭,甚至於許多博客文章專門解說這幾個概念都有些謬誤。架構

想分清這兩個概念我以爲結合一下軟件的漸進式開發場景更容易理解。可是下面的篇幅會比較長,因此我先說結論,不耐煩的同窗能夠先看:框架

概念區別

對比模塊化

類別 目的 特色 接口 成果 架構定位
組件 重用、解耦 高重用、鬆耦合 無統一接口 基礎庫、基礎組件 縱向分層
模塊 隔離/封裝 高內聚、鬆耦合 統一接口 業務框架、業務模塊 橫向分塊

說明

組件:最初的目的是代碼重用,功能相對單一或者獨立。在整個系統的代碼層次上位於最底層,被其餘代碼所依賴,因此說組件化是縱向分層。組件化

模塊:最初的目的是將同一類型的代碼整合在一塊兒,因此模塊的功能相對複雜,但都同屬於一個業務。不一樣模塊之間也會存在依賴關係,但大部分都是業務性的互相跳轉,從地位上來講它們都是平級的。spa

由於從代碼組織層面上來區分,組件化開發是縱向分層,模塊化開發是橫向分塊,因此模塊化並無要求必定組件化。也就是說你能夠只作模塊化開發,而不作組件化開發。那這樣的結果是什麼樣的呢?就是說你的代碼徹底不考慮代碼重用,只是把相同業務的代碼作內聚整合,不一樣模塊之間仍是存在大量的重複代碼。這樣的成果也算是作到了模塊化,只不過咱們通常不會這樣而已。.net

和組件模塊近似的一對概念是庫和框架。庫的概念偏近於代碼的堆集,是分層的概念,因此對應組件化。框架是結構化的代碼,因此應用於模塊化。框架是骨,模塊化是肉。模塊化開發

講到這給你們介紹一個快速開發平臺:力軟快速開發平臺(配置型快速開發平臺,內含代碼生成器、工做流、APP開發、移動端等多種功能)blog

舉例

下面咱們舉例來講明。接口

組件化就好比公共的alert框,最初在許多頁面都有使用,後面提取出一份相同的代碼,其實就是基於代碼複用的目的。路由

模塊化就好比一個資訊功能,它自己只在這一個地方使用,沒有複用的需求,但系統啓動的時候要初始化它的數據,首頁顯示的時候要展現它的數據,顯示紅點的時候要拉取它的未讀數。這樣一來應用中就有不少地方涉及到它的代碼。若是咱們將它看作一個總體,那麼資訊模塊和主應用的耦合性就很是高了。因此咱們也要把它封裝成模塊,把相關的代碼放到獨立的單元文件裏,並提供公共方法,這就是高內聚的要求。

漸進式開發過程

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

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

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

若是開發時沒有考慮任何組件化模塊化開發,那麼此應用的全部功能都是堆積在一塊兒的,總結起來就是高耦合,低內聚,無重用。

1.組件

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

將重複的代碼合併成爲一份,也就是重用。

咱們來看組件化開發的定義,它的着重點就是重用,那這一步最後的結果就是提煉出一個個組件給不一樣的功能使用。

這裏咱們能夠看一下依賴關係,是具體功能依賴提煉出來的組件,組件自己之間可能也有依賴關係,但通常很少。因此咱們總結組件化開發的原則就是高重用,低依賴。固然這只是相對而言。

基於這樣的認識,咱們甚至於能夠把資訊、問答、學院、直播等功能封裝成組件,只不過這些組件比較大,依賴可能多些,不過本質上沒有多少區別,並且實際上網上許多文章說所的模塊化開發其實就是這種組件化的「模塊」。

2.模塊

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

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

因此說咱們上面能夠將這個產品在邏輯上劃分爲資訊、問答、學院、直播四個模塊,但在代碼層面上它們卻不是四個模塊,由於它們的代碼都是混雜在一塊兒的。好比產品首頁,可能推薦了部分資訊、顯示了熱門問答、推送了目前的直播,而這些功能的代碼則是寫在一塊兒的;再好比程序啓動的時候,這四個模塊都須要初始化一些數據,而初始化數據的代碼也是寫在一塊兒的;再好比程序須要顯示未讀消息數,而這幾個模塊都有本身的未讀消息數邏輯。

若是未進行模塊化開發的拆分,那麼不少時候不一樣模塊的同一類的代碼都是直接寫在一塊兒的,好比系統啓動的時候,咱們會在啓動方法裏直接寫多個模塊的初始化代碼。

而模塊化開發就是爲了解決這一問題,即提升內聚,將分屬同一模塊代碼放到一塊兒;下降耦合,將不一樣模塊間的耦合程度弱化。

高內聚是目標,可是現狀是有許多地方會用到多個模塊,好比啓動的時候會調用四個模塊,首頁會展現三個模塊的界面。若是要高內聚,那麼必然須要這些模塊爲不一樣的場景提供相同的方法,這就是說全部模塊要實現同一套多個接口。這樣主應用和模塊之間的重耦合就變成了主應用和接口耦合,接口和模塊耦合這樣的鬆耦合。

但這樣的簡單模塊只是輕模塊,統一接口較少。而統必定義的接口越多,模塊和統一接口的耦合就越高,也即是重模塊。

而咱們通常講的路由問題其實只是解決模塊間耦合的問題,並非模塊化開發的必然需求,更多時候是基於產品上的動態化要求,只不過咱們通常都會在這個時間考慮這一事情而已,就像咱們不會只作模塊化開發同時不作組件化開發同樣。

講到這裏,模塊和組件的區別就已經很明顯了。

轉載: https://blog.csdn.net/jhq1990/article/details/79191008(略有修改)

相關文章
相關標籤/搜索