組件:主要接口從父類繼承而來,由系統基礎框架調用,開放給外部調用的接口比較少;符合開閉原則和依賴倒置原則;經過基礎架構的回調實現其複用和功能。架構
模塊:獨立的服務接口,爲無繼承耦合的其它模塊提供服務,功能或職責比較獨立,除對外提供服務外與其餘模塊耦合比較少。框架
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 Development中提倡的組件定義以下(Component Software):
除了完成某個特定功能外,還要具有以下條件的代碼組合:模塊化
-
-
- 符合特定的接口要求(交互的要求)。
- 具備明確的上下文依賴 (複用的要求)。
它能夠獨立發佈(二進制或源代碼的形式),也能夠進行組合。這樣軟件開發就變成了組件的組裝了。
和OOP中的Objects相比,一個類也能夠視爲一個組件,但更多的狀況下,組件提供了更爲高層的系統視角。Component如同一片樹林,Object只是樹。
Eclipse中的Plugin和COM(Component Object Model)就是Component Software的典型表明。
二者的關係取決於軟件自己和視角。Eclipse框架下的一個插件可能包含若干個模塊,由於從Eclipse的角度來看,每一個Plugin是用來複用的。
而一個應用的模塊(如GUI)下也可能使用了多個組件,由於複用的是每一個控件。
另外也有人從發佈形式上來區分,其實也不盡然。一個模組可能以靜態庫、動態庫存在(skia被應用到一個應用中的場景),一個組件也可能以源碼的形式存在(Chromium中的Browser Component)。發佈形式實際上是取決於產品需求的,不可能準確的區分出兩個設計上的概念。
歡迎一塊兒討論!
參考: