मैं ऐसी कक्षाएं लिख रहा हूं जो "एक विशिष्ट तरीके से उपयोग की जानी चाहिए" (मुझे लगता है कि सभी वर्गों को ...) होना चाहिए।
उदाहरण के लिए, मैं fooManager
वर्ग बनाता हूं , जिसे कॉल करने की आवश्यकता होती है, कहते हैं Initialize(string,string)
,। और, उदाहरण को थोड़ा और आगे बढ़ाने के लिए, वर्ग बेकार हो जाएगा यदि हम इसकी ThisHappened
कार्रवाई नहीं सुनेंगे ।
मेरी बात यह है कि, मैं जो क्लास लिख रहा हूं, उसके लिए मेथड कॉल की जरूरत है। लेकिन यह सिर्फ ठीक संकलित करेगा यदि आप उन तरीकों को नहीं कहते हैं और एक खाली नए फूमैनेजर के साथ समाप्त हो जाएगा। कुछ बिंदु पर, यह या तो काम नहीं करेगा, या शायद दुर्घटना, वर्ग पर निर्भर करता है और यह क्या करता है। प्रोग्रामर जो मेरी कक्षा को लागू करता है, वह स्पष्ट रूप से इसके अंदर देखेगा और महसूस करेगा कि "ओह, मैंने इनिशियलाइज़ को कॉल नहीं किया है!", और यह ठीक रहेगा।
लेकिन मुझे वह पसंद नहीं है। यदि मैं आदर्श रूप से चाहता हूँ कि कोड को संकलित नहीं किया जाता है यदि विधि को नहीं बुलाया गया था; मैं अनुमान लगा रहा हूं कि यह संभव नहीं है। या ऐसा कुछ जो तुरंत दिखाई और स्पष्ट होगा।
मुझे लगता है कि मैं अपने वर्तमान दृष्टिकोण से परेशान हूं, जो निम्नलिखित है:
कक्षा में एक निजी बूलियन मान जोड़ें, और यदि कक्षा आरंभीकृत हो तो हर जगह जाँच करें; यदि नहीं, तो मैं यह कहते हुए एक अपवाद फेंक दूंगा कि "वर्ग को आरंभीकृत नहीं किया गया था, क्या आप सुनिश्चित हैं कि आप बुला रहे हैं .Initialize(string,string)
?"।
मैं उस दृष्टिकोण के साथ ठीक हूं, लेकिन यह बहुत सारे कोड की ओर जाता है जो संकलित है और अंत में, अंतिम उपयोगकर्ता के लिए आवश्यक नहीं है।
इसके अलावा, यह कभी-कभी और भी अधिक कोड होता है जब Initiliaze
कॉल करने के लिए सिर्फ एक से अधिक तरीके होते हैं। मैं अपनी कक्षाओं को बहुत अधिक सार्वजनिक तरीकों / कार्यों के साथ नहीं रखने की कोशिश करता हूं, लेकिन यह समस्या को हल नहीं कर रहा है, बस इसे उचित रखता है।
मैं यहाँ क्या देख रहा हूँ:
- क्या मेरा दृष्टिकोण सही है?
- क्या कोई बेहतर है?
- आप लोग क्या करते हैं / सलाह देते हैं?
- क्या मैं एक गैर-मुद्दे को हल करने की कोशिश कर रहा हूं? मुझे सहकर्मियों द्वारा यह बताया गया है कि यह प्रोग्रामर का उपयोग करने से पहले कक्षा की जांच करना है। मैं आदरपूर्वक असहमत हूं, लेकिन मेरा मानना है कि एक और मामला है।
इसे सीधे शब्दों में कहें, मैं कोशिश कर रहा हूं कि कॉल को लागू करने के लिए कभी नहीं भूल सकता जब उस वर्ग का बाद में पुन: उपयोग किया जाता है, या किसी और द्वारा।
विनिर्देशों:
यहाँ कई प्रश्न स्पष्ट करने के लिए:
मैं निश्चित रूप से न केवल एक वर्ग के प्रारंभिक भाग के बारे में बात कर रहा हूं, बल्कि यह पूरे जीवनकाल में है। सहकर्मियों को दो बार एक विधि को कॉल करने से रोकें, सुनिश्चित करें कि वे वाई से पहले एक्स को कॉल करते हैं, आदि कुछ भी जो अनिवार्य और दस्तावेजीकरण में समाप्त होगा, लेकिन यह कि मैं कोड में और जितना संभव हो उतना सरल और छोटा होगा। मुझे वास्तव में Asserts का विचार पसंद आया, हालाँकि मुझे पूरा यकीन है कि मुझे कुछ अन्य विचारों को मिलाने की आवश्यकता होगी क्योंकि Asserts हमेशा संभव नहीं होगा।
मैं C # भाषा का उपयोग कर रहा हूँ! मैंने यह कैसे उल्लेख नहीं किया ?! मैं एक Xamarin वातावरण में हूं और एक समाधान में लगभग 6 से 9 परियोजनाओं का उपयोग करके मोबाइल एप्लिकेशन का निर्माण कर रहा हूं, जिसमें पीसीएल, आईओएस, एंड्रॉइड और विंडोज प्रोजेक्ट शामिल हैं। मैं लगभग डेढ़ साल (स्कूल और काम संयुक्त) के लिए एक डेवलपर रहा हूं, इसलिए मेरे कभी-कभी हास्यास्पद कथन \ _ प्रश्न हैं। यह सब शायद यहाँ अप्रासंगिक है, लेकिन बहुत अधिक जानकारी हमेशा एक बुरी चीज नहीं होती है।
प्लेटफ़ॉर्म प्रतिबंधों और डिपेंडेंसी इंजेक्शन के उपयोग के कारण, मैं हमेशा वह सब कुछ नहीं डाल सकता जो डिपेंडेंसी इंजेक्शन का उपयोग करता है, जिसमें इंटरफेस के अलावा अन्य पैरामीटर तालिका से दूर हैं। या शायद मेरा ज्ञान पर्याप्त नहीं है, जो अत्यधिक संभव है। ज्यादातर समय यह एक प्रारंभिक मुद्दा नहीं है, लेकिन अधिक है
मैं यह कैसे सुनिश्चित कर सकता हूं कि वह उस घटना में पंजीकृत है?
मैं यह कैसे सुनिश्चित कर सकता हूं कि वह "किसी बिंदु पर प्रक्रिया को रोकना" नहीं भूले
यहां मुझे एक विज्ञापन प्राप्त करने वाला वर्ग याद है। जब तक विज्ञापन दिखाई दे रहा है, तब तक वर्ग हर मिनट एक नया विज्ञापन प्राप्त करेगा। उस वर्ग को एक दृश्य की आवश्यकता होती है जब निर्माण किया जाता है जहां वह विज्ञापन प्रदर्शित कर सकता है, जो स्पष्ट रूप से एक पैरामीटर में जा सकता है। लेकिन एक बार देखने के बाद, StopFetching () को कॉल करना होगा। अन्यथा क्लास ऐसे दृश्य के लिए विज्ञापन लाती रहेगी जो वहां भी नहीं है, और यह बुरा है।
इसके अलावा, उस वर्ग में ऐसी घटनाएँ हैं जिन्हें उदाहरण के लिए "AdClicked" की तरह सुनना चाहिए। अगर सबकुछ ठीक नहीं है तो सबकुछ ठीक है, लेकिन अगर नल पंजीकृत नहीं हैं, तो हम वहां एनालिटिक्स की ट्रैकिंग खो देते हैं। विज्ञापन अभी भी काम करता है, इसलिए उपयोगकर्ता और डेवलपर को अंतर नहीं दिखेगा, और एनालिटिक्स में सिर्फ गलत डेटा होगा। इससे बचने की जरूरत है, लेकिन मुझे यकीन नहीं है कि डेवलपर कैसे जान सकते हैं कि उन्हें ताओ घटना में पंजीकृत होना चाहिए। हालांकि यह एक सरल उदाहरण है, लेकिन विचार यह है कि, "सुनिश्चित करें कि वह सार्वजनिक कार्रवाई का उपयोग करता है जो उपलब्ध है" और बिल्कुल सही समय पर!
initialize
ऑब्जेक्ट निर्माण के बाद देर से कॉल किया जाना चाहिए? Ctor भी "जोखिम भरा" होगा इस अर्थ में कि यह अपवादों को फेंक सकता है और निर्माण श्रृंखला को तोड़ सकता है?
new
यदि ऑब्जेक्ट का उपयोग करने के लिए तैयार नहीं है। एक आरंभीकरण विधि पर भरोसा करना आपको परेशान करने के लिए वापस आने के लिए बाध्य है और जब तक बिल्कुल आवश्यक न हो, कम से कम मेरा अनुभव होना चाहिए।