【发布时间】:2014-05-28 00:10:34
【问题描述】:
我们在 GWT 中有一个客户端服务器应用程序。来自客户端浏览器的用户将获得所提供服务的选项。
我想通过单个 RPC(远程过程调用)方法发送所有请求。这意味着我会发送一个字符串,代表服务,服务器会收到这个字符串并返回结果。
现在,由于这将通过单个 RPC 请求,我只能选择向客户端返回单一类型的结果,并且它必须是可序列化的(不能返回 java 对象)。
例如,用户可以想要 Users ,应用程序将返回用户对象列表,或者用户可以想要交易,服务器将返回 List 交易对象,或者将来用户可以要求 Apple 和服务器将返回一个字符串。
想要收集所有服务并将其置于策略或命令模式下,但每个服务可以返回不同的类型,我该如何解决这个问题?或者你们认为哪种模式最好?
我能想到的最好的办法是有一个 Wrapper 对象,它将包含所有服务的所有不同返回类型,在服务器上设置它,并在客户端获取结果,但它看起来有点乱。
感谢任何建议。
请注意服务器执行 Java 代码 (Servlet),所以这是一个 Java 问题,客户端基本上是 Java,但有限制,因为 GWT 在编译时将其转换为 JavaScript。
谢谢。
【问题讨论】:
-
我想到的另一种方法是有一个标记接口(例如 Returnable),并将每个返回类型包装在接口周围并投射到客户端。仍然看起来像代码气味。请帮忙。
-
我不想听起来粗鲁,但我认为你问错了问题。 “通过单个 RPC(远程过程调用)方法发送所有请求”有什么意义?如果这样做,您将失去 Java(和 GWT)静态类型,这是它的主要优势之一。
-
您好,谢谢,一点也不粗鲁,我只是想设计一种方法,这样我就可以强制执行打开关闭原则,而不需要我在每次引入新服务时更新和编辑代码。虽然最好只从客户端发送一个字符串,但让 Spring 获取正确的 bean,将其放在策略模式中获取结果并将其显示在客户端上
-
我想我只是没有足够的关于您的域的信息。我想我明白你的意思,但我无法想象拥有新类型的新服务并且不需要新代码的用例。
标签: java gwt design-patterns client-server rpc