首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在GWT MVP架构中处理服务和eventbus实例?

如何在GWT MVP架构中处理服务和eventbus实例?
EN

Stack Overflow用户
提问于 2010-06-28 04:00:15
回答 3查看 1.9K关注 0票数 2

我们正在使用MVP模式开发一个应用程序,如本指南所述:

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

在创建控制器实例时,我们执行以下操作:

代码语言:javascript
复制
appController = new AppController(service, eventBus);
appController.go(RootPanel.get("SOME_SLOT"));

现在,当控制器创建某个presenter时,它会这样做:

代码语言:javascript
复制
sthPresenter = new SthPresenter(service, eventBus, new SthView());
sthPresenter.go();

然后,展示者将eventBus和服务保存到私有字段变量,并根据需要使用。

随着应用程序的增长,我们有越来越多的呈现程序和视图,因此问题是,我们是否可以使用不同的方法来获取呈现程序中的服务和eventBus,而无需通过每个呈现程序的构造函数传递引用。

例如,在控制器中创建一个静态字段,然后使用类似AppController.getService()的方法调用它。也许是单例模式。

在控制器(或其他地方)中设置一个静态字段对于这种设计来说不是一个好主意。请记住,代码是编译成javascript的,如果这有什么不同的话。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-06-28 14:43:16

我强烈建议使用dependency injection (DI)。它允许您避免样板代码(单例等),全局状态,并通常导致更可测试的代码。Misko Hevery有一些非常有趣的帖子,包括内容非常丰富的guide to writing testable code

对于GWT中的依赖注入,您应该使用Gin --流行的Guice DI framework的包装器。我一直在为一个相当复杂的项目使用它,仅仅使用DI/Gin (并考虑如何最有效地应用它)肯定会带来一个更“干净”、可测试的代码。

票数 1
EN

Stack Overflow用户

发布于 2010-06-28 04:46:44

使用单例和观察者模式。确保你的通知只使用高级事件,否则你将以噩梦收场。

编译成JavaScript的代码对你来说真的是透明的。

票数 0
EN

Stack Overflow用户

发布于 2010-06-28 14:48:29

这是GWT MVP应用程序中经常遇到的情况。在我的应用程序中,我使用依赖注入(通过GIN)将事件总线注入到presenters中。展示者本身是单件的,如果需要,可以被急切地实例化。但是,这样做会大大降低应用程序的可伸缩性,因为一个大型应用程序一启动就需要实例化许多presenters。

正确地自己解决这个问题可能会有点牵涉其中。我建议你看一下GWT-platform framework,它处理了许多与GWT应用相关的更困难的问题,包括展示者和视图的延迟实例化,历史管理,高效的代码拆分等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3128700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档