2012-03-20 66 views
1

我們正在開發一個使用GWTP(GWT 2.4)的新應用程序。GWTP模型改變事件

關於主持人式的設計方式有很多文章 - 每個組件的責任,他們之間的溝通 - 但是對模型組件的關注較少。

在我們的應用程序中,我們使用GWTP的動作並從服務器接收一些DTO,我們主要是在CRUD上進行操作。 我們有一些每個DTO的UI-Entity包裝。這個UI-Entity包含所有需要的元數據以查看它(它具有什麼屬性,它們的顯示名稱等),併爲所有屬性提供set/get。

我們想知道如何傳播模型更改事件。 正如我所看到的,有兩種方法:

  1. UI-Entity引發事件。
  2. Action從服務器回調事件。

我認爲,這兩種方法之間的最大區別在於,第一個選項,使模型「活」 - 如果用戶在做變化,他們都反映在應用程序中,即使不會被髮送到服務器。在第二種選擇中,只有在服務器中實際更改數據時,應用程序纔會知道數據更改的事件。

正如我所看到的那樣 - 通常您需要兩種方法,但我找不到支持第一種方法的示例:通常在考慮第一種方法時 - 它指出它比MVP更像MVC設計。

您認爲如何? 有什麼建議嗎?

回答

0

對於第一種情況,你應該能夠使用一個PropertyChangeEvent具有某種聽衆註冊,通常,如果你有一個文本框,也將是對這一領域的屬性更改偵聽器,然後每當場地改變時,一些事件就會被開到公交車上。當然,你仍然需要從UI綁定到模型對象(我建議Gwittir,它很好地完成了所有這些)。

第二個問題是類似的,服務器通過你已有的任何方式進行回調,然後在總線上觸發一個事件,說「字段有什麼新值!!!」,並且在那指出各個領域(應註冊並聆聽)可以決定是否傾聽該事件並做出適當反應。

因此,基本上,您的字段應該正在監聽總線,並且每當模型更改時(無論是從服務器還是ui端),都應該有一條消息發送到總線,以便任何感興趣的監聽器都可以處理該更改。這將設計分解並處理兩種情況,並簡化了複雜的窗口小部件級別的交互。

我不認爲這個設置以任何有意義的方式違反了MVP,成爲一個最純粹的(如我框架MVP),你可以讓你的演示者聽公交車,然後告訴視圖改變,但對我來說,似乎就像一個毫無意義的抽象層,耦合和錯誤源,以及稍後的更多工作。

讓我知道如果這是一個錯誤問題的答案,我會編輯,如果我不瞭解問題的微妙之處。