2011-11-26 48 views
1

我目前正在爲我創建的Java應用程序開發GUI。我想將GUI保留在與客戶其餘部分分開的過程中。這背後的理由是:在單獨的過程中擁有GUI

  • 降低了崩潰的風險。例如。 GUI中的OutOfMemoryError不會使客戶端的其他部分崩潰。
  • 我得到一個免費的API。如果我稍後想要允許其他人以編程方式訪問客戶端,我可以讓他們使用GUI所使用的相同API。
  • 我在SWT中編寫GUI,客戶端使用IntelliJ創建。由於Eclipse具有更好的SWT支持,所以將它們分開是有意義的,這樣我就可以將Eclipse用於GUI代碼,對於其餘的IntelliJ則可以使用Eclipse。

我現在的問題是:我應該使用什麼技術來將客戶端的界面暴露給GUI? RMI是首先想到的。但是,這具有將API限制爲僅Java的缺點。我也不確定RMI適合大規模部署的情況(例如,它如何處理本地防火牆?)。但是,我不想排除它。

我還要提到的是,我有一些部署,要求,以及:

  • 必須能夠爲運行非管理員。
  • 必須能夠處理限制性本地防火牆限制。
  • 部署必須是自動的(這是一個大型的消費者應用程序),並且可以在Windows,Mac OS X和Linux上運行。

鑑於這些限制,您將使用哪種解決方案?

+0

*「我應該使用什麼技術來將客戶端界面暴露給GUI?「*我可能誤解了這個問題,但我傾向於簡單地將它添加到GUI的運行時類路徑中直接實例化類並使用它們的方法比使用RMI或類似技術簡單得多, t很明白GUI崩潰並希望保持客戶端運行。保持客戶端運行的目的是什麼? –

+0

客戶端是一個備份程序,如果GUI崩潰,我仍然想保持備份運行。能夠訪問客戶端的類實例AFAIK,僅僅通過設置運行時類路徑是不可能的 – Yrlec

+0

*「客戶端是一個備份程序。如果圖形用戶界面崩潰,我仍然希望保持備份的運行狀態。「*如果有人將電源線連接到電腦上,它會使備份恢復的更好嗎?在單獨運行B/U API進程(在同一臺機器上)不會對此有幫助;;) –

回答

2

我後來面臨同樣的情況,除了後端是在Python中,而GUI是在java中。

重要點考慮:

  • 如何靈活和細化的GUI和後端之間的接口需要。你想從GUI上做一件事嗎? 5種不同的東西? 10? 50?圖形用戶界面的緊密結合 - 它是否會知道/正在調用後端的各種方法?
  • 輸出如何從後端傳送到GUI。它可以簡單地寫入STDOUT或臨時文件嗎?它需要更精細的東西嗎?
  • 輸出的格式。理想情況下,它應該很容易解析,這表明XML或JSON可能是您最好的選擇。

您可能會發現JSON-RPC有用:它是遠程方法調用分離程序的標準。


總而言之,我很難說出什麼對你最好。我最終避免了RPC,並給後端一個簡單的命令行界面;輸出作爲JSON對象寫入臨時文件和STDERR。我覺得這是一個很好的決定,因爲它保持了程序之間的界面非常簡單並且不耦合。