नाम स्थान और वर्ग नाम दिशानिर्देश


15

जब बर्तन और अन्य सहायता कक्षाएं शामिल होती हैं तो मुझे अपनी कक्षाओं और सेवाओं के नामकरण में समस्याएँ होती हैं।

आप निम्नलिखित संरचना कैसे करेंगे:

EventService.cs
EventServiceUtils.cs
EventServiceValidators.cs
EventServiceCoordinator.cs

आदि...

मेरे पास उपरोक्त सेवा की समान आवश्यकताओं वाली कई सेवाएँ हैं। एक विचार इस सभी को एक उपयुक्त नामस्थान में अलग करना है, जिससे यह कुछ इस तरह दिखता है:

Services.EventService.EventService.cs //(the actual service)
Services.EventService.Validators.DateValidator.cs
Services.EventService.Validators.ParticipantValidator.cs
Services.EventService.Coordinators.ParticipantCoordinator.cs
Services.EventService.ExtensionMethods.Extensions.cs

और इसी तरह। हर नाम स्थान निश्चित रूप से एक अलग फ़ोल्डर है। लेकिन यह 100% महसूस नहीं करता है, क्योंकि DateValidatorsअन्य सेवाओं में संभवतः अधिक हैं, जिससे आसानी से अवांछित संदर्भ हो सकता है।

और Services.EventService.EventService.csनाम स्थान में वर्ग का नाम भी शामिल है, जो या तो अच्छा नहीं है। आप उपयोग कर सकते हैं Services.Event.EventService.cs, लेकिन निश्चित रूप से उस नाम की एक इकाई पहले से ही है।

यह डोमेन मॉडल है।


"मेरे पास उपरोक्त सेवा की समान आवश्यकताओं वाली कई सेवाएँ हैं।" क्या इसका मतलब यह है कि कई सेवाएं उपरोक्त कोड का उपयोग करती हैं, या कई सेवाओं को एक ही पैटर्न का पालन करते हुए अपना स्वयं का संस्करण प्रदान करने की आवश्यकता होती है?
नथनैल

कि वे एक ही पैटर्न के अपने संस्करण प्रदान करते हैं
मैटिस

जवाबों:


5

मुझे लगता है कि एक सबसे बड़ा बात आप अपने नेमस्पेसिंग सुधार करने के लिए कर सकता है दूर करने के लिए है Serviceअपने से EventServiceनाम स्थान। मैं नामस्थानों को इस तरह और भी समायोजित करूंगा:

Services.Events.EventService.cs //(the actual service)
Services.Events.EventExtensions.cs
Services.Events.ParticipantCoordinator.cs
Services.Validators.DateValidator.cs
Services.Validators.ParticipantValidator.cs

मुझे अभी भी लगता है कि हालांकि कुछ सुधार का उपयोग कर सकते हैं।

मुझे नामस्थान पसंद थे, लेकिन आजकल मुझे लगता है कि कम है। आपके नामस्थानों को गहरा घोंटना आपके कोड को बहुत अधिक क्रियाशील बना सकता है, और दूर की चीज़ों को तोड़ने से वंशानुक्रम की आपकी क्षमता कम हो जाती है। उदाहरण के लिए आपके कोड में, एक DateValidatorवर्ग आसानी से कहीं और इस्तेमाल किया जा सकता है, इसलिए इसके ऊपर कई नामस्थान नहीं होने चाहिए, क्योंकि EventService के अलावा अन्य सेवाएँ अब DateValidator वर्ग का लाभ ले सकती हैं। एक्सटेंशन विधियों पर भी यही लागू होता है। कोई समय नहीं है (कि मैं देख सकता हूं) जहां आपको एक ही समय में अपने सभी विस्तार के तरीकों को देखने की आवश्यकता होगी, इसलिए इसे उस चीज़ के साथ समूहित करने के लिए अधिक समझ में आता है जो इससे संबंधित है। इस मामले में, EventExtensionsशायद आपके लिंक हैं EventService, इसलिए तार्किक रूप से उन्हें मेरी राय में एक साथ बैठना चाहिए।


यह परियोजना बहुत बड़ी है जो इसे एक निश्चित स्तर तक नहीं तोड़ सकती है। इवेंट नाम स्थान के अंतर्गत DateValidator केवल ईवेंट-विशिष्ट मामलों को हैंडल करता है, और इस प्रकार अन्यत्र उपयोग नहीं किया जा सकता है। मुझे सेवाएं पसंद हैं। ईवेंट .EventService। मैं ऐसा कैसे नहीं सोच सकता। मुझे लगता है कि इसका समय कुछ रिफैक्टिंग के लिए है!
मटियास

@ मटियास - यह उचित है। जहां तक ​​मैं देख सकता हूं, नाम स्थान (मूल दिशानिर्देशों से परे जैसे कि सईद नीचे उल्लेख किया गया है) बहुत अधिक स्वाद का मामला है।
कार्ल निकोल

5

आप जनरल नेमिंग गाइडलाइन्स और नेम्सस्पेस नेमिंग गाइडलाइन्स क्यों नहीं पढ़ते हैं Microsoft से एक सार्वभौमिक पैटर्न का पालन करने के लिए?

मुझे लगता है कि फॉर्मूला <Company>.(<Product>|<Technology>)[.<Feature>][.<Subnamespace>]ठीक काम करता है।


2

उचित नाम स्थान डिजाइन तार्किक और भौतिक दोनों डिजाइन पर विचार करेगा।

यद्यपि नामस्थानों के लिए मूल तर्क ज्यादातर वस्तु और विधि नामों के बीच नाम की गड़बड़ी को रोकने के लिए था, यह समग्र समाधान वास्तुकला और डिजाइन में एक महत्वपूर्ण तत्व बन गया है। न केवल आप अपने वैचारिक पदानुक्रम और तार्किक डिजाइन को समझ में लाना चाहते हैं, आप शायद यह भी चाहते हैं कि आपका कोड अच्छी तरह से डिज़ाइन किए गए और आसानी से पुन: प्रयोज्य पुस्तकालयों में पैक किया जाए जिसे बाद में आसानी से अन्य परियोजनाओं और उत्पादों में बांधा जा सके। यह शायद अच्छे भौतिक डिजाइन का वांछित परिणाम है।

.NET फ्रेमवर्क को देखें और कैसे संबंधित कार्यक्षमता की इकाइयां आपको उचित आकार की असेंबली में दी गई हैं। आप एक संदर्भ और एक उपयोग कथन में छोड़ सकते हैं और अचानक आपके पास प्रासंगिक कार्यक्षमता उपलब्ध है, जो किन्हीं भी किचन सिंक में खींचे बिना हो सकती है। ऐसा इसलिए है क्योंकि .NET फ्रेमवर्क का भौतिक डिज़ाइन-जिसमें बुद्धिमान नेमस्पेसिंग शामिल है- ने भौतिक रूप से संबंधित तैनाती इकाइयों में तार्किक रूप से संबंधित कोड पैक किया है। नामस्थान और असेंबली के बीच एक उत्कृष्ट मानचित्रण बनाकर, Microsoft के .NET फ्रेमवर्क के वास्तुकारों और डेवलपर्स ने आपके काम को काफी आसान बना दिया है (बेशक कुछ बहस कर सकते हैं अन्यथा, लेकिन मैं उनके साथ खुश हूं कि उन्होंने क्या किया)।

सी # में नामकरण वास्तव में मनमाना है। आप एक दूसरे से दूर की गई असेंबली में, सबसे अजीब जगहों पर नाम स्थान रख सकते हैं। इस क्षेत्र में कोई भी उपयोगी अनुशासन वास्तव में एक सुव्यवस्थित सॉफ्टवेयर उत्पाद में आपका व्यक्तिगत योगदान है। मैं आपको हर मामले में वास्तव में क्या करना है, इसकी सलाह देने की हिम्मत नहीं करूंगा। इस उत्तर में, मैं क्या हासिल करने की उम्मीद करता हूं, यह है कि आप अपने नाम स्थान को परिभाषित करते समय भौतिक डिजाइन के साथ-साथ तार्किक डिजाइन के बारे में सोचें। जितना अधिक आप चीजों को तार्किक रूप से संबंधित और समान रूप से (शारीरिक रूप से) बनाए रखेंगे, आसान चीजें बाद में आपके लिए और दूसरों के लिए भी होंगी, जिन्हें किसी दिन आपके कोड से निपटने की आवश्यकता हो सकती है।

इसलिए, कृपया इस बारे में सोचें कि जब आप अपने नाम स्थान के मुद्दों को हल करते हैं, तो कोड और असेंबली और घटकों में आपका कोड कैसे पैक किया जाएगा!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.