91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

模塊化與組件化有什么區別

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

概念區別

對比

模塊化與組件化有什么區別 

說明

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

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

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

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

舉例

下面我們舉例來說明。

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

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

漸進式開發過程

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

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

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

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

1.組件

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

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

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

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

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

2.模塊

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

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

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

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

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

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

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

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

向AI問一下細節

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

AI

仲巴县| 大姚县| 崇文区| 土默特左旗| 东乡县| 浏阳市| 林西县| 八宿县| 玉环县| 南充市| 潜江市| 宜兴市| 平乐县| 黔东| 勃利县| 南华县| 桦甸市| 沂水县| 东源县| 青铜峡市| 芮城县| 泰宁县| 兰考县| 石城县| 汉川市| 嘉兴市| 罗城| 大埔区| 墨玉县| 观塘区| 教育| 兴海县| 合作市| 浦东新区| 瑞安市| 德格县| 招远市| 朝阳市| 绵竹市| 临潭县| 乳山市|