मान लें कि हमारे पास एक ऑब्जेक्ट है जो हार्डवेयर के एक टुकड़े की कॉन्फ़िगरेशन का प्रतिनिधित्व करता है। तर्क के लिए, एक तापमान नियंत्रक (TempController)। इसमें एक संपत्ति, सेटपॉइंट तापमान शामिल है।मॉडल को अपने प्रतिनिधित्व से अलग करने के लिए ऑब्जेक्ट ओरिएंटेड तरीका
मैं किसी अन्य डिवाइस में उपयोग के लिए एक फाइल करने के लिए इस विन्यास को बचाने के लिए की जरूरत है। फ़ाइल प्रारूप (स्वरूप ए) पत्थर में सेट है। मैं नहीं चाहता कि TempController ऑब्जेक्ट फ़ाइल प्रारूप के बारे में जान सके ... यह उस ऑब्जेक्ट के लिए प्रासंगिक नहीं है। इसलिए मैं एक और ऑब्जेक्ट बनाता हूं, "FormatAExporter", जो TempController को वांछित आउटपुट में बदल देता है।
एक साल बाद हम एक नया तापमान नियंत्रक बनाते हैं, आइए इसे "एडवांस्डटेम्प कंट्रोलर" कहते हैं, न कि केवल एक सेटपॉइंट है लेकिन रेट नियंत्रण भी है, जिसका अर्थ है एक या दो और गुण। उन गुणों को संग्रहीत करने के लिए एक नया फ़ाइल प्रारूप भी आविष्कार किया गया है ... चलिए इसे FormatB कहते हैं।
दोनों फ़ाइल स्वरूपों दोनों उपकरणों का प्रतिनिधित्व करने में सक्षम हैं (मान अगर यह सेटिंग्स का अभाव AdvancedTempController उचित चूक है)। , कैसे दोनों ही मामलों को संभालने FormatBExporter कर सकते हैं 'इसा' या कुछ अन्य "धोखा दे" जिस तरह से मैं वस्तु की किस प्रकार यह पता लगाने की का उपयोग कर के बिना:
तो यहाँ समस्या है?
मेरा पहला वृत्ति प्रत्येक तापमान नियंत्रक में एक विधि है जो उस वर्ग के लिए ग्राहक निर्यातक प्रदान कर सकती है, उदाहरण के लिए, TempController.getExporter() और AdvancedTempController.getExporter()। यह एकाधिक फ़ाइल स्वरूपों का समर्थन नहीं करता है।
केवल अन्य दृष्टिकोण है कि दिमाग में स्प्रिंग्स प्रत्येक तापमान नियंत्रक कि गुण और उनके मान की सूची लौटाता में एक विधि है, और फिर फ़ॉर्मेटर कैसे उन उत्पादन के लिए तय कर सकते हैं। यह काम करेगा, लेकिन यह दृढ़ लगता है।
अद्यतन: आगे के काम पर, बाद वाला दृष्टिकोण वास्तव में अच्छी तरह से काम नहीं करता है। यदि आपके सभी प्रकार सरल हैं, लेकिन यदि आपकी गुण ऑब्जेक्ट्स हैं तो आप केवल समस्या को एक स्तर पर दबाकर समाप्त कर देते हैं ... आपको स्ट्रिंग, ऑब्जेक्ट वैल्यू की एक जोड़ी वापस करने के लिए मजबूर होना पड़ता है, और निर्यातक को यह जानना होगा कि क्या ऑब्जेक्ट्स वास्तव में उनका उपयोग करना है। तो यह सिर्फ समस्या को दूसरे स्तर पर धक्का देता है।
वहाँ कैसे मैं इस लचीला रखा हो सकता है के लिए कोई सुझाव हैं?
लागू होगा यह भी कोड अधिक परीक्षण योग्य बनाने क्योंकि यह क्योंकि बहुत आसान है सहयोगियों का मज़ाक उड़ाओ। –
यह एक स्पर्श है जो मैंने योजना बनाई थी, लेकिन मुझे यह पसंद है। यह सूची में सभी गुणों को वापस करने की लचीलापन प्रदान करता है, लेकिन इंटरफ़ेस में प्रकार की जानकारी को संरक्षित करते समय। और यह निश्चित रूप से टेस्टेबिलिटी में मदद करता है। –