【问题标题】:How can I implement the command pattern in Java?如何在 Java 中实现命令模式?
【发布时间】:2010-01-22 20:13:28
【问题描述】:

我看了"Google Web Toolkit Architecture: Best Practices for Architecting Your GWT App",但我无法弄清楚服务器端应该如何工作。

幻灯片 21 显示:

/** The name Command is taken */
interface Action<T extends Response> { }

interface Response { }

interface ContactsService extends RemoteService {
  <T extends Response> T execute(Action<T> action);
}

interface ContactsServiceAsync {
  <T extends Response> void execute(Action<T> action,
      AsyncCallback<T> callback);
}

我认为这意味着我可以创造

public ResponseSubclass execute(ActionSubclass action) { ... }

当它与我的确切参数匹配时,gwt 会选择该方法,但事实并非如此。目前我正在使用:

if (action.getClass().getName() == ActionSubclass.class.getName())
{
    return (T) execute((ActionSubclass)action);
}

但这意味着我每次添加动作时都必须继续向该方法添加 ifs,并且必须使用未经检查的强制转换。有没有更好的方法来完成这项工作?

注意:根据我在其他地方读到的内容,命令模式通常会包括要在 Ac 子类中执行的操作,但是因为这是传递一个客户端对象,以便服务器对其执行一些操作,所以该操作的执行必须分开。

【问题讨论】:

    标签: java gwt


    【解决方案1】:

    结帐GWT-Dispatch 以及如何使用它here

    顺便说一句,this 可能是引用 Ray Ryan 的 IO 演讲并构建 Hello World 应用程序的最佳文章之一。该应用程序使用 GWT-Dispatch。

    -JP

    【讨论】:

      【解决方案2】:

      我将命令模式与访问者模式结合使用。这使其类型安全且易于扩展。

      在服务器端,您只需要一个可以与 Request 对象匹配的处理程序存储库。有很多方法可以处理这个问题。访问者是一种方式,但您可以仅根据命名约定进行映射,也可以使用注入框架将请求对象映射到该类型的处理程序。

      【讨论】:

        【解决方案3】:

        然后由服务器决定如何处理操作对象。正如其他人所说,gwt-dispatch 是寻找这个故事的服务器端部分的好地方。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-01-14
          • 2011-01-13
          • 2020-08-28
          • 2013-12-07
          • 1970-01-01
          • 2021-01-19
          • 2013-03-14
          • 2015-02-10
          相关资源
          最近更新 更多