[架構設計] 組件和模塊的區別

組件:主要接口從父類繼承而來,由系統基礎框架調用,開放給外部調用的接口比較少;符合開閉原則和依賴倒置原則;經過基礎架構的回調實現其複用和功能。架構

模塊:獨立的服務接口,爲無繼承耦合的其它模塊提供服務,功能或職責比較獨立,除對外提供服務外與其餘模塊耦合比較少。框架

http://blog.csdn.net/horkychen/article/details/45083467ide

組件(Component)和模塊(Module)又是一對容易混淆的名詞,也經常被用來相互替換。二者是否有差別每每取決專業背景、所在領域、以及視角。我的總結, 從設計上來看,組件強調複用,模塊強調職責(內聚、分離),或者說組件是達到可複用要求的模塊。
Module, 中文爲模塊或模組。它的核心意義是分離職責,屬於代碼級模塊化的產出。自己是一組具備必定內聚性代碼的組合,職責明確。對外的接口能夠是鬆散的,也能夠是集中的。SEI的定義以下:
   An implementation unit of software that provides a coherent set of responsibilities.
它以問題分解的形式,來解決軟件設計問題。它更強調一個內聚的概念,形式上能夠是Java中的包,也能夠是一個源代碼目錄。
 
Component,中文稱爲組件,或者構件。使用很是比較普遍,它的核心意義在於 複用,相對模塊,對於依賴性有更高的要求。
我大概整理了一下,兩個定義 (參考 Component based software programming):
  • 能夠複用的模塊,概念上與模塊基本等同,只是明顯有依賴性的要求。(最先提出時概念)。
  • Component-Based Software Development中提倡的組件定義以下(Component Software):

除了完成某個特定功能外,還要具有以下條件的代碼組合:模塊化

      • 符合特定的接口要求(交互的要求)。
      • 具備明確的上下文依賴 (複用的要求)。
它能夠獨立發佈(二進制或源代碼的形式),也能夠進行組合。這樣軟件開發就變成了組件的組裝了。
 
         和OOP中的Objects相比,一個類也能夠視爲一個組件,但更多的狀況下,組件提供了更爲高層的系統視角。Component如同一片樹林,Object只是樹。

         Eclipse中的Plugin和COM(Component Object Model)就是Component Software的典型表明。
 
 
二者的關係取決於軟件自己和視角。Eclipse框架下的一個插件可能包含若干個模塊,由於從Eclipse的角度來看,每一個Plugin是用來複用的。
而一個應用的模塊(如GUI)下也可能使用了多個組件,由於複用的是每一個控件。
 
另外也有人從發佈形式上來區分,其實也不盡然。一個模組可能以靜態庫、動態庫存在(skia被應用到一個應用中的場景),一個組件也可能以源碼的形式存在(Chromium中的Browser Component)。發佈形式實際上是取決於產品需求的,不可能準確的區分出兩個設計上的概念。
 
歡迎一塊兒討論!
 
參考:
 
轉載請註明出處:  http://blog.csdn.net/horkychen
相關文章
相關標籤/搜索