[英]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.