2011-10-03 49 views
1

儘管我是一名Java開發人員,並且這個問題涉及到根據Java的OSGi和模塊化,但這個問題確實適用於任何面向對象的3GL。基於組件的體系結構的粒度

我開始掌握真正的「模塊化」開發的概念,並開始真正喜歡OSGi。我有史以來第一次開始考慮以非常細粒度,可重用的專業化部署來部署罐子。然而,這種新的思維模式激起了一些問題。

在純基於組件的體系結構中,每個類都會被破壞嗎?如果不是組件應該如何精細化?每個組件都可以重複使用嗎?

確定模塊化組件的粒度應該如何使用時,有哪些「經驗法則」?提前致謝!

回答

5

我打算主要從OSGi的角度回答這個問題。

恕我直言,重要的是要區分組件模塊。 A 組件是一種編程工件:具有行爲並可能爲其他組件提供服務的東西。在實施條款中,您使用OSGi的組件模型之一(如聲明式服務)編程組件。見http://wiki.osgi.org/wiki/Component_Models_Overview

模塊是一個部署假象:它是部件和/或API的包裝成能夠圍繞被複制和安裝在各種運行時間僞影。因此可以隱式地將多個組件打包在一個模塊中,或者爲每個組件創建一個模塊。

事實上,模塊內容很容易重構,因此您不必過多擔心粒度:隨着您獲得更多OSGi體驗,您將找到適合自己需求的適當級別。但請記住以下一般建議:

  1. 將包裝在同一模塊中的組件重新部署在一起。如果其中一個組件比其他組件更頻繁地被釋放,那麼您可能通過反覆釋放未改變的組件來創建比所需組件更多的工作(例如,由下游用戶進行測試),僅僅是因爲它們碰巧與變化組件相同。
  2. 一個不能部署半個模塊。因此,模塊中的所有組件應密切相關,因此您不希望用戶希望「如果我只能在此模塊中部署組件的某些某些」...
  3. API變化非常緩慢和謹慎,而組件頻繁更換。出於這個以及其他原因,API最好部署在他們自己的API捆綁包中。請參閱http://wiki.osgi.org/wiki/Separate_API_from_Implementation
  4. 爲了確保模塊內容可以在不中斷用戶的情況下重構,請始終使用Import-Package而不是Require-Bundle表示您的依賴關係。請參閱http://wiki.osgi.org/wiki/Use_Import-Package_instead_of_Require-Bundle
+0

@Mara這裏是基於組件開發的鏈接。 http://en.wikipedia.org/wiki/Component-based_software_engineering –

+0

哇!神奇的答案@尼爾!感謝您的澄清! – IAmYourFaja

相關問題