在GWT MVP中,我的演示者通常有很多私有成员(事件总线,rpc,使用GWT.create()创建的消息包...)。我们一直使用“ClientFactory”将视图生成为单例,因此每次需要时都不会重新创建它们。该工厂还可以提供rpc,事件总线和其他资源。
我可以在GWT doc中阅读the main purpose of this factory is to gain access to object needed through your application. The second advantage of using a ClientFactory is that you can use it with GWT deferred binding to use different implementation classes based on user.agent or other properties.
我的问题是:如果我没有,并且永远不需要使用延迟绑定对该工厂进行不同的实现,我不能只使用静态类&检索我的依赖项而不是客户端工厂或Gin 的方法? 我不能真正抓住Gin优于这个解决方案的优势,也不能让我在某些情况下/在某些(不明显的)环境下遇到麻烦。我通常会避免服务器端代码中的静态类,因为它是多线程的,但在客户端单线程代码中,我看不到问题可能发生的地方。然而,似乎大多数人使用杜松子酒或其他解决方案...
答案 0 :(得分:3)
static
的问题不在于线程,而在于全局状态和单身。
在GWT中使用MVP的一个主要原因是能够在不需要GWTTestCase
的情况下测试您的演示者,因为它们不会直接依赖于GWT.create()
或JSNI,两者都需要浏览器环境运行(注意GWT.create()
在普通Java 中变得可用,而某些项目(如gwt-mockito或gwt-test-utils)使用字节码操作无论如何让它运行)。但即使没有MVP,这仍然是一个问题:
测试时,全球各州和单身人士都会挡路:
请参阅http://misko.hevery.com/code-reviewers-guide/flaw-brittle-global-state-singletons/