2010-09-06 70 views
2

我是新來GWT和長期的差距後,又回到了編程...我的問題是關於GWT MVP的實現,我已經通過下面的帖子不見了,他們是相當有益的,但我仍然有一些疑問控制器在實現MVP模式的gwt應用程序中應該扮演什麼角色?

What are MVP and MVC and what is the difference? What's your recommendation for architecting GWT applications? MVC, MVP or custom messaging solution?

我認爲MVP的GWT教程(http://code.google.com/webtoolkit/articles/mvp-architecture.html)也有位指示(AppController中)在地方,一些答覆是在水平位指示在沒有主持人的管理。所以我的問題是Controller在MVP模式實現中的角色應該是什麼?

我們應該從哪裏啓動異步服務器調用,演示者或控制器,例如,如果我必須保存記錄,應該從演示者調用服務器功能(調用DAO並保存記錄),或者演示者應使用後置事件事件總線和控制器作用於事件並調用服務器功能進行保存。

回答

0

的GWT教程頁面,您linked to說,有關的AppController:

要處理的邏輯,是不是具體 任何演講,並在應用層,而不是駐留 ,我們將 介紹AppController的組件。

所以這是多個演示者,視圖和模型(可能是多個模型)之間的粘合劑。它也處理瀏覽器歷史記錄。也許還有一些不是特定於某個演示者的東西。

至於服務器調用:有幾種選擇,但我個人不會從演講者從視圖中做到這一點,也沒有 - 我會使用一個模型的偵聽器。原因是,多個視圖和演示者可以在一個模型上一起工作。當他們改變模型時,這個改變應該被髮送到服務器。也許你不想立即這樣做,但在發送之前收集一些更改。在這種情況下,你可以設置一個定時器 - 這是由AppController完成的。

+0

感謝您的回答,您能否詳細介紹一下Model listener,它是否像演示者會使用eventBus.fireEvent觸發事件,以及爲許多演示者共享的模型偵聽器將處理事件,偵聽器將調用服務器功能。 – 2010-09-07 00:19:16

+0

@Saket:我不會爲此使用EventBus。我會根據[Observer模式](http://en.wikipedia.org/wiki/Observer_pattern)實現一個'Model'類(它實際上只是幾行代碼),並且只要模型觸發模型更改事件更改(如何觸發這些變化有一些變化,一個簡單的變化就是在任何模型更改時手動調用「fireChangeEvent」方法)。其中一個模型監聽器將負責將更改發送到服務器(或將它們排入隊列以供稍後發送)。 – 2010-09-07 00:58:57

0

在回答你最後一段時,我想說你應該在主持人那裏做,如果有什麼東西(一些按鈕)在視圖上應該這樣做。演示者從邏輯上看與觀點緊密相關(從技術上講,它應該弱結合,僅通過接口而不是實現)。如果你想將記錄保存在某個未明確從視圖中調用的動作中,我不會在演示者中這樣做。

+0

感謝響應,我下面類似的東西,想刪除記錄從聯繫人視圖我呼籲從發言者自身的服務器,但是當我不得不調用其他視圖ContactsEditView我做到這一點通過控制器,我做了單獨的類來維持歷史 – 2010-09-07 00:32:50

相關問題