(मैंने क्लीन कोड नहीं पढ़ा है और बहुत जावा नहीं जानता हूं।)
क्या यह कई छोटे संस्थाओं को बनाने के विचार को लागू करने के लिए समझ में आता है, प्रत्येक एक स्पष्ट रूप से परिभाषित जिम्मेदारी के साथ, नामस्थानों पर?
हां, जैसा कि यह कई वर्गों और कई कार्यों में रिफैक्टिंग के साथ होता है।
क्या संबंधित वर्गों के एक छोटे समूह को हमेशा एक नाम स्थान में लपेटा जाना चाहिए?
वास्तव में जवाब दिए बिना: हाँ, आपको कम से कम एक शीर्ष-स्तरीय नाम स्थान का उपयोग करना चाहिए। यह परियोजना, संगठन, या जो कुछ भी आपको पसंद है, पर आधारित हो सकता है, लेकिन कुछ वैश्विक नामों का उपयोग करने से नाम संघर्ष कम हो जाएगा। इसके तहत एक और नाम रखने के लिए एक एकल नामस्थान केवल एक वैश्विक नाम पेश करता है। (बाहरी "सी" कार्यों को छोड़कर, लेकिन यह सी इंटरऑपरेबिलिटी के कारण है और केवल अन्य बाहरी "सी" कार्यों को प्रभावित करता है।)
क्या संबंधित वर्गों के एक छोटे समूह को उन्हें समर्पित एक नाम स्थान में लपेटा जाना चाहिए? शायद। खासकर यदि आप अपने आप को उन वर्गों पर एक सामान्य उपसर्ग का उपयोग करते हुए पाते हैं - फ्रोबेरटहिंग, फ्रोबेरथैंग, फ्रोबेरडोहोहेकी - आपको एक नाम स्थान पर विचार करना चाहिए - फ्रोबेर :: थिंग और इसी तरह। यह अभी भी आपके रूट नेमस्पेस या किसी अन्य नेमस्पेस के अंतर्गत होगा यदि वे किसी बड़े प्रोजेक्ट का हिस्सा हैं।
क्या यह बहुत सारे छोटे वर्गों की जटिलता को प्रबंधित करने का तरीका है, या बहुत सारे नामस्थानों के प्रबंधन की लागत निषेधात्मक होगी?
उपसर्ग नाम के उपरोक्त उदाहरण को लेते हुए, फ्रोबेर का प्रबंधन करना कठिन नहीं है :: थ्रोबबरहिंग की तुलना में थिंग। यह कुछ उपकरणों के साथ भी आसान हो सकता है, जैसे कि प्रलेखन और कोड पूरा करना। ADL के साथ एक अंतर है, लेकिन यह आपके पक्ष में काम कर सकता है: संबंधित नामस्थानों में कम नाम ADL का पता लगाने के लिए सरल बनाते हैं, और आप विशिष्ट नामों को एक नामस्थान या किसी अन्य में इंजेक्ट करने के लिए घोषणाओं का उपयोग कर सकते हैं।
Namespace उपनाम आपको एक विशिष्ट संदर्भ में लंबे नामस्थान के लिए एक छोटे नाम का उपयोग करने की अनुमति देता है, जो फिर से आसान उपयोग की अनुमति देता है:
void f() {
namespace CWVLN = Company_with_very_long_name; // Example from the standard.
// In this scope, use CWVLN::name instead of Company_with_very_long_name::name.
namespace fs = boost::filesystem; // Commonly used.
}
बूस्ट पर विचार करें, जिसमें एक ही रूट नेमस्पेस है, बूस्ट, और फिर कई सबनामस्पेस - बूस्ट :: एसियो, बूस्ट :: आईओ, बूस्ट: फाइलसिस्टम, बूस्ट :: ट्यूपल्स, इत्यादि - विभिन्न पुस्तकालयों के लिए। कुछ नाम रूट नाम स्थान पर "पदोन्नत" हैं :
सभी परिभाषाएँ नामस्थान में हैं :: बूस्ट :: ट्यूपल्स, लेकिन सबसे आम नाम नेमस्पेस पर उठाए जाते हैं :: घोषणाओं के साथ बढ़ावा। ये नाम हैं: tuple, make_tuple, टाई और प्राप्त करें। इसके अलावा, रेफ और cref को सीधे :: बूस्ट नेमस्पेस के तहत परिभाषित किया गया है।
"वास्तविक" मॉड्यूल वाली भाषाओं से सबसे बड़ा अंतर यह है कि चापलूसी संरचना का उपयोग करना कितना आम है, जो ज्यादातर इसलिए होता है क्योंकि यह तब तक काम करता है जब तक कि आप नेस्टेड नामों को परिभाषित करने के लिए अतिरिक्त, विशिष्ट प्रयास न करें।