1. स्थैतिक बनाम उदाहरण
मुझे लगता है कि अच्छे ओओ डिज़ाइन और क्या नहीं है, इसके बारे में बहुत स्पष्ट दिशानिर्देश हैं। समस्या यह है कि ब्लॉग जगत अच्छे को बुरे और बदसूरत से अलग करना मुश्किल बनाता है। आप किसी प्रकार के संदर्भ का समर्थन कर सकते हैं, यहां तक कि सबसे खराब अभ्यास का भी आप सोच सकते हैं।
और सबसे खराब अभ्यास मैं ग्लोबल स्टेट के बारे में सोच सकता हूं, जिसमें आपके द्वारा बताए गए स्टैटिक्स और सभी के पसंदीदा सिंगलटन शामिल हैं। इस विषय पर मिस्को हेवरी के क्लासिक लेख के कुछ अंश ।
निर्भरता को वास्तव में समझने के लिए, डेवलपर्स को कोड की प्रत्येक पंक्ति को पढ़ना चाहिए। यह दूरी पर स्पूकी एक्शन का कारण बनता है: जब परीक्षण सूट चल रहा है, तो एक परीक्षण में उत्परिवर्तित वैश्विक स्थिति अप्रत्याशित रूप से विफल होने के लिए एक बाद या समानांतर परीक्षण का कारण बन सकती है। स्थैतिक निर्भरता को मैनुअल या ग्लिस निर्भरता इंजेक्शन का उपयोग करके तोड़ें।
दूरी पर स्पूकी एक्शन तब होता है जब हम एक ऐसी चीज चलाते हैं जिसे हम मानते हैं कि वह अलग-थलग है (क्योंकि हमने कोई संदर्भ नहीं दिया है) लेकिन सिस्टम के दूर के स्थानों में अप्रत्याशित बातचीत और राज्य परिवर्तन होते हैं जिसके बारे में हमने ऑब्जेक्ट को नहीं बताया था। यह केवल वैश्विक स्थिति के माध्यम से हो सकता है।
आपने पहले शायद इस तरह से नहीं सोचा होगा, लेकिन जब भी आप स्टेटिक स्टेट का उपयोग करते हैं, तो आप गुप्त संचार चैनल बना रहे होते हैं और एपीआई में उन्हें स्पष्ट नहीं करते हैं। संभावित अंतर को समझने के लिए कोड की हर पंक्ति को पढ़ने के लिए डिस्टेंस फोर्स डेवलपर्स पर स्पूकी एक्शन, डेवलपर उत्पादकता कम करती है और टीम के नए सदस्यों को भ्रमित करती है।
यह बात उबलती है कि आपको किसी भी तरह की स्थिर स्थिति की आपूर्ति नहीं करनी चाहिए, जिसमें किसी प्रकार का संग्रहित राज्य हो। केवल एक ही स्थान पर मैं स्टैटिक का उपयोग करता हूं, निरंतर स्थिरांक के लिए, और मुझे इस बारे में गलतफहमी है।
2. इनपुट पैरामीटर्स और रिटर्न वैल्यूज बनाम मेथड्स विथ नॉन
आपको यह महसूस करने की ज़रूरत है कि वे तरीके जिनमें कोई इनपुट पैरामीटर नहीं है और कोई आउटपुट पैरामीटर नहीं है, वे किसी तरह के आंतरिक रूप से संग्रहीत स्थिति पर काम करने की गारंटी देते हैं (अन्यथा, वे क्या कर रहे हैं?)। कर रहे हैं पूरे भाषाओं कि संग्रहीत राज्य से बचने के विचार पर बनाया जाता है।
किसी भी समय आपके पास संग्रहीत स्थिति है, आपके पास साइड-इफेक्ट्स की संभावना है, इसलिए सुनिश्चित करें कि आप हमेशा इसका उपयोग दिमाग से करते हैं। इसका मतलब है कि आपको परिभाषित इनपुट और / या आउटपुट के साथ कार्यों को प्राथमिकता देना चाहिए ।
और, वास्तव में, ऐसे फ़ंक्शंस, जिन्होंने इनपुट और आउटपुट को परिभाषित किया है, परीक्षण करना बहुत आसान है - आपको यहां एक फ़ंक्शन चलाने की ज़रूरत नहीं है और वहां पर जाकर देखें कि क्या हुआ था, और आपको कहीं संपत्ति स्थापित करने की आवश्यकता नहीं है इससे पहले कि आप परीक्षण के तहत फ़ंक्शन चलाते हैं।
आप इस प्रकार के फ़ंक्शन को स्टैटिक्स के रूप में सुरक्षित रूप से उपयोग कर सकते हैं । हालाँकि, मैं नहीं करूंगा, क्योंकि अगर मैं बाद में उस फ़ंक्शन के कुछ अलग कार्यान्वयन का उपयोग करना चाहता था, तो नए कार्यान्वयन के साथ एक अलग उदाहरण प्रदान करने के बजाय, मैं कार्यक्षमता को बदलने के लिए कोई रास्ता नहीं है।
3. अतिव्यापी बनाम विचलित
मुझे सवाल समझ नहीं आ रहा है। 2 अतिव्यापी तरीकों से क्या फायदा होगा?
4. निजी बनाम सार्वजनिक
कुछ भी उजागर न करें जिसे आपको उजागर करने की आवश्यकता नहीं है। हालांकि, मैं निजी का बहुत बड़ा प्रशंसक नहीं हूं। मैं C # डेवलपर नहीं, बल्कि ActionScript डेवलपर हूं। मैंने एडोब के फ्लेक्स फ्रेमवर्क कोड में बहुत समय बिताया है, जो कि 2007 में लिखा गया था। और उन्होंने निजी बनाने के लिए कुछ बहुत ही बुरे विकल्प बनाए, जो इसे अपनी कक्षाओं को विस्तारित करने की कोशिश कर एक बुरा सपना बनाता है।
इसलिए जब तक आपको नहीं लगता कि आप एडोब डेवलपर्स से 2007 से बेहतर वास्तुकार हैं (आपके प्रश्न से, मैं कहूंगा कि आपके पास कुछ और साल पहले आपके पास यह दावा करने का मौका है), आप शायद संरक्षित करने के लिए बस डिफ़ॉल्ट करना चाहते हैं। ।
आपके कोड उदाहरणों के साथ कुछ समस्याएं हैं, जिसका अर्थ है कि वे अच्छी तरह से नहीं हैं, इसलिए ए या बी को चुनना संभव नहीं है।
एक बात के लिए, आपको संभवतः अपने ऑब्जेक्ट निर्माण को इसके उपयोग से अलग करना चाहिए । तो आप आमतौर पर new XMLReader()
जहां यह प्रयोग किया जाता है के बगल में अपना अधिकार नहीं होगा ।
इसके अलावा, जैसा कि @djna कहती है, आपको अपने XML रीडर उपयोग में आने वाले तरीकों का इनकैप्सुलेट करना चाहिए, ताकि आपके API (उदाहरण उदाहरण) को सरल बनाया जा सके:
_document Document = reader.read(info);
मुझे नहीं पता कि C # कैसे काम करता है, लेकिन जब से मैंने कई वेब तकनीकों के साथ काम किया है, मुझे संदेह होगा कि आप हमेशा XML दस्तावेज़ को तुरंत वापस नहीं कर पाएंगे (शायद एक वादा या भविष्य के प्रकार के अलावा ऑब्जेक्ट), लेकिन मैं आपको C # में एसिंक्रोनस लोड को संभालने के तरीके के बारे में सलाह नहीं दे सकता।
ध्यान दें कि इस दृष्टिकोण के साथ, आप कई कार्यान्वयन बना सकते हैं जो एक पैरामीटर ले सकते हैं जो उन्हें बताता है कि एक XML ऑब्जेक्ट को कहां / क्या पढ़ना और वापस करना है, और अपनी परियोजना की जरूरतों के आधार पर उन्हें स्वैप करें। उदाहरण के लिए, आप किसी डेटाबेस से, स्थानीय स्टोर से, या अपने मूल उदाहरण के अनुसार, URL से सीधे पढ़ सकते हैं। यदि आप एक स्थिर विधि का उपयोग करते हैं तो आप ऐसा नहीं कर सकते।