gpt4 book ai didi

gwt - 使用静态类而不是客户端工厂或使用 gin 进行依赖注入(inject)?

转载 作者:行者123 更新时间:2023-12-04 20:22:03 24 4
gpt4 key购买 nike

在 GWT MVP 中,我的演示者通常有很多私有(private)成员(事件总线、rpc、使用 GWT.create() 创建的消息包...)。我们一直在使用“ClientFactory”来生成单例 View ,因此不会在每次需要时都重新创建它们。该工厂还可以提供rpc、事件总线和其他资源。

我可以读入 GWT doc 这个工厂的主要目的是通过你的应用程序获得对所需对象的访问。使用 ClientFactory 的第二个优点是您可以将它与 GWT 延迟绑定(bind)一起使用,以根据 user.agent 或其他属性使用不同的实现类。

我的问题是:如果我不需要并且永远不会需要具有延迟绑定(bind)的工厂的不同实现,我不能只使用静态类和方法来检索我的依赖项而不是客户端工厂或 Gin ?我无法真正捕获 Gin 相对于此解决方案的优势,也无法在某些时候/在某些(不明显的)情况下让我陷入麻烦。我通常会避免在服务器端代码中使用静态类,因为它是多线程的,但在客户端单线程代码中,我看不出哪里会出现问题。然而,似乎大多数人都使用 Gin 或其他一些解决方案......

最佳答案

static 的问题不在于线程,而是关于全局状态和单例。

在 GWT 中使用 MVP 的主要原因之一是能够在不需要 GWTTestCase 的情况下测试您的演示者,因为它们不会直接依赖于 GWT.create() 或 JSNI,两者都需要浏览器环境 才能运行(请注意,GWT.create()普通 Java 中变得可用,和一些项目,如 gwt-mockito 或 gwt-test-utils 使用字节码操作来使其运行)。但即使没有 MVP,这仍然是一个问题:

测试时全局状态和单例会妨碍您:

  • 您的测试不是孤立的(它们依赖于全局状态,因此同时运行的两个测试共享相同的状态,因此它们不是在受控环境中运行)
  • 您不能使用 mocks/fakes/stubs 或其他测试替身,因为被测系统直接使用单例而不是依赖于环境传递的某些对象(在测试和生产中是不同的)

参见 http://misko.hevery.com/code-reviewers-guide/flaw-brittle-global-state-singletons/

关于gwt - 使用静态类而不是客户端工厂或使用 gin 进行依赖注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18374481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com