คำถามเกี่ยวกับการออกแบบ Java: นี่เป็นการออกแบบที่ดีหรือไม่?

ฉันกำลังเขียนไคลเอนต์ 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 และแยกวิเคราะห์พารามิเตอร์
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

person bhh    schedule 05.04.2011    source แหล่งที่มา


คำตอบ (3)


โดยทั่วไปแล้ว มันเป็นการออกแบบที่ดี (คุณอาจต้องการอินเทอร์เฟซเพิ่มเติม และอื่นๆ อีกมากมาย และมีการปรับแต่งที่หลากหลาย)

ปัญหาที่ใหญ่กว่าก็คือนี่คือการคิดค้นล้อขึ้นมาใหม่ในหลาย ๆ ด้าน มีเฟรมเวิร์กมากมายที่จัดการการแมปตั้งแต่ POJO (ออบเจ็กต์ Java) ไปจนถึงรูปแบบข้อความที่มีโครงสร้าง (เช่น XML หรือ JSON) ยิ่งไปกว่านั้น ยังมีการใช้งานกรอบคำสั่งทั่วไปอีกมากมาย อาจคุ้มค่าที่จะตรวจสอบตัวเลือกที่มีอยู่ก่อนที่คุณจะจัดเตรียมการใช้งานของคุณเอง

person Uri    schedule 05.04.2011
comment
ขอบคุณสำหรับข้อเสนอแนะของคุณ ฉันกำลังมองหา 'กรอบคำสั่ง' บางอย่าง แต่ยังไม่พบตัวอย่างที่ดี :( - person bhh; 05.04.2011
comment
@bhh: เกือบทุกบริษัทที่ฉันเคยไปมีการใช้งานรูปแบบคำสั่งที่ดีและผ่านการทดสอบแล้ว ฉันแน่ใจว่ายังมีทางเลือกโอเพ่นซอร์สด้วย (แม้ว่านี่อาจสมควรได้รับคำถาม stackoverflow แยกต่างหาก) แต่มีโซลูชันที่มีอยู่ทั่วไปสำหรับการเปลี่ยนจาก POJO ไปเป็นรูปแบบเช่น XML หรือ JSON - person Uri; 06.04.2011

โดยหลักการแล้ว ใช่แล้ว สิ่งต่างๆ ทำงานอย่างนั้น แต่ฉันคิดว่าคุณควรแยกข้อกังวลต่างๆ ออก

โดยพื้นฐานแล้ว ฉันจะบอกว่าคุณมีชั้นบริการที่ต้องดำเนินการคำสั่งและส่งกลับผลลัพธ์ เลเยอร์นี้ไม่ควรมีความรู้เกี่ยวกับ XML เลย ดังนั้นฉันจะออกแบบโมเดล Java Object ธรรมดาแล้วกังวลเกี่ยวกับการเชื่อมโยงเข้ากับโครงสร้างพื้นฐาน XML ของคุณ ซึ่งอาจใช้เทคโนโลยีการแมป XML ที่มีอยู่ เช่น XStream

person Sean Patrick Floyd    schedule 05.04.2011
comment
JAXB เป็นมาตรฐาน (JSR-222) สำหรับการแมป object-to-XML: bdoughan.blogspot.com/2010/10/ XStream เป็นเทคโนโลยีการทำให้เป็นอนุกรม: xstream.codehaus.org/faq.html#Uses - person bdoughan; 05.04.2011

อย่างที่คนอื่นพูดการออกแบบก็ดูค่อนข้างดี เพื่อให้ชีวิตของคุณง่ายขึ้น คุณควรดูที่ Simple XML เพื่อแยกวิเคราะห์ XML -> Java และสร้าง XML จากวัตถุ Java

person Aaron Digulla    schedule 05.04.2011
comment
ตรวจสอบ: bdoughan.blogspot.com/2010 /10/ - person bdoughan; 05.04.2011
comment
@เบลส: +1 ปกติฉันมักจะสงสัยเกี่ยวกับมาตรฐาน Java แต่เมื่อคุณเปรียบเทียบ Simple และ JAXB เคียงข้างกัน ฉันจะลองใช้กับโปรเจ็กต์ต่อไป - person Aaron Digulla; 08.04.2011