मैं फिलहाल SOLID का पता लगाने की कोशिश कर रहा हूं। तो डिपेंडेंसी इनवर्सन प्रिंसिपल का मतलब है कि किसी भी दो वर्गों को इंटरफेस के माध्यम से संवाद करना चाहिए, सीधे नहीं। उदाहरण: यदि class A
एक विधि है, जो किसी प्रकार की वस्तु के लिए एक संकेतक की अपेक्षा करती है class B
, तो इस विधि को वास्तव में प्रकार की वस्तु की अपेक्षा करनी चाहिए abstract base class of B
। यह Open / Close के लिए भी मदद करता है।
बशर्ते कि मैं समझ गया कि सही ढंग से, मेरा सवाल यह होगा कि क्या यह सभी वर्ग इंटरैक्शन के लिए लागू करना एक अच्छा अभ्यास है या मुझे परतों के संदर्भ में सोचने की कोशिश करनी चाहिए ?
मेरे संदेह का कारण यह है कि हम इस सिद्धांत का पालन करने के लिए कुछ कीमत अदा कर रहे हैं। कहो, मुझे सुविधा लागू करने की आवश्यकता है Z
। विश्लेषण के बाद, मैं यह निष्कर्ष निकालता हूं कि इस सुविधा Z
में कार्यक्षमता है A
, B
और C
। मैं एक मुखौटा वर्ग बनाता हूं Z
, जो इंटरफेस के माध्यम से, कक्षाओं का उपयोग करता है A
, B
और C
। मैं कार्यान्वयन को कोड करना शुरू कर देता हूं और कुछ बिंदु पर मुझे एहसास होता है कि Z
वास्तव में कार्य में कार्यक्षमता शामिल है A
, B
और D
। अब मुझे C
इंटरफ़ेस, C
क्लास प्रोटोटाइप को अलग करने D
और अलग इंटरफ़ेस और क्लास लिखने की आवश्यकता है । इंटरफेस के बिना, केवल कक्षा को बदलने की आवश्यकता होगी।
दूसरे शब्दों में, कुछ को बदलने के लिए, मुझे 1. कॉल करने वाले को बदलने की आवश्यकता है 2. इंटरफ़ेस 3. घोषणा 4. कार्यान्वयन। एक अजगर सीधे युग्मित कार्यान्वयन में, मुझे केवल कार्यान्वयन को बदलना होगा ।