.net - भजन - महावीर जी के बीजना में हीरा मोती




नेट्स: फाइलों के बीच नाम स्थान को विभाजित करने के लिए सर्वोत्तम प्रथा/दिशानिर्देश (4)

अलग-अलग फाइलों में आवेदन कोड (एपीसीडीएडी) को विभाजित करने के लिए सामान्य दिशानिर्देश / गौचस क्या होना चाहिए?

मैंने पाया है कि समय के साथ, मूल फाइलें अच्छी तरह से मेल नहीं खाती हैं कि नेमस्पेस पदानुक्रम कैसे विकसित होता है। मैं आवेदन कोड के कंटेनरों को समय के साथ सहज रूप से संगठित कैसे रखूं?

फ़ाइल डिवीजनों को किस उद्देश्य का लक्ष्य होना चाहिए? कोड पोर्टेबिलिटी? चिंताओ का विभाजन? सामान्य कार्यात्मक संदर्भ? परिवर्तन की आवृत्ति? क्या वे कक्षाओं के साथ 1-1 संबंधों के लिए प्रयास करते हैं?

कई छोटी फ़ाइलों में कोड को विभाजित करने का असर क्या है जो कुछ फाइलों में समेकित बना?

मैंने अक्सर इसके बारे में सोचा है लेकिन कभी भी कोई सामान्य निष्कर्ष नहीं पहुंचाया है जो सभी स्थितियों पर लागू होता है


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

कक्षाएं

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

  • जब नेस्टेड कक्षाएं हैं, तो प्रत्येक नेस्टेड क्लास की अपनी फ़ाइल हो सकती है।

  • डिज़ाइनर कोड जैसे क्लास में ऑटो-जनरेट किए गए अंश होते हैं।

  • जब वर्ग में निश्चित भाग होते हैं जैसे कि छिपी हुई संपत्तियों का एक आम सेट या एक इंटरफ़ेस का सामान्य क्रियान्वयन।

हमारी परियोजनाओं में से एक में, हमारे पास इंटरफ़ेस का एक आम कार्यान्वयन है, जो कई वर्गों को बेनकाब करते हैं। जैसा कि हमारे पास बहुमूल्य विरासत नहीं है, हम एक मिश्रण-इन दृष्टिकोण लेते हैं जिससे हम प्रत्येक कक्षा के लिए एक अतिरिक्त फ़ाइल को स्वत: उत्पन्न करते हैं। यह स्वचालित रूप से (और मूल रूप से) के बजाय मैन्युअल रूप से किया जा सकता है

अन्य स्थितियां हैं, लेकिन यह कुछ हद तक व्यक्तिपरक है और आपकी स्वयं की प्रोजेक्ट की आवश्यकताओं पर निर्भर है।

नेमस्पेस

नामस्थानों को सामान्य रूप से आपके प्रकार के समझदार समूह पर ध्यान केंद्रित करना चाहिए। एक नेमस्पेस को किसी डेवलपर को आसानी से पता लगाना चाहिए कि वे क्या ढूंढ रहे हैं। कई छोटी परियोजनाओं के लिए, एक MyAwesomeTool जैसे एकल नामस्थान पर्याप्त है, लेकिन कई कक्षाओं के लिए एक बड़ी परियोजना के लिए अधिक तार्किक समूह की आवश्यकता होगी। ऐसी बड़ी परियोजनाएं, जैसे एसडीके या नेट बीसीएल नामों पर भंग करने के लिए निर्भर करती है, अन्यथा बड़े पैमाने पर प्रकार के बड़े संग्रह। प्रत्येक नेमस्पेस स्तर में अतिरिक्त जानकारी प्रदान की जाती है, जो कि वहां पाई जा सकती है, जैसे कि System.Windows.Forms या System.Drawing या Microsoft.VisualBasic

नाम स्थान बनाते समय, प्रत्येक विचार उस नाम स्थान और संबद्ध परियोजना के उद्देश्य से दिया जाना चाहिए। यदि परियोजना में-घर और छोटा है, तो आप अपने नामों को नाम दें, क्योंकि यह आपके प्रकार के समूह के लिए आवश्यक है; अगर यह परियोजना बाहरी रूप से दिखाई दे रही है या इसमें बहुत अधिक प्रकार के प्रकार हैं, तो तर्कसंगत और सार्थक समूह के बारे में सावधानी से सोचें जो दूसरों को सहज रूप से उन प्रकार के प्रकारों को ढूंढने में सक्षम बनाती हैं, जिन्हें वे तलाश कर रहे हैं।

निष्कर्ष

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

  • अपने कक्षाओं को ऐसे तरीके से व्यवस्थित करने का लक्ष्य जो वर्तमान विकास और भविष्य के रखरखाव को सरल करता है।
  • अपने नेमस्पेस को ऐसे तरीके से व्यवस्थित करने का लक्ष्य रखें जो सभी विकास को सरल करता है और जहां उपयुक्त हो, आपके अंतिम उपयोगकर्ताओं के अनुभव।

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

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


सबसे सिफारिशों में मैंने देखा कि हर सार्वजनिक प्रकार अपनी फाइल में होना चाहिए और नामस्थानों को आवेदन के फ़ोल्डर संरचना का प्रतिनिधित्व करना चाहिए।


जहां तक ​​कक्षाएं चलती हैं, मैं जावा नियम का पालन करता हूं: "प्रति फ़ाइल एक सार्वजनिक वर्ग" मैं जनता के साथ एक निजी वर्ग शामिल कर सकता हूं अगर वह सार्वजनिक वर्ग एकमात्र उपयोगकर्ता है (हालांकि, enums इस कारक का कम कर रहे हैं); हालांकि, अगर यह समान नाम स्थान में कई सार्वजनिक कक्षाओं द्वारा उपयोग किया जाता है, तो मैं इसे अपनी फ़ाइल में डालूंगा

मैं निम्न पंक्तियों के साथ नामस्थान का उपयोग करना चाहूंगा:

MyAwesomeApp.UI
MyAwesomeApp.Business
MyAwesomeApp.Data

परतों के पृथक्करण को प्रतिबिंबित करने के लिए





app-code