नहीं।
मैंने छोटी और बड़ी परियोजनाओं पर दोनों तरीकों की कोशिश की है, दोनों एकल (मुझे) और डेवलपर्स की एक टीम के साथ।
मैंने पाया कि सबसे सरल और सबसे उत्पादक मार्ग प्रति प्रोजेक्ट में एक ही नाम स्थान था और सभी वर्ग उस नामस्थान में जाते थे। फिर आप जो भी प्रोजेक्ट फ़ोल्डर चाहते हैं उसमें क्लास की फाइलें डालने के लिए स्वतंत्र हैं। फ़ाइलों के शीर्ष पर हर समय बयानों को जोड़ने के बारे में कोई गड़बड़ नहीं है क्योंकि सिर्फ एक ही नाम स्थान है।
स्रोत फ़ाइलों को फ़ोल्डर्स में व्यवस्थित करना महत्वपूर्ण है और मेरी राय में सभी फ़ोल्डरों का उपयोग किया जाना चाहिए। आवश्यक है कि ये फ़ोल्डर नामस्थानों पर भी मैप करें, अनावश्यक है, अधिक काम करता है, और मैंने पाया कि संगठन के लिए वास्तव में हानिकारक था क्योंकि अतिरिक्त बोझ अव्यवस्था को प्रोत्साहित करता है।
उदाहरण के लिए इस FxCop चेतावनी को लें:
CA1020: कुछ प्रकार के
कारणों से नामस्थान से बचें : वैश्विक नामस्थान के अलावा अन्य नामस्थान में पांच से कम प्रकार के
https://msdn.microsoft.com/en-gb/library/ms182130.aspx हैं
यह चेतावनी एक सामान्य प्रोजेक्ट में नई फ़ाइलों को डंप करने के लिए प्रोत्साहित करती है। जेनरल फ़ोल्डर, या यहां तक कि प्रोजेक्ट रूट जब तक आपके पास एक नया फ़ोल्डर बनाने के औचित्य के लिए चार समान कक्षाएं नहीं हैं। क्या ऐसा कभी होगा?
फ़ाइलें ढूँढना
स्वीकृत उत्तर कहता है, "कक्षाएं आसानी से मिल जाएंगी और यह पर्याप्त कारण होने चाहिए।"
मुझे लगता है कि उत्तर में एक प्रोजेक्ट में कई नामस्थान होने का जिक्र है, जो फ़ोल्डर संरचना के लिए मैप नहीं करता है, बल्कि मैं जो सुझाव दे रहा हूं, वह एकल नेमस्पेस के साथ एक प्रोजेक्ट है।
किसी भी स्थिति में जब आप यह निर्धारित नहीं कर सकते हैं कि नेमस्पेस में कौन सी फ़ोल्डर से फाइल है, तो आप इसे विज़ुअल स्टूडियो में गो टू डेफिनिशन या खोज समाधान एक्सप्लोरर बॉक्स का उपयोग करके पा सकते हैं। इसके अलावा यह वास्तव में मेरी राय में एक बड़ा मुद्दा नहीं है। मैं अनुकूलन का औचित्य साबित करने के लिए फ़ाइलों को खोजने की समस्या पर अपने विकास के समय का 0.1% भी खर्च नहीं करता हूं।
नाम का टकराव
सुनिश्चित करें कि कई नामस्थान बनाने से प्रोजेक्ट को एक ही नाम के दो वर्ग मिल सकते हैं। लेकिन क्या यह वाकई अच्छी बात है? क्या यह संभव है कि संभव होने से बस अस्वीकार करना आसान है? एक ही नाम के साथ दो कक्षाएं लगाने से एक अधिक जटिल स्थिति बन जाती है जहां 90% समय चीजें निश्चित तरीके से काम करती हैं और फिर अचानक आपको पता चलता है कि आपके पास एक विशेष मामला है। मान लें कि आपके पास अलग-अलग नामस्थानों में परिभाषित दो आयत वर्ग हैं:
- वर्ग Project1.Image। आयत
- वर्ग Project1.Window। आयत
किसी समस्या को हिट करने के लिए संभव है कि स्रोत फ़ाइल को दोनों नामस्थानों को शामिल करना होगा। अब आपको उस फाइल में हर जगह पूरा नाम लिखना है:
var rectangle = new Project1.Window.Rectangle();
या बयान का उपयोग कर कुछ बुरा के साथ गड़बड़:
using Rectangle = Project1.Window.Rectangle;
अपनी परियोजना में एक एकल नामस्थान के साथ आप अलग-अलग आने के लिए मजबूर हैं, और मैं अधिक विवरणात्मक, इस तरह के नामों पर बहस करूंगा:
- वर्ग Project1.ImageRectangle
- वर्ग Project1.WindowRectangle
और उपयोग हर जगह समान है, आपको एक विशेष मामले से निपटने की ज़रूरत नहीं है जब कोई फ़ाइल दोनों प्रकार का उपयोग करती है।
बयानों का उपयोग कर
using Project1.General;
using Project1.Image;
using Project1.Window;
using Project1.Window.Controls;
using Project1.Shapes;
using Project1.Input;
using Project1.Data;
बनाम
using Project1;
कोड लिखते समय हर समय नामस्थान जोड़ने की सुविधा नहीं है। यह वास्तव में लगने वाला समय नहीं है, ऐसा करने के प्रवाह में ब्रेक है और सिर्फ बयानों के उपयोग से बहुत सारी फाइलों को भरना है - किस लिए? यह इसके लायक है?
प्रोजेक्ट फ़ोल्डर संरचना बदलना
यदि फ़ोल्डर नामस्थानों पर मैप किए जाते हैं, तो प्रोजेक्ट फ़ोल्डर पथ प्रभावी रूप से प्रत्येक स्रोत फ़ाइल में हार्ड-कोडित होता है। इसका मतलब है कि परियोजना में किसी फ़ाइल या फ़ोल्डर का नाम बदलने या स्थानांतरित करने के लिए वास्तविक फ़ाइल सामग्री को बदलना आवश्यक है। उस फ़ोल्डर में फ़ाइलों के नाम स्थान की घोषणा और उस फ़ोल्डर में कक्षाओं को संदर्भित करने वाली अन्य फ़ाइलों के एक पूरे समूह में बयानों का उपयोग करना। जबकि परिवर्तन खुद टूलींग के साथ तुच्छ हैं, यह आमतौर पर कई फ़ाइलों से मिलकर एक बड़ी प्रतिबद्धता में परिणत होता है, जिनकी कक्षाएं भी नहीं बदली हैं।
परियोजना में एक एकल नाम स्थान के साथ आप परियोजना फ़ोल्डर संरचना को बदल सकते हैं, लेकिन आप किसी भी स्रोत फ़ाइलों के बिना खुद को संशोधित कर सकते हैं।
विजुअल स्टूडियो अपने द्वारा बनाए गए प्रोजेक्ट फ़ोल्डर में एक नई फ़ाइल के नाम स्थान को स्वचालित रूप से मैप करता है
दुर्भाग्यपूर्ण है, लेकिन मुझे पता है कि नाम स्थान को सही करने का झंझट उनसे निपटने की परेशानी से कम है। इसके अलावा, मैं Add-> New का उपयोग करने के बजाय किसी मौजूदा फ़ाइल को कॉपी करने की आदत में हूं।
Intellisense और Object Browser
बड़ी परियोजनाओं में कई नामस्थानों का उपयोग करने के बारे में मेरी राय में सबसे बड़ा लाभ तब होता है जब किसी भी टूलिंग में कक्षाओं को देखने में अतिरिक्त संगठन होता है जो एक नामस्थान पदानुक्रम में कक्षाएं प्रदर्शित करता है। यहां तक कि प्रलेखन भी। जाहिर है कि सभी वर्गों में परियोजना के परिणामों में सिर्फ एक ही नाम स्थान है, जो श्रेणियों में टूटने के बजाय एक ही सूची में प्रदर्शित होती है। हालाँकि व्यक्तिगत रूप से मुझे कभी भी इसमें कमी या देरी नहीं हुई है, इसलिए मुझे कई नामों का औचित्य साबित करने के लिए यह एक बड़ा पर्याप्त लाभ नहीं है।
यद्यपि यदि मैं एक बड़े सार्वजनिक वर्ग के पुस्तकालय लिख रहा था, तो मैं शायद परियोजना में कई नामस्थानों का उपयोग करूंगा ताकि विधानसभा टूलींग और प्रलेखन में साफ दिखे।