क्षमा करें, लेकिन अधिकांश अन्य 'हां आप कर सकते हैं' के जवाब से असहमत हैं और कहते हैं कि:
मैं एक सार्वजनिक विधि को दूसरे से कॉल करने वाले वर्ग को हतोत्साहित करता हूँ
इस अभ्यास के साथ कुछ संभावित मुद्दे हैं।
1: अनंत कक्षा में अनंत लूप
तो आपका बेस क्लास method1 से method2 को कॉल करता है, लेकिन फिर आप, या किसी और को, इसे इनहेरिट करते हैं और method1 को एक नए तरीके से छिपाते हैं, जो method2 को कॉल करता है।
2: इवेंट, लॉगिंग आदि।
उदाहरण के लिए मेरे पास एक तरीका है Add1 जो एक घटना को फायर करता है '1 जोड़ा!' मैं नहीं चाहता कि Add10 विधि उस घटना को बढ़ाए, एक लॉग या जो भी हो, दस बार लिखें।
3: थ्रेडिंग और अन्य गतिरोध
उदाहरण के लिए InsertComplexData एक db कनेक्शन खोलता है, एक लेन-देन शुरू करता है, एक टेबल को लॉक करता है, फिर InsertSimpleData को कॉल करता है, एक कनेक्शन खोलता है, एक लेनदेन शुरू करता है, टेबल के अनलॉक होने का इंतजार करता है ...।
मुझे यकीन है कि और भी कारण हैं, अन्य में से एक उत्तर 'आप मेथड 1 को संपादित करते हैं और हैरान हैं मेथड 2 अलग तरह से व्यवहार करना शुरू कर देता है'
सामान्य यदि आपके पास दो सार्वजनिक तरीके हैं जो कोड साझा करते हैं, तो बेहतर है कि वे दोनों को एक कॉल करने के बजाय एक निजी विधि कहें।
संपादित करें ----
ओपी में विशिष्ट मामले पर विस्तार करते हैं।
हमारे पास बहुत अधिक विवरण नहीं है, लेकिन हम जानते हैं कि ReverseData को किसी प्रकार के एक इवेंट हैंडलर के साथ-साथ शेड्यूलट्रांसमीशन विधि द्वारा भी बुलाया जाता है।
मुझे लगता है कि रिवर्स डेटा भी वस्तु की आंतरिक स्थिति को बदलता है
इस मामले को देखते हुए मुझे लगता है कि थ्रेड सेफटी महत्वपूर्ण होगी और इसलिए अभ्यास पर मेरी तीसरी आपत्ति लागू होती है।
ReverseData धागे को सुरक्षित बनाने के लिए आप एक ताला जोड़ सकते हैं। लेकिन अगर ScheduleTransmission को थ्रेड सुरक्षित होना चाहिए तो आप उसी लॉक को साझा करना चाहेंगे।
ऐसा करने का सबसे आसान तरीका है कि ReverseData कोड को एक निजी विधि में स्थानांतरित करना और दोनों सार्वजनिक तरीकों को कॉल करना है। फिर आप लॉक स्टेटमेंट को पब्लिक मेथड्स में रख सकते हैं और लॉक ऑब्जेक्ट शेयर कर सकते हैं।
जाहिर है आप बहस कर सकते हैं "ऐसा कभी नहीं होगा!" या "मैं लॉक को दूसरे तरीके से प्रोग्राम कर सकता था" लेकिन अच्छी कोडिंग प्रैक्टिस के बारे में पहली जगह में अपने कोड को अच्छी तरह से स्ट्रक्चर करना है।
अकादमिक दृष्टि से मैं कहूंगा कि यह ठोस में एल का उल्लंघन करता है। सार्वजनिक तरीके केवल सार्वजनिक रूप से प्रशंसनीय से अधिक हैं। वे इसके उत्तराधिकारियों द्वारा भी परिवर्तनीय हैं। आपका कोड संशोधन के लिए बंद होना चाहिए जिसका अर्थ है कि आपको यह सोचना होगा कि आप सार्वजनिक और संरक्षित दोनों तरीकों से क्या काम करते हैं।
एक अन्य एक: आप भी संभावित DDD का उल्लंघन करते हैं। यदि आपका ऑब्जेक्ट एक डोमेन ऑब्जेक्ट है, तो इसकी सार्वजनिक विधियाँ डोमेन की शर्तें होनी चाहिए, जो व्यवसाय के लिए कुछ अर्थ रखती हैं। इस मामले में इसकी बहुत संभावना नहीं है कि 'एक दर्जन अंडे खरीदो' उसी तरह है जैसे '1 अंडा 12 बार खरीदें' भले ही वह इस तरह से शुरू हो।