接口的種類(API和SPI)
從接口的被調用方式和被實現方式看,接口有API和SPI之分,見下圖:

API和SPI在物理組織方式上的建議(可根據情況選擇其一)
- 位於獨立的Assembly中。
- 位於調用方的Assembly中。
API和SPI的演化方式:
-
- API可以增加功能,最好保持穩定。
- SPI可以減少功能,最好保持穩定。
API和SPI的交互方式見下圖:

如何實例化接口(避免不了的問題)
- 簡單工廠(三種工廠模式都引入了新的抽象,因此最終還是要用簡單工廠創建抽象的。適用於根據上下文實例化不同實例的場景)。
- 服務定位器(適用於實例化邊界對象或根對象的場景)。
- 依賴注入容器(適用於多數場景,推薦用這種方式)。
從面向接口編程的角度考慮,為什么采用OSGI?
剛才我們介紹了接口和如何實例化接口,OSGI只是更進一步,允許你動態的管理具體實現Assembly的生命周期。多數應用可能不需要這種動態,但是如果您發現OSGI對程序的侵入性不大(它唯一的要求就是面向接口編程),而您已經早就習慣了面向接口編程,那么OSGI對於您來說應該不是大問題。
