[英]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的代碼對您來說實際上是透明的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.