2009-08-07 68 views
3

我是Eclipse RCP的初學者,我正嘗試爲自己構建一個應用程序,以便讓它順利。我很困惑如何實際處理模型對象。我找不到的例子可以解決我遇到的問題,所以我懷疑我會以錯誤的方式去解決問題。在Eclipse RCP應用程序中存儲「全局」數據的位置?

說我需要用一個持有認證用戶信息的類來初始化應用程序。我用我的WorkbenchWindowAdvisor(錯誤的地方?)來執行一些初始化(例如認證)來決定要顯示的視圖。一旦完成,就會顯示一個視圖。現在,該視圖需要訪問我以前檢索/生成的用戶信息。

問題是,該視圖應該如何獲取該數據?該視圖連接在plugin.xml。我看不到任何可以將數據提供給視圖的方式。所以我認爲該視圖必須以某種方式檢索它。但是,它是從什麼地方找回來的?我想到在IApplication實現中加入靜態變量,但是那樣感覺不對。任何意見或指針非常讚賞。謝謝。

+0

類似於:http://stackoverflow.com/q/2457117/565879 – Buttons840 2011-10-21 17:45:38

回答

5

您在這裏遇到的問題在我看來不是RCP相關的。它更多的是一個建築問題。您的觀點與業務邏輯和有線連接!

  1. 的Model-View-的Controler(MVC)
  2. 模型 - 視圖 - 演示者(MVP)

你可以找到很多: 該解決方案可通過兩種(通用)設計模式來實現有關此信息在網絡上。我將使用MVP爲您的特定問題指出可能的解決方案。

您將需要創建幾個項目。一個當然是一個RCP插件,可以叫它rcp.view。現在您創建另一個,它不會使UI貢獻(只有org.eclipse.core.runtime開始),並將其稱爲rcp.presenter。爲了簡化,這個插件也將成爲現在的模型。

下一步:

  1. 的rcp.presenter添加到 依賴rcp.view的(其 重要的是,主持人沒有 參照視圖)
  2. 出口所有包,你是 打算在rcp.presenter 創建,所以他們是可見的
  3. 在rcp.presenter創建一個n結界面 IPerspective具有一些方法 等(showLogiDialog(),showAdministratorViews(用戶用戶),showStandardViews(用戶用戶)
  4. 創建類PerspectivePresenter即需要IPerspective在構造和保存它在屬性中
  5. 在rcp中。鑑於去你的觀點,實現你的界面IPerspective,並在構造函數創建一個新的參考主持人=新PerspectivePresenter(本)
  6. 呼叫presenter.load()和implenent 這在主持人也許像這

代碼:

public void load() 
{ 
    User user = view.showLoginDialog(); // returns a user with the provided name/pw 
    user.login(); // login to system/database 
    if(user.isAdministrator()) 
    view.showAdministratorViews(user); 
    else 
    view.showStandardViews(user); 
} 

正如你所看到的,認爲只是創建到主持人的參考,這爲r負責所有業務邏輯,主持人告訴視圖顯示什麼。因此,在您的Perspective中,您可以實現這些接口函數,並且在每個函數中您都可以以不同的方式設置您的Perspective。

對於每個View來說,它都以相同的方式,您需要一個視圖的演示者來執行操作,並告訴視圖(使用界面)顯示和傳遞最終數據。該觀點不關心邏輯。這在使用JFace-Databindings時也非常有用(只有綁定的數據被傳遞給視圖)。例如,WorkbenchWindowAdisor只會創建應用程序中所需的所有內容。其他視圖,透視圖可以根據他們獲得的數據來啓用/禁用菜單等等(例如,當管理員可能想要啓用特殊的adminMenu時)。我知道這是一個相當沉重的方法,但Eclipse RCP是爲大的應用程序而設計的(如名稱所示)。所以你應該花一些時間在正確的架構上。我的第一個RCP應用就像你描述的那樣......我從來不知道在哪裏存儲東西以及如何處理所有參考。在我的工作中,我瞭解了MVP(並且我仍在學習)。理解這個概念需要一段時間,但它值得。

你可能想看看my second post at this question來獲得關於如何構建插件的另一個想法。

+1

非常感謝您花時間輸出答案!我會給它一個去看看我能否「得到」它。感謝指針。 – aberrant80 2009-08-13 09:24:33

+2

還有一件事。上面的模式實際上是MVC,因爲視圖知道模型。爲了有一個簡單的MVP,視圖不應該知道任何有關該模型的內容,並且可以通過使用JFace-Databinding來實現此目的......我剛剛意識到這一點。但是你可以按照描述開始並在稍後介紹綁定。我找到了一個很好的例子:http://rcpquickstart.com/2007/11/08/mvp-example-code/ – lostiniceland 2009-08-14 01:08:12