我的系统成功地将对象从客户端传递到 servlet。然而,它是原始的,因为它是为迎合 Java 1.1 而构建的。它传递的消息对象由一个 int (代表大约七十种类型之一)和一个需要解析的令牌字符串组成(令牌可能包含一个列表、对象列表等)。不好!
因此,我希望将其重构为 Java 1.5。使用 enum 而不是 int 肯定是一种改进,但我不确定如何发送其余的消息。创建 70 个不同的类来表示每种类型肯定不是正确的方法。
关于我应该如何重构它的任何指示?
我的系统成功地将对象从客户端传递到 servlet。然而,它是原始的,因为它是为迎合 Java 1.1 而构建的。它传递的消息对象由一个 int (代表大约七十种类型之一)和一个需要解析的令牌字符串组成(令牌可能包含一个列表、对象列表等)。不好!
因此,我希望将其重构为 Java 1.5。使用 enum 而不是 int 肯定是一种改进,但我不确定如何发送其余的消息。创建 70 个不同的类来表示每种类型肯定不是正确的方法。
关于我应该如何重构它的任何指示?
无需创建不同的类来表示每种类型的消息。您创建一个具有所需属性的消息类。像这样的东西:
public class Message implements Serializable{
private Long id;
private String msgText;
//other necessary properties
public Message(){
this(0, "default message");
}
public Message(Long id, String msgText){
setId(id);
setMsgText(msgText);
//etc
}
//getters and setters
}
然后根据需要创建对象。例如:
Message m1 = new Message(9, "The Eagle has landed");
//serialize m1 to server
Message m2 = new Message(27, "The Wren has landed");
//serialize m2 to the server
等等。
您还可以使用xStream将对象序列化为 XML 并再次返回对象。
第一个问题:为什么你觉得有必要做出改变?是因为当前系统不支持您计划添加的某些功能吗?还是只是为了打扫而进去打扫?如果是后者,我强烈建议让睡虫撒谎。
第二个问题:我假设这是一个小程序。你会计划使用不同的前端吗?或者将此服务器公开为通用服务?如果不是,那么我回到第一个问题。如果是,那么您几乎肯定希望远离特定于语言的序列化。
如果您打算公开为服务,那么遵循一些“标准”服务协议是一个好主意。REST 可能是最简单的 POST-ing XML 有效负载。你也可以做 SOAP,但我一直认为这是矫枉过正。
或者,您可以使用标准的 URL 编码的 POST ......这应该比将所有内容包装在 XML 中更容易实现。