簡體   English   中英

如何使桌面應用程序模塊化?

[英]How to make a desktop application modular?

如何使Java桌面應用程序模塊化? 如何對模塊進行分類?

看看OSGi技術。 應用程序的每個模塊(稱為bundle)都是一個單獨的jar,OSGi負責依賴解析並動態加載bundle類路徑等。

對於桌面應用程序,我強烈建議您查看www.dynamicjava.org上的DA-Launcher。 它使您的應用程序SOOO更容易部署。 他們還有一些像動態JPA這樣的東西,對任何OSGi應用程序都很有用。

作為一個設計目標,模塊化意味着您希望應用程序由單獨的部分(模塊)組成,其中每個部分都有其責任區域,並包含與該區域相關的所有類(高內聚 ),並且這些部分之間的通信通過狹窄的方式進行,明確定義和文檔化的接口( 松散耦合 )。

您可以通過事先規划設計並在實施過程中不斷調整計划和重構代碼來實現這一目標。

在GUI,網絡通信或數據庫訪問等技術模塊(通常形成層,盡管這些可能被細分為多個模塊)和包含特定於應用程序的邏輯的域模塊之間進行區分是非常有用的。形成層。

你的意思是模塊化的Eclipse?

如果您將Java桌面應用程序基於Eclipse RCP或NetBeans RCP,您將獲得“免費”模塊化(幾乎;-))

您問題的答案實際上取決於“模塊化”的含義。

在使應用程序模塊化時,您必須考慮幾個層面的問題。

首先,您必須考慮您所尋求的“模塊化”是否是架構模態部署時間模塊性運行時模塊性

在任何情況下,每個連續級別都意味着所有先前的級別。

對於初學者 - 要使您的應用程序模塊化,您必須從架構開始。 將您的顧慮分成明確定義的清潔切割部件,這些部件具有與“外部世界”明確定義的接口。 使用良好的設計模式依賴注入以及單元可測試性設計在很大程度上可以實現模塊化設計基礎的關注點的良好分離。

從小開始,但請記住大圖。 在設計系統較大的塊(或模塊)時,請確保它們具有盡可能少的重疊區域。 每個模塊都應該對它們所處的環境幾乎沒有任何假設,只能為一個問題服務。 它需要來自它的對等體的任何服務都應該由外部初始化明確提供(最好使用依賴注入將模塊粘合到一個工作的應用程序中)。

如果您的架構是模塊化的,那么將問題分離到他們自己的部署單元(以項目罐子捆綁插件擴展或其他形式)是一項容易的任務,您可以輕松地開始混合和匹配各種模塊。部署以獲取特定應用程序實例所需的確切功能集。 這就是我所說的部署時間模塊化

在支持部署時間模塊化方面走得很遠的依賴注入框架,如GuiceSpring framefork等。

運行時模塊化我看到的方式類似於Eclipse和NetBeans插件或Mozilla擴展提供的模塊化,您可以在部署/安裝后更改應用程序模塊的配置和設置。

這意味着某種架構和基礎架構可以在應用程序初始化時或運行時動態識別新的插件/擴展。

后者還意味着必須構建所有模塊,隱含的假設是模塊使用的任何服務都可以在任何時間點輕松消失,從而額外努力確保在這個不穩定的世界中運行的代碼的健壯性。

我還推薦Eclipse RCP或者看看Netbeans RCP。 兩者非常相似。 將它們分開的一件事是Eclipse RCP使用本機GUI庫而不是Netbeans使用的Swing。

優點和缺點是,盡管您更受限於操作系統提供的那種控件,但Elcipse可能會更快一些。 Netbeans使用Swing,大多數Java開發人員可能更熟悉它,並且開發自定義控件的能力是無窮無盡的。

自從我使用Eclipse RCP以來已經有一段時間了,所以我可能錯誤地在Eclipse RCP中開發自定義控件。

他們的共同點是,開發智能和模塊化桌面應用程序很有趣,您可以在更短的時間內獲得專業外觀的應用程序!

祝好運!

您還可以查看Java Plug-in Framework,

http://jpf.sourceforge.net/

JPF可以極大地提高Java系統的模塊性和可擴展性,並最大限度地降低支持和維護成本。

嘗試使用Spring RCP

http://www.springsource.org/spring-rcp

在組織應用程序的GUI部分時......

暫無
暫無

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

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