मैं एक ऐसे उत्पाद पर काम कर रहा हूं जिसमें किसी एक मॉड्यूल की जिम्मेदारी XML फाइलों को पार्स करना और एक डेटाबेस में आवश्यक सामग्री को डंप करना है। भले ही वर्तमान आवश्यकता केवल XML फ़ाइलों को पार्स करने के लिए है, मैं अपने पार्सिंग मॉड्यूल को इस तरह से डिजाइन करना चाहता हूं कि मैं भविष्य में किसी भी प्रकार की फ़ाइलों का समर्थन कर सकूं। इस दृष्टिकोण का कारण यह है कि हम एक विशिष्ट ग्राहक के लिए इस उत्पाद का निर्माण कर रहे हैं लेकिन निकट भविष्य में इसे अन्य ग्राहकों को बेचने की योजना बना रहे हैं। वर्तमान क्लाइंट के लिए पारिस्थितिकी तंत्र में सभी सिस्टम XML फ़ाइलों का उत्पादन और उपभोग करते हैं, लेकिन अन्य क्लाइंट के लिए ऐसा नहीं हो सकता है।
मैंने अब तक क्या कोशिश की है? (द प्रेज़ेंट) मेरे पास निम्नलिखित डिज़ाइन है जो रणनीति पैटर्न पर आधारित है। मैंने अपने डिज़ाइन को व्यक्त करने के लिए ग्रहण में कोड को जल्दी से लिख दिया है इसलिए यह बहुत अच्छा होगा यदि अन्य पहलुओं जैसे कि अपवादों को संभालने के उचित तरीके को अब अनदेखा कर दिया जाए।
पार्सर: वह रणनीति इंटरफ़ेस जो एक पार्स विधि को उजागर करता है।
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 एक xsd और scomp कमांड का उपयोग करके उत्पन्न की जाने वाली XMlBean POJO कक्षाएं हैं।
भविष्य
अगर मेरे पास भविष्य में पार्स की जाने वाली एक उत्पाद.टैक्स फ़ाइल है, तो मैं अपने खुद के POJO को परिभाषित कर सकता हूं जिसे ProductData कहा जाता है जो फ़ाइल की आवश्यक सामग्री को रखेगा। मैं तब ProductDataFlatFileParser नामक एक ठोस वर्ग बना सकता हूँ जो पार्सर इंटरफ़ेस को लागू करता है और फ़ाइल को पार्स करने के बाद मेरे लिए ProductData POJO को पार्स करने की विधि है।
क्या यह डिजाइन समझ में आता है? क्या इस डिजाइन में कोई स्पष्ट दोष हैं? जैसा कि डिजाइन खड़ा है, मैं ठोस वर्गों को एक फ़ाइल को पार्स करने के लिए एल्गोरिथ्म को परिभाषित करने की अनुमति दे रहा हूं और कंक्रीट वर्ग को यह तय करने की अनुमति देता हूं कि डेटा कहां पॉप्युलेट करना है। डिज़ाइन फ़ाइल स्वरूपों के बजाय डोमेन ऑब्जेक्ट्स पर अधिक निर्भर करता है। क्या यह खराब चीज़ है? मैं अपने डिजाइन में सुधार कैसे कर सकता हूं, इस पर कोई भी जानकारी बहुत सराहना की जाएगी।