2016-02-24 219 views
-1

我們有一個巨大的Java項目,其中有許多模塊導致很多依賴關係。有效管理彈簧依賴關係

假設B依賴於A(一個Spring bean)。

在過去的時間裏,我們已經在那裏

  • A的「接口」改變和B停止運行時的工作情況,
  • A的行爲已更改,所以B繼續工作,但並不如預期。

如何避免或處理這種情況?我對流程,軟件解決方案或指南感興趣。

+0

你應該接受一個答案!還是沒有任何建議工作? –

回答

0

持續集成和測試套件應該是解決方案的一部分。當A改變依賴於A的所有東西時,都會得到重新測試。

接下來要確定什麼是公共的(即在其項目之外使用的)已知是公開的,所以每當需要知道的人都知道變化時,就知道。 看看你的團隊和代碼庫的分離。 A和B應該由同一個團隊處理嗎?它們是否應該成爲相同代碼庫的一部分?

0

聽起來像你需要爲項目編寫更好的單元測試用例。當組件A更改B的單元測試時應該失敗(測試A會自然失敗)。我會建議編寫好的單元測試用例,因爲實際上沒有其他方法可以阻止更改請求。

+0

這不是單元測試,而是集成測試。 – mosquito87

+0

是啊,所以在我看來,你可以使用一個好的單元測試來掩飾依賴關係。你需要爲依賴模塊使用模擬,這將有助於你。 –

1

我們有一個龐大的Java項目,有很多模塊導致很多 依賴關係。

數字1:

根據

Spring Framework Best Practices

不要濫用依賴注入:

至於最後一點,Spring的ApplicationContext可以創建Java對象 你,但不所有的Java對象都應該通過依賴關係 注入來創建。例如,不應通過 ApplicationContext創建域對象。 Spring是一個很好的框架,但是,就可讀性和可管理性而言,基於XML的 配置在定義多個bean時可能會成爲問題。依賴注入的過度使用會使XML配置更復雜和臃腫。請記住,使用功能強大的IDE(例如Eclipse 和IntelliJ),Java代碼比XML文件更易於讀取,維護和管理 !

所以只在有時的情況下使用依賴注入,其他明智的情況會讓你的項目混淆。

我對過程,軟件解決方案或指南感興趣。

,如果你決定使用依賴注入,還有一些其他提示:

數2:

身高setter注入了構造器注入:

Spring提供了三種類型的依賴注入:構造函數 注入,setter注入和方法注入。 構造函數注入可以確保bean不能在 中構造成無效狀態,但setter注入更靈活,並且 可管理,特別是當類具有多個屬性並且它們的某些 是可選的時。

數3:

如果B1,B2,...,BN取決於A和A已經經常更換,使用工廠類(AFactory)和依賴(BI)s到AFactory豆代替豆的一部分。那麼對於創建一個bean的每個更改,只有Afactory會受到影響,而其他Bi bean不會被更改。

A的行爲發生了變化,因此B繼續工作,但並不如預期。 您可以通過適當的集成測試來控制這些不便。

還應該設計接口,以便每個方法都有一定的明確行爲。那麼你就可以假設這些方法和行爲,並寫出B.如此改變A的實現細節,不會影響B的行爲,並且很自然的是,如果違反了A的行爲,B的行爲就會改變。實際上開發人員有責任仔細設計接口並防止出現這些問題。