簡體   English   中英

如何在GWT MVP體系結構中處理服務和事件總線實例?

[英]How to handle service and eventbus instances in GWT MVP Architecture?

如本指南所述,我們正在使用MVP模式開發應用程序:

http://code.google.com/webtoolkit/articles/mvp-architecture.html

創建控制器實例時,請執行以下操作:

appController = new AppController(service, eventBus);
appController.go(RootPanel.get("SOME_SLOT"));

現在,當控制器創建某個演示者時,它會執行以下操作:

sthPresenter = new SthPresenter(service, eventBus, new SthView());
sthPresenter.go();

演示者隨后將eventBus和服務保存到私有字段變量,並根據需要使用其中之一。

隨着應用程序的增長,我們有越來越多的演示者和視圖,所以問題是我們可以使用不同的方法來獲取演示者中的服務和eventBus,而無需通過每個演示者的構造函數傳遞引用。

例如,在控制器中創建一個靜態字段,然后僅使用AppController.getService()之類的方法調用它。 也許是單例模式。

對於這種設計,控制器(或其他位置)中的靜態磁場會是一個壞主意嗎? 請記住,如果有任何區別,代碼將被編譯為javascript。

我強烈建議依賴注入 (DI)。 它使您可以避免樣板代碼(單例等),全局狀態,並且通常會導致可測試的代碼。 Misko Hevery有一些非常有趣的帖子,包括非常有用的編寫可測試代碼的指南

對於GWT中的DI,您應該使用Gin-流行的Guice DI框架周圍的包裝器。 我一直在將它用於一個相當復雜的項目,僅使用DI / Gin(並思考如何最有效地應用它)肯定會導致更“干凈”的,可測試的代碼。

使用單例和觀察者模式。 確保只對通知使用高級事件,否則,將導致一場噩夢。

編譯為JavaScript的代碼對您來說實際上是透明的。

這是GWT MVP應用程序中經常遇到的情況。 在我的應用程序中,我使用依賴項注入(與GIN一起 )將事件總線注入到演示者中。 演示者本身就是單例,可以根據需要實例化。 但是,這樣做會大大降低應用程序的可伸縮性,因為大型應用程序需要您在啟動后立即實例化許多演示者。

您自己可能需要正確解決此問題。 我建議您看一下GWT平台框架 ,該框架處理了與GWT MVP應用程序相關的許多更困難的問題,包括演示者和視圖的延遲實例化,歷史記錄管理,有效的代碼拆分等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM