Java设计问题:这是一个很好的设计吗?

时间:2011-04-05 15:26:00

标签: java xml design-patterns

我正在编写一个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

3 个答案:

答案 0 :(得分:2)

一般来说,它是一个很好的设计(你可能需要更多的接口等,并且有各种改进)。

更大的问题是,在许多方面,这是车轮的重新发明。有许多框架可以处理从POJO(java对象)到结构化文本格式(例如XML或JSON)的映射。最重要的是,有许多命令框架的一般实现。在提供自己的实现之前,可能值得研究可用的选项。

答案 1 :(得分:0)

原则上,是的,这就是事情的运作方式。但我认为你应该将不同的问题分开。

基本上我会说你有一个需要执行命令并返回结果的服务层。这个层应该对XML一无所知,所以我设计了普通的Java Object模型,然后担心将它绑定到XML基础结构,可能使用现有的XML映射技术,如XStream。

答案 2 :(得分:0)

正如其他人所说,设计看起来很不错。为了让您的生活更轻松,您应该查看Simple XML来解析XML - &gt; Java和从Java对象创建XML。