擴充插件範例詳解

教程將以擴充插件範本提供的範例為主。

在範例中,你可以看到一個module下有兩個module,分別是 example-tutorial-api 和 example-tutorial-plugin,他們分別是 API 模組 及 伺服器插件模組。 而伺服器插件模組是依賴於 API 模組的,因此伺服器插件建置的時候會包裝 API 模組以創建完整的伺服器插件。

架構大致如下

  • example-tutorial-api - itself

  • example-tutorial-plugin - itself + example-tutorial-api

API 部分詳解

example-tutorial-api 內的檔案很少,此取決於你提供多少服務 (API) 予你的使用者。以 example-tutorial-api 為例,此模組只提供了一個服務給使用者,它就是 ExampleService

/**
 * 範例服務
 */
public interface ExampleService {

    /**
     * 做一些很酷的事情!
     */
    void doSomethingCool();

}

除此之外,它還有一個 class,但這個並不是對外服務,而是安裝器

關於這個我們將在後頁講解。

插件部分詳解

example-tutorial-plugin 是實作 example-tutorial-api 內所有 服務的 模組,因此需要依賴於 example-tutorial-api。 它是實現服務運作的核心,因此他也是最後建置成伺服器插件的模組。

在 v0.1.1 之後,出現了幾個除實例和ELD三個組件以外的 class。關於這點我們將在後頁進行講解。

ExampleServiceImpl 是實現 ExampleService 的 class。

剩下的三個 classes, 分別是註冊為 ELD 插件所需的三個組件。

為什麼要分開模組進行開發?

這是遵從了 基於介面編程 中一句重要的名言:

Program to an interface, not an implementation.

此方式在一定程度上確保了插件的可維護性,以及讓插件師專注於接口使用而非實作本身。

以範例為例,由於 example-tutorial-plugin 是 實現 example-tutorial-api 所有服務 的 模組,因此當你需要修改實作程式碼的時候將不需要更改由其他插件師掛接並使用的 example-tutorial-api , 提高可維護性。

最后更新于