簡體   English   中英

在開發基於模塊或插件的系統時應該如何開始?

[英]How should I start when developing a system based on modules or plugins?

我打算開發一個完全基於模塊的系統。 系統庫應該支持查找插件,啟動它們並能夠為這些模塊提供通信方式。 理想情況下,應該能夠放入新模塊並隨意抽出未使用的模塊,並且模塊應該能夠使用彼此的功能(如果可用)。

該系統應該用作仿真系統的基礎,其中許多東西發生在不同的模塊中,而其他模塊可能希望基於此做某事。

我打算開發的系統將采用Java語言。 我看到它的方式,我打算為每個模塊都有一個包含子文件夾的文件夾,其中包含一個XML,用於描述模塊的信息,例如名稱,可能會引發哪些事件,類似的東西。 我想我可能需要編寫一個自定義的ClassLoader來處理這些東西。

問題是,我不知道我的想法是否真的有水,當然,我打算建立一個工作原型。 但是,我之前從未使用過真正的模塊化系統,而且我不確定解決這個問題的最佳方法是什么。

我應該從哪里開始? 在開發這種系統時是否存在常見問題和陷阱? 如何在保持隔離的同時使模塊相互通信(即,移除模塊和使用它的另一個模塊保持理智)? 是否有任何我可以閱讀的指南,規范或文章可以給我一些關於從哪里開始的想法? 如果它們基於Java會更好,但這不是必需的,因為我現在正在尋找的是想法,而不是代碼。

任何反饋都表示贊賞。

你一定要看OSGi 它旨在成為Java 組件/插件機制。 它允許您模塊化您的代碼(在所謂的bundle中)並在運行時更新bundle。 您還可以完全隱藏實現包,使其免受其他包的不必要訪問,例如。 僅提供API。

Eclipse是第一個實現和使用OSGi的主要開源項目,但他們沒有充分利用它(沒有重新啟動就沒有插件安裝/更新)。 如果你從頭開始,它將為你提供一個非常好的插件系統框架。

Apache Felix是一個完整的開源實現(還有其他的,比如Eclipse Equinox )。

如果沒有詳細介紹,您應該關注Spring ,熟悉OSGI或Eclipse RCP框架也會為您提供一些您需要記住的基本概念。

另一個選項是Java 1.6中添加的ServiceLoader

他們有很多方法可以做到,但簡單的事情可以通過使用Reflection。 您在文件的XML文件名中寫入(這將是一個真實的類)。 你可以檢查它是什么類型,然后用反射創建它。 該類可以有一個通用接口,可以讓您查找外部文件/類是否真的是您的模塊之一。 以下是有關Reflexion的一些信息。

您還可以使用像這個SourceForge這樣的預編碼框架鏈接文本 ,它將為您提供創建模塊/插件的第一步。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM