ฉันกำลังทำงานกับผลิตภัณฑ์ที่ความรับผิดชอบของหนึ่งในโมดูลคือการแยกวิเคราะห์ไฟล์ XML และถ่ายโอนเนื้อหาที่ต้องการในฐานข้อมูล แม้ว่าความต้องการในปัจจุบันจะเป็นเพียงการแยกวิเคราะห์ไฟล์ XML แต่ฉันต้องการออกแบบโมดูลการแยกวิเคราะห์ในแบบที่ฉันสามารถรองรับไฟล์ประเภทใดก็ได้ในอนาคต เหตุผลสำหรับวิธีนี้คือเรากำลังสร้างผลิตภัณฑ์นี้สำหรับลูกค้าเฉพาะ แต่วางแผนที่จะขายให้กับลูกค้ารายอื่นในอนาคตอันใกล้ ระบบทั้งหมดในระบบนิเวศสำหรับลูกค้าปัจจุบันผลิตและใช้ไฟล์ XML แต่นี่อาจไม่เป็นกรณีสำหรับลูกค้ารายอื่น
ฉันพยายามทำอะไรจนถึงตอนนี้? (ปัจจุบัน) ฉันมีการออกแบบต่อไปนี้ในใจซึ่งขึ้นอยู่กับรูปแบบกลยุทธ์ ฉันได้เขียนรหัสลงในคราสอย่างรวดเร็วเพื่อถ่ายทอดการออกแบบของฉันดังนั้นมันจะดีมากหากแง่มุมอื่น ๆ เช่นวิธีการที่เหมาะสมในการจัดการข้อยกเว้นถูกละเว้นในตอนนี้
Parser:อินเตอร์เฟสกลยุทธ์ที่แสดงเมธอดการวิเคราะห์
public interface Parser<T> {
public T parse(String inputFile);
}
* เหตุผลในการใช้พารามิเตอร์ทั่วไปคืออนุญาตประเภทการส่งคืนใด ๆ รวมถึงความปลอดภัยของประเภทในเวลารวบรวม
ProductDataXmlParserคลาสที่เป็นรูปธรรมสำหรับการวิเคราะห์ไฟล์ product.xml ที่มีข้อมูลที่เกี่ยวข้องกับผลิตภัณฑ์ (ใช้ XMLBeans)
public class ProductDataXmlParser implements Parser<ProductDataTYPE> {
public ProductDataTYPE parse(String inputFile) {
ProductDataTYPE productDataDoc = null;
File inputXMLFile = new File(inputFile);
try {
productDataDoc = ProductDataDocument.Factory.parse(inputXMLFile);
} catch(XmlException e) {
System.out.println("XmlException while parsing file : "+inputXMLFile);
} catch(IOException e) {
System.out.println("IOException while parsing file : "+inputXMLFile);
}
return productDataDoc.getProductData();
}
}
โดยที่ ProductDataTYPE และ ProductDataDocument เป็นคลาส XMlBean POJO ที่สร้างขึ้นโดยใช้คำสั่ง xsd และ scomp
อนาคต
ถ้าฉันมีไฟล์ product.txt ที่จะแยกวิเคราะห์ในอนาคตฉันสามารถกำหนด POJO ของตัวเองชื่อ ProductData ที่จะเก็บเนื้อหาที่ต้องการของไฟล์ จากนั้นฉันสามารถสร้างคลาสคอนกรีตที่ชื่อว่า ProductDataFlatFileParser ซึ่งใช้อินเตอร์เฟส Parser และมีวิธีการแยกวิเคราะห์ซึ่งจะเติม ProductData POJO ให้ฉันหลังจากการแยกไฟล์
การออกแบบนี้สมเหตุสมผลหรือไม่ มีข้อบกพร่องที่ชัดเจนในการออกแบบนี้หรือไม่? ขณะที่การออกแบบย่อมาจากนี้ฉันอนุญาตให้คลาสคอนกรีตเพื่อกำหนดอัลกอริทึมในการแยกวิเคราะห์ไฟล์และให้คลาสคอนกรีตตัดสินใจว่าจะเก็บข้อมูลที่ใด การออกแบบดูเหมือนจะขึ้นอยู่กับวัตถุโดเมนมากกว่ารูปแบบไฟล์ นี่เป็นสิ่งที่ไม่ดีหรือไม่? ข้อมูลใด ๆ เกี่ยวกับวิธีที่ฉันสามารถปรับปรุงการออกแบบของฉันจะได้รับการชื่นชมอย่างมาก