नामस्थान और उसके अंदर के वर्ग के लिए एक ही नाम का उपयोग करना समस्याग्रस्त है।
यदि नाम स्थान में एक से अधिक वर्ग होते हैं, तो अन्य कक्षाओं को क्यों रखा जाएगा? यह सही नहीं लगता है, क्योंकि नामस्थान के नाम का लक्ष्य इसके भीतर सभी वर्गों का वर्णन करना है, न कि केवल एक। उदाहरण के लिए, अगर आपके पास JsonSerialization
, BinarySerialization
और XmlSerialization
एक नाम स्थान में कक्षाएं, यह भावना आपके नाम स्थान नाम के लिए होगा XmlSerialization
?
आमतौर पर क्या होता है कि किसी मौजूदा नामस्थान से एक वर्ग के निष्कर्षण के कारण, या कई वर्गों या अन्य पुनर्गठन के बीच विलय के कारण, आप खुद को एक बड़े वर्ग वाले नाम स्थान के साथ पाते हैं ; उत्तरोत्तर, छोटे वर्गों को वहां रखा जाता है क्योंकि वे मूल वर्ग से थोड़े संबंधित होते हैं। उदाहरण के लिए, एक नामस्थान LogParser
में एक एकल वर्ग हो सकता है LogParser
, और फिर कोई व्यक्ति डालता है LogConverter
, क्योंकि यह पार्सर से काफी संबंधित है, फिर LogSearcher
, आदि। यहाँ समस्या यह है कि नामस्थान का नाम नहीं बदला गया था: जैसे ही LogConverter
जोड़ा गया था, नाम को LogsProcessing
या, बस, को बदल दिया जाना चाहिए था Logs
।
यदि नामस्थान में केवल एक वर्ग होता है, तो यह कोड संगठन के भीतर किसी समस्या का संकेत हो सकता है।
जबकि मैंने कुछ बार उन स्थितियों को देखा है जहां एकांत वर्ग के सिद्धांतों के साथ एक एकल वर्ग कोड बेस में किसी भी चीज़ से बहुत अलग था और इसलिए इसे समर्पित नाम स्थान में रखा गया था, ऐसे मामले दुर्लभ हैं। अधिक बार, यह एक समस्या का संकेत है। इसी तरह, कोई भी चीज आपको एक एकल विधि वाली कक्षा होने से नहीं रोकती है, लेकिन अधिक बार नहीं, ऐसी कक्षाएं समस्या का संकेत देती हैं।
यहां तक कि अगर आपके नाम स्थान में केवल एक ही वर्ग है, तो आमतौर पर कक्षा का नामकरण करते समय अधिक विशिष्ट होने का एक तरीका है, और नाम स्थान का नामकरण करते समय अधिक सामान्य है। एक ऐसे अनुप्रयोग की कल्पना करें, जो अन्य बातों के साथ-साथ, ABC प्रारूप में लिखी गई फ़ाइलों को DEF प्रारूप में परिवर्तित करना चाहिए। रूपांतरण को व्यावसायिक वस्तुओं से / के लिए किसी भी डीरियलाइज़ेशन / क्रमांकन की आवश्यकता नहीं होती है, और नियमित अभिव्यक्तियों का एक गुच्छा लगाने से किया जाता है जो कि रूपांतरण वर्ग के भीतर रखे जाने के लिए पर्याप्त हैंAbcToDefConverter
। सभी रूपांतरण तर्क लगभग दस अन्योन्याश्रित विधियों में लगभग 80 एलएलओसी लेते हैं- ऐसी स्थिति की तरह प्रतीत होता है जहाँ न तो मौजूदा वर्ग को विभाजित करने की कोई आवश्यकता है, न ही अतिरिक्त कक्षाएं बनाने की। चूंकि आवेदन के शेष भाग का रूपांतरणों से कोई लेना-देना नहीं है, इसलिए वर्ग को अन्य नामों के साथ अस्तित्वगत नामस्थानों में वर्गीकृत नहीं किया जा सकता है। तो एक नेमस्पेस नाम बनाता है AbcToDefConverter
। जबकि इसमें कुछ भी गलत नहीं है, एक अधिक सामान्य नाम का उपयोग भी कर सकता है, जैसे कि Converters
। पायथन जैसी भाषाओं में, जहां छोटे नामों को प्राथमिकता दी जाती है और पुनरावृत्ति को फेंक दिया जाता है, यह भी बन सकता है converters.Abc_To_Def
।
इसलिए, जिन वर्गों में वे सम्मिलित हैं, उनके नामनामों के लिए अलग-अलग नामों का उपयोग करें। एक वर्ग के नाम से संकेत मिलता है कि वर्ग क्या कर रहा है, जबकि नाम स्थान का नाम उजागर करना चाहिए कि सभी वर्गों में क्या सामान्य है।
वैसे, उपयोगिता वर्ग प्रकृति द्वारा गलत हैं: कुछ विशिष्ट, जैसे कि मनमानी परिशुद्धता अंकगणित, के बजाय वे सब कुछ शामिल करते हैं जो अन्य वर्गों में अपना रास्ता नहीं ढूंढते हैं । यह केवल Miscellaneous
एक डेस्कटॉप पर एक निर्देशिका के रूप में बुरा नामकरण है - ऐसा कुछ जो संगठन की कमी का संकेत है।
नामकरण एक कारण के लिए मौजूद है: बाद में सामान खोजने की आवश्यकता होने पर अपने जीवन को आसान बनाने के लिए। आप जानते हैं कि यदि आपको एक चार्ट बनाने की आवश्यकता है, तो आप "चार्ट" या "प्लॉट" खोजने की कोशिश कर सकते हैं। जब आपको किसी एप्लिकेशन को चालान बनाने के तरीके को बदलने की आवश्यकता होती है, तो आप "चालान [ई / आईएनजी]" या "बिल" की खोज करेंगे। इसी तरह, एक ऐसे मामले की कल्पना करने की कोशिश करें, जहाँ आप खुद से कहेंगे: "एचएम, यह सुविधा शायद मिसकैर में मिलनी चाहिए"। मैं नहीं कर सकता।
.NET फ्रेमवर्क को देखें। उन वर्गों के अधिकांश उपयोगिता वर्ग नहीं हैं? मेरा मतलब है, उनके पास व्यापार डोमेन के साथ कुछ चीजें हैं। अगर मैं एक वित्तीय ऐप, या एक ई-कॉमर्स वेबसाइट, या अगले जनरल एजुकेशन प्लेटफॉर्म पर काम करता हूं, तो एक्सएमएल को सीरीज़ करना या फाइलें पढ़ना या एसक्यूएल क्वेरी करना या लेनदेन करना सभी उपयोगी सामान हैं। हालांकि, उन्हें बुलाया नहीं गया है , UtilitySerialization
या UtilityTransaction
वे Utility
नाम स्थान में नहीं हैं । उनके पास उचित नाम हैं, जो संभव होने पर (और आसान, धन्यवाद .NET डेवलपर्स!) उन्हें मेरी आवश्यकता होने पर खोजने के लिए बनाते हैं।
आपकी कक्षाओं के लिए वही आता है जिसे आप आमतौर पर अपने ऐप्स में पुनः उपयोग करते हैं। वे उपयोगिता वर्ग नहीं हैं। वे कक्षाएं हैं जो कुछ चीजें करते हैं, और जो चीजें वे करते हैं वे वास्तव में कक्षाओं के नाम होने चाहिए।
कल्पना कीजिए कि आपने कुछ कोड बनाए हैं जो इकाइयों और इकाइयों के रूपांतरण से संबंधित हैं। आप इसे नाम दे सकते हैं Utility
और अपने सहयोगियों से नफरत कर सकते हैं; या आप इसे नाम दे सकते हैं Units
और UnitsConversion
।