2010-08-05 11 views
14

क्या सी # में अपनी कक्षाओं को व्यवस्थित करने की बात आती है तो क्या कोई सामान्य अभ्यास है? क्या प्रति .cs फ़ाइल में केवल एक सामान्य वर्ग होना चाहिए? मैं देखता हूं कि मेरे पास फॉर्म 1.cs है जिसमें "फॉर्म 1" से संबंधित सभी वर्ग शामिल हैं। हालांकि मैं Misc.cs नाम की एक फाइल बना सकता हूं जिसमें सभी विविध वर्ग शामिल हैं। सुनिश्चित नहीं है कि किस तरह से जाना है ताकि सब कुछ व्यवस्थित रहे।सी # कक्षाओं को व्यवस्थित करने के लिए कैसे करें

या मुझे उन्हें एक विशिष्ट तरीके से व्यवस्थित करना चाहिए? उदाहरण के लिए, मैं एक MySQL डेटाबेस तक पहुंच रहा हूं, इसलिए मैं एक MySQL wrapper बना रहा हूं जिसे मैं MysqlWrapper.cs में संग्रहीत करूँगा और इसे मिलान करने के लिए कक्षा का नाम दूंगा। क्या मुझे प्रत्येक वर्ग के लिए एक नया .cs बनाना चाहिए?

या मुझे केवल उन लोगों को गठबंधन करना चाहिए जो समान "उपयोग" नामस्थान जैसे System.Text; System.Windows.Forms का उपयोग कर ; आदि?

उत्तर

15

संपादित करें - यह उत्तर उन अच्छे उत्तरों को पूरक करने के लिए है जो दूसरों ने पहले ही पोस्ट कर चुके हैं।

हर कोई विशिष्ट विनिर्देशों का उत्तर दे रहा है। मुझे लगता है कि आपको और अधिक "सर्वोत्तम प्रथाओं" डिजाइन प्रश्न होने जा रहे हैं।

सरकारी दिशा निर्देशों यहां पाया जा सकता: http://msdn.microsoft.com/en-us/library/czefa0ke(VS.71).aspx

विशेष रूप से, नाम स्थान दिशा निर्देशों और कक्षा नामकरण दिशा-निर्देशों का नामकरण में नामकरण दिशा-निर्देश में खुदाई, और उसके बाद।

और, जैसा कि अन्य ने उल्लेख किया है, कृपया प्रति फ़ाइल एक वर्ग। यह खराब रखरखाव डेवलपर पर चीजों को आसान बनाता है जो आपका अनुसरण करेंगे।

अनुरक्षणीयता:

+4

+1 – onof

+0

कक्षा लाइब्रेरी डिज़ाइन दिशानिर्देश केवल API दिशानिर्देश निर्दिष्ट करते हैं, लेकिन वास्तव में फ़ाइल संगठन दिशानिर्देश निर्दिष्ट नहीं करते हैं। –

+1

वे सभी आपके एपीआई को डिज़ाइन करने के बारे में हैं, लेकिन निजी, कार्यान्वयन विवरण (फ़ाइल संरचना सहित) को पूरी तरह से छोड़ दें। –

13

आम तौर पर, मैं प्रति वर्ग एक अलग .cs फ़ाइल बनाते हैं। इसके अलावा, मैं कक्षा नामस्थान से मेल खाने के लिए फ़ाइलों को व्यवस्थित करता हूं।

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


मुझे लगता है कि मैं Form1.cs जो "Form1" के लिए प्रासंगिक वर्गों के सभी शामिल है, देखते हैं।

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

+1

मैं बहुत छोटे प्रकार के लिए नियम तोड़ता हूं। उदाहरण के लिए, मैंने अक्सर "Enums.class" बनाया है, जिसमें कई enum प्रकार होते हैं। –

+0

@ ब्रायन एस: मैं भी ऐसा करता था, लेकिन अब जब मैं एकाधिक स्थानों पर एकाधिक डेवलपर्स के साथ एक बड़े पैमाने पर प्रोजेक्ट का प्रबंधन कर रहा हूं, तो मैं सरल enums सहित प्रति प्रकार एक अलग फ़ाइल करता हूं। ऐसा कहा जा रहा है कि, मुझे नहीं लगता कि "enums.cs" और इसी तरह के साथ कुछ भी गलत है, लेकिन मुझे लगता है कि यह मुझे अलग रखने के लिए समय के साथ सिरदर्द बचा है। –

+2

व्यक्तिगत रूप से, मुझे लगता है कि जितना अधिक एपीआई बदल रहा है, उतना ही महत्वपूर्ण है कि इसे अलग करना भी हो। जब आपके पास एक फ़ाइल में 5 enums हैं, तो संभावित रूप से अप्रयुक्त enum, आदि में एक रिफैक्टर जॉब छोड़ना आसान है ... –

4

प्रति वर्ग एक वर्ग आम तौर पर स्वीकार किया जाता है। कुछ वर्ग "आंशिक" कीवर्ड का उपयोग करके कई फाइलों में फैले हुए हैं। मेरा फ़ोल्डर संरचना नामस्थान संरचना से मेल खाती है।

+0

सी # में, नामस्थान स्वचालित रूप से फ़ोल्डर के नाम से जोड़ा जाता है। –

+5

@ स्टेवन - आपका मतलब है "इन सी #" के बजाय "विजुअल स्टूडियो में"। –

+0

क्या मैं? पिछली बार जब मैंने वीसी ++ किया था, तो मुझे नामस्थान/फ़ोल्डर सुविधा याद नहीं है, लेकिन फिर, यह एक छोटी परियोजना थी। मैं वीबी के बारे में एक रास्ता या दूसरा नहीं कह सकता, क्योंकि मैं इससे बचने की कोशिश करता हूं। पता करने के लिए पर्याप्त एफ # नहीं किया है, या तो। लेकिन अगर आप कहते हैं कि यह एक वीएस सुविधा है, तो ठीक है। –

1

मैं सख्ती से एक-वर्ग-प्रति-फ़ाइल नियम का पालन नहीं करता हूं। अगर मैं बहुत सारे कोड के साथ बहुत बड़ी कक्षा से निपट रहा हूं, तो मैं इसे अपनी फाइल दे सकता हूं। आम तौर पर, हालांकि, मुझे एक ही फाइल में कई कक्षाओं को रखने में कोई समस्या नहीं है जब तक कि वे एक दूसरे से तार्किक तरीके से संबंधित हों। यह छोटे वर्गों के साथ सबसे अच्छा काम करता है, लेकिन बड़े लोगों के लिए सबसे अच्छा विचार नहीं हो सकता है।

1

एक सामान्य नियम के रूप में, यदि आपके पास प्रति फ़ाइल एक प्रकार है तो आपका कोड अधिक रखरखाव योग्य है (अन्य लोगों को पढ़ने के लिए आसान)। (वर्ग/struct/enum)।

हालांकि, आंशिक कक्षाओं के साथ, मैं कभी-कभी कार्यक्षमता के प्रमुख वर्गों के आधार पर कई कक्षाओं में बड़ी कक्षाओं को तोड़ दूंगा। यदि किसी वर्ग में निजी नेस्टेड प्रकार होते हैं, तो मैं लगभग हमेशा उन नेस्टेड प्रकारों को अलग-अलग फ़ाइलों में डालता हूं।

+0

के अनुसार व्यवस्थित किया गया है यदि आप वास्तव में एक वर्ग को अलग-अलग अलग-अलग वर्गों में विभाजित कर सकते हैं, तो एक अच्छा मौका है कि आपको कक्षा को अलग-अलग वर्गों में वास्तव में दोबारा शुरू करना चाहिए । आधिकारिक दिशानिर्देशों के लिए –

1

मेरे पास आमतौर पर प्रति फ़ाइल एक कक्षा होती है। इसका एकमात्र अपवाद हो सकता है यदि किसी वर्ग के पास एक निजी नेस्टेड क्लास है और मैं आमतौर पर इसे आंशिक कीवर्ड का उपयोग करके अलग-अलग में विभाजित करने के बजाय उसी फ़ाइल में रखता हूं। इस तरह से मुझे चीजों को ढूंढना आसान लगता है।

0

कुछ सिद्धांतों आप सभी की जरूरत हैं यह परियोजना रखने अप-टू-डेट और कीड़े तय करने के लिए आसान होना चाहिए। प्रश्न: क्या किसी दिए गए वर्ग/समारोह को खोजने में उम्र लग जाएगी? यदि कोई बग है, तो ऐसा होने की संभावना है जहां प्रोग्रामर (जो लेखक नहीं होगा) देखेंगे?

जटिलता: यह स्पष्ट होना चाहिए कि कार्यक्रम क्या करता है। कभी-कभी इसे विभाजित करने में मदद मिलती है। कभी-कभी चीज़ें एक साथ रखने में मदद मिलती है। प्रश्न: क्या कोई इसे भ्रमित कर देगा जब वे इसे देखेंगे? क्या वे आश्चर्य करेंगे कि सभी हिस्सों क्या हैं?

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

0

आपको उन वर्गों को गठबंधन नहीं करना चाहिए जो फ़ाइल में समान नामों का उपयोग करते हैं, क्योंकि, यदि आपको कक्षा के कार्यान्वयन को बदलना है तो आपको कक्षाओं को अन्य फ़ाइलों में स्थानांतरित करना होगा।

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

2

मैं इसे कहने के लिए फंस गया हो सकता हूं, लेकिन कम से कम विजुअल स्टूडियो में, यह संभवतः एक मुद्दा जितना महत्वपूर्ण नहीं था उतना महत्वपूर्ण नहीं था।

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

आप एक पहचानकर्ता पर राइट क्लिक कर सकते हैं और इसे नेविगेट करने के लिए परिभाषा पर जाएं पर क्लिक कर सकते हैं, तो आप खोज करने के लिए ctrl + comma दबा सकते हैं, या आप क्लास व्यू का उपयोग कर सकते हैं।

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

+1

हाँ, मैं वीएस 2010 नई सुविधाओं और प्रो पावर टूल्स एक्सटेंशन से सहमत हूं, यह महत्वपूर्ण नहीं है कि आप शारीरिक रूप से अपनी फाइलें कैसे व्यवस्थित करें। आपके वर्गों की वस्तु उन्मुख वास्तुकला अधिक महत्वपूर्ण है। – Agzam

+0

हां मैं इसके साथ सहमत हूं – GibboK

0

मैं कभी-कभी समान वर्ग फ़ाइलों को वीएस में एक शाखा में जोड़ता हूं।

उदाहरण के लिए - आप 3 फ़ाइलें अगर: Message.xaml, Message.xaml.cs, MessageButton.cs, MessageImage.cs, MessageResult.cs।

Message.xaml.cs पहले से ही पहली फ़ाइल के पदानुक्रम के अंदर दिखाया जाएगा।आप नोटपैड का उपयोग करके प्रोजेक्ट की फ़ाइल को संपादित करके बस दूसरों को भी जोड़ सकते हैं। आपको केवल

<DependentUpon> </DependentUpon> 

टैग जहां इसकी आवश्यकता है जोड़ने की आवश्यकता है।

मुझे नहीं पता कि वीएस के लिए बहुत आसान तरीके से ऐसा करने के लिए कोई एक्सटेंशन है या नहीं।

और यहां एक बात है। यद्यपि यह आपकी परियोजनाओं को किसी प्रोजेक्ट में व्यवस्थित करने में आपकी सहायता करेगा, फिर भी आप VS में फ़ाइल नाम पर दो बार क्लिक करके अपनी कक्षा का नाम बदलने में सक्षम नहीं होंगे।

संबंधित मुद्दे