我看了"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子类中执行的操作,但是因为这是为服务器传递客户端对象,所以执行操作必须分开。
答案 0 :(得分:3)
结帐GWT-Dispatch以及如何使用here。
顺便说一句,this可能是引用Ray Ryan的IO谈话并构建Hello World应用程序的最佳文章之一。该应用程序使用GWT-Dispatch。
-jP
答案 1 :(得分:0)
我正在将命令模式与访问者模式结合使用。这使得它类型安全且易于扩展。
服务器端所需的只是一个处理程序存储库,可以与Request对象匹配。有很多方法可以解决这个问题。访问者是一种方式,但您可以将映射基于命名约定,或者您可以使用注入框架将请求对象映射到该类型的处理程序。
答案 2 :(得分:0)
然后由服务器决定如何处理动作对象。正如其他人所说,gwt-dispatch是寻找这个故事的服务器端部分的好地方。