मैं SOLID डिजाइन सिद्धांतों के लिए काफी नया हूं । मैं उनके कारण और लाभों को समझता हूं, लेकिन फिर भी मैं उन्हें एक छोटी परियोजना के लिए लागू करने में विफल हूं, जिसे मैं SOLID सिद्धांतों का उपयोग करने के लिए एक व्यावहारिक अभ्यास के रूप में प्रतिबिंबित करना चाहता हूं। मुझे पता है कि एक एप्लिकेशन को बदलने की कोई आवश्यकता नहीं है जो पूरी तरह से काम करता है, लेकिन मैं इसे वैसे भी रिफ्लेक्टर करना चाहता हूं, इसलिए मुझे भविष्य की परियोजनाओं के लिए डिज़ाइन अनुभव प्राप्त होता है।
एप्लिकेशन में निम्न कार्य है (वास्तव में इससे बहुत अधिक है लेकिन इसे सरल रखें): इसे एक XML फ़ाइल को पढ़ना है जिसमें डेटाबेस टेबल / कॉलम / व्यू आदि की परिभाषाएँ हैं और एक SQL फ़ाइल बना सकते हैं जिसे बनाने के लिए उपयोग किया जा सकता है एक ORACLE डेटाबेस स्कीमा।
(ध्यान दें: कृपया इस बात पर चर्चा करने से परहेज करें कि मुझे इसकी आवश्यकता क्यों है या मैं XSLT का उपयोग क्यों नहीं करता हूं और इसी तरह, कारण भी हैं, लेकिन वे ऑफ-टॉपिक हैं।)
एक शुरुआत के रूप में, मैंने केवल टेबल्स और बाधाओं को देखने के लिए चुना। यदि आप स्तंभों को अनदेखा करते हैं, तो आप इसे निम्न तरीके से बता सकते हैं:
एक बाधा एक तालिका का हिस्सा है (या अधिक सटीक, एक रचनात्मक तालिका का हिस्सा), और एक बाधा भी एक अन्य तालिका को संदर्भित कर सकती है।
सबसे पहले, मैं समझाता हूं कि आवेदन अभी क्या दिखता है (SOLID लागू नहीं):
फिलहाल, एप्लिकेशन में एक "तालिका" वर्ग है जिसमें तालिका के स्वामित्व वाले बिंदुओं की सूची और इस तालिका को संदर्भित करने वाली बाधाओं की एक सूची है। जब भी कोई कनेक्शन स्थापित होता है, तो बैकवर्ड कनेक्शन भी स्थापित हो जाएगा। तालिका में एक createStatement () विधि है जो बदले में प्रत्येक बाधा के createStatement () फ़ंक्शन को कॉल करती है। कहा विधि स्वयं उनके नाम को पुनः प्राप्त करने के लिए कनेक्शन का उपयोग स्वामी तालिका और संदर्भित तालिका में करेगी।
जाहिर है, यह ठोस पर लागू नहीं होता है। उदाहरण के लिए, परिपत्र निर्भरताएं हैं, जिन्होंने आवश्यक "कोड" / "हटाने" के संदर्भ में कोड को फूला हुआ है और कुछ बड़े ऑब्जेक्ट अवरोधक हैं।
तो कुछ सवाल हैं:
- क्या मुझे निर्भरता इंजेक्शन का उपयोग करके परिपत्र निर्भरता को हल करना चाहिए? यदि ऐसा है, तो मुझे लगता है कि बाधा को इसके निर्माण में मालिक (और वैकल्पिक रूप से संदर्भित) तालिका प्राप्त होनी चाहिए। लेकिन मैं तब एक ही मेज के लिए बाधाओं की सूची पर कैसे दौड़ सकता था?
- यदि तालिका वर्ग दोनों स्वयं की स्थिति (उदाहरण के लिए तालिका का नाम, तालिका टिप्पणी आदि) और बाधाओं को जोड़ता है, तो क्या ये एकल जिम्मेदारी सिद्धांत के बारे में सोच रहे हैं?
- मामले में 2. सही है, क्या मुझे तार्किक व्यापार परत में एक नया वर्ग बनाना चाहिए जो लिंक का प्रबंधन करता है? यदि हां, तो 1. स्पष्ट रूप से प्रासंगिक नहीं रह जाएगा।
- क्या "createStatement" विधियों को तालिका / बाधा कक्षाओं का हिस्सा होना चाहिए या क्या मुझे उन्हें भी स्थानांतरित करना चाहिए? यदि हां, तो कहां करें? प्रत्येक डेटा भंडारण वर्ग (यानी टेबल, बाधा, ...) प्रति एक प्रबंधक वर्ग? या प्रति लिंक प्रबंधक श्रेणी बनाएं (3. के समान)?
जब भी मैं इनमें से किसी एक सवाल का जवाब देने की कोशिश करता हूं, तो मैं खुद को हलकों में दौड़ता हुआ पाता हूं।
समस्या स्पष्ट रूप से बहुत अधिक जटिल हो जाती है यदि आप कॉलम, इंडेक्स और इतने पर शामिल होते हैं, लेकिन अगर आप लोग मुझे सरल टेबल / कांस्ट्रेन्थ चीज़ के साथ मदद करते हैं, तो शायद मैं अपने दम पर बाकी काम कर सकता हूं।