2011-04-05 91 views
1

我在寫一個通過HTTP/XML與遠程服務器通信的Java客戶端。Java設計問題:這是一個好設計嗎?

服務器發送命令給我的客戶以XML格式,像這樣:

<command> 
<name>C1</name> 
<param> 
..... 
</param> 
</command> 

有大約10或更多不同的命令(C1,C2,...),他們每個人都有不同的一組則params的。

我的客戶會處理命令,然後用執行結果響應服務器,看起來是這樣的:

<C1> 
<code>200</code> 
<desc>xxx</desc> 
</C1> 

我只熟悉C,但很新的Java和OOP,

所以,我的問題很簡單,如何以OOP方式優雅地設計以下邏輯?

1.Convert的XML字符串到一個XML對象
2.Find基於XML的 '名稱' 元件上correspoding執行者,並解析PARAMS
3.Execute與PARAMS
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.然後定義一個工廠類返回基於第子類之一的實例e XML對象。

3.邏輯部分代碼:

MyXMLObject obj = MyXMLUtil.getXMLObject(XMLString); 
MyCommand command = MyCommandFactory.getCommand(obj); 
MyXMLObject retObj = command.execute(); 
String retStr = MyXMLUtil.getString(retObj); 
...//network operation 

回答

2

一般來說,這是一個很好的設計(你可能需要更多的接口等等,並且有各種改進)。

更大的問題是,這在很多方面都是對車輪的改造。有許多框架處理從POJO(java對象)到結構化文本格式(如XML或JSON)的映射。最重要的是,命令框架有很多通用的實現。在提供自己的實現之前,可能需要調查可用的選項。

+0

感謝您的建議。我一直在尋找一些'命令框架',但還沒有找到任何好的例子:( – bhh 2011-04-05 16:13:42

+0

@bhh:幾乎每一個我去過的公司都有一個非常好的,經過測試的命令模式實現。肯定也有開源替代品(雖然這可能值得一個單獨的計算器問題),但肯定有現成的商用解決方案從POJO的打算像XML或JSON格式 – Uri 2011-04-06 04:06:58

0

原則上,是的,這是如何工作的。但我認爲你應該分開不同的擔憂。

基本上我會說你有一個服務層需要執行命令並返回結果。這個層不應該知道XML,因此我會設計普通的Java Object模型,然後擔心將它綁定到XML基礎結構,可能使用現有的XML映射技術(如XStream)。

+1

JAXB爲對象到XML映射的標準(JSR-222):http://bdoughan.blogspot.com/2010/10/how-does-jaxb-compare-to-xstream.html。 XStream有一個序列化技術:http://xstream.codehaus.org/faq.html#Uses – 2011-04-05 15:37:09

+0

@Blaise感謝,我傾向於使用JSON自己:-) – 2011-04-05 16:10:53

0

正如其他人所說,設計看起來不錯。爲了讓您的生活更輕鬆,您應該查看Simple XML來解析XML - > Java並從Java對象創建XML。

+1

退房:。HTTP:// bdoughan。 blogspot.com/2010/10/how-does-jaxb-compare-to-simple.html – 2011-04-05 16:43:07

+0

@Blaise:+1我平時可疑的Java標準,但因爲你並排比較簡單和JAXB的一面,我會爲我的下一個項目嘗試它。 – 2011-04-08 09:05:42