2010-01-18 93 views
3

我即將構建一個將擁有自己的引擎以及前端用戶界面的系統。我想盡可能地解耦這兩個。引擎應該能夠接受命令和數據,能夠處理這些數據並返回一些結果。引擎的工作可能很長,客戶應該有能力隨時查詢引擎以瞭解其當前狀態。關於應用程序體系結構的建議

一個分離的前端/後端系統是我的新領域,我不確定最好的架構。我希望前端是基於網絡的。它將通過表單向引擎發送命令,並通過ajax調用顯示引擎輸出和當前狀態。我可能會在Tomcat中使用基於Spring的Web應用程序。

我的問題涉及發動機部件的最佳結構。這些是我正在考慮的可能性:

  • 在web應用中實現引擎作爲一組線程和數據結構。這裏的優勢是更簡單的實現,並且Web應用程序前端和引擎之間的消息傳遞將很簡單(只不過是一些共享數據結構)。缺點是前端和後端之間緊密耦合,依靠服務器容器管理引擎(例如,如果Web服務器或Web應用程序崩潰,引擎也會崩潰)。

  • 將後端實現爲獨立的Java應用程序,並通過TCP端口上的某些服務公開其功能。我喜歡這種方法,因爲它與Web服務器分離。但是,我並沒有對所需的低級網絡/通信代碼的數量感興趣。我希望更高級別的消息傳遞,抽象插座等。

  • 使用OSGi容器,如Spring DM服務器來承載Web應用程序和引擎。這種方法很好,因爲網絡代碼不存在。該引擎向OSGI容器公開服務以供Web應用程序使用。這裏的缺點是新技術的學習曲線和開銷:OSGi。此外,前端和後端保持耦合,我真的不想要。換句話說,我不能在任何舊的servlet容器上部署前端,它必須與引擎位於同一個OSGi容器中。

我有一種感覺,RMI是去這裏的路,但同樣這是一個新的技術領域對我來說,它仍然沒有解釋如何設計底層系統的體系結構。怎麼樣JMS?

謝謝你的任何建議。

回答

1

如果它將成爲一個Web應用程序,那麼就沒有必要像進行桌面應用程序前端和服務器後端那樣分離進程。所以保持簡單。

我會使用(和我使用的一個項目,我目前的工作,因爲它證明)的基礎是這種堆棧:

  • 春3
  • Web容器
  • 應用部署爲Web應用程序(WAR);
  • 對於持久性,無論是Ibatis(我的首選選項)還是JPA/Hibernate(如果您更喜歡更多的對象持久性方法);
  • 您的首選Web框架。這裏沒有簡單的答案,有幾十種可供選擇,從直接模板到更多組件化(JSF,Seam等)。掛毯/ Wicket看起來很有趣,但我也不是專家。

Spring容器完全能夠啓動一系列線程,這樣做很常見。所以你需要的是一系列組件,它們只是你的引擎。除非您有充分的理由否則,否則Web應用程序上下文中的Spring bean將變得簡單,靈活且功能強大。

在前端它取決於你想要什麼。直接的HTML可以用任何Web框架完成。即使通過一些Javascript裝飾。我使用jQuery來處理這種事情。

如果您希望前端看起來像桌面應用程序(即所謂的「豐富」UI),它只會有所不同。爲此,您需要使用Google Web Toolkit(「GWT」),可能是像JSF這樣的組件Web框架(儘管我傾向於認爲它們真的很快得到真正的混亂),或者像ExtJS,SmartClient,YUI這樣的Javascript框架,還是公平的新的Uki。

1

如果您將後端編寫爲服務,並建立XML或JSON消息格式以在客戶端和服務之間傳遞,那麼您將分離您的UI。

克里斯特的其餘評論可以適用於後端,但客戶端可以很幸福地沒有意識到它。它甚至可以成爲所有人關心的.NET實現。重點在於用例和消息,而不是後端實現。

在使用非基於HTML的UI(例如Flex)的情況下,這也會很有用。

2

如果您確實想要解耦Web應用程序和引擎,您還可以將引擎部署到不同的服務器中,並將API作爲Web服務調用(WS- *或REST)公開。

+0

+1推薦REST – medopal 2010-01-18 07:18:18

相關問題