我正在编写一个Java客户端,它通过HTTP / XML与远程服务器通信。
服务器以XML格式向我的客户端发送命令,如下所示:
<command>
<name>C1</name>
<param>
.....
</param>
</command>
大约有10个或更多不同的命令(C1,C2,......),每个命令都有不同的参数集。
我的客户端将处理该命令,然后使用执行结果响应服务器,如下所示:
<C1>
<code>200</code>
<desc>xxx</desc>
</C1>
我只熟悉C,但对Java和OOP来说却很陌生
所以,我的问题很简单,如何以OOP方式优雅地设计以下逻辑?
1.将XML字符串转换为XML对象
2.找到基于XML的'name'元素的对应执行程序,并解析params
3.执行命令以及参数
4.将结果转换为XML对象
5.将XML对象转换为XML字符串
这是一个好的设计吗?
1.为每个命令定义一个抽象基类和许多子类,包括以下方法:
void parseCommand(MyXMLObject obj);
void execute();
MyXMLObject generateResult();
或只是一个简单的方法:
MyXMLObject execute(MyXMLObject obj);
和这些字段:
String mCommandName;
int mRetCode;
String mRetDesc;
2.然后定义工厂类以基于XML对象返回其中一个子类的实例。
3.逻辑部分代码:
MyXMLObject obj = MyXMLUtil.getXMLObject(XMLString);
MyCommand command = MyCommandFactory.getCommand(obj);
MyXMLObject retObj = command.execute();
String retStr = MyXMLUtil.getString(retObj);
...//network operation
答案 0 :(得分:2)
一般来说,它是一个很好的设计(你可能需要更多的接口等,并且有各种改进)。
更大的问题是,在许多方面,这是车轮的重新发明。有许多框架可以处理从POJO(java对象)到结构化文本格式(例如XML或JSON)的映射。最重要的是,有许多命令框架的一般实现。在提供自己的实现之前,可能值得研究可用的选项。
答案 1 :(得分:0)
原则上,是的,这就是事情的运作方式。但我认为你应该将不同的问题分开。
基本上我会说你有一个需要执行命令并返回结果的服务层。这个层应该对XML一无所知,所以我设计了普通的Java Object模型,然后担心将它绑定到XML基础结构,可能使用现有的XML映射技术,如XStream。
答案 2 :(得分:0)
正如其他人所说,设计看起来很不错。为了让您的生活更轻松,您应该查看Simple XML来解析XML - &gt; Java和从Java对象创建XML。