मेरे पास एक स्वीकारोक्ति है। 2023 में, मैंने एक परीक्षण स्वचालन फ्रेमवर्क के लिए प्लगइन सिस्टम बनाने में तीन सप्ताह बिताए। कॉन्फ़िगरेबल टेस्ट रनर। हॉट-रिलोडेबल प्लगइन्स। एक डिपेंडेंसी इंजेक्शन कंटेनर। पूरा खेल।
किसी ने कभी प्लगइन नहीं लिखा।
फ्रेमवर्क CI में हर बार एक ही कॉन्फ़िगरेशन के साथ चला। मैंने जो "एक्सटेंसिबिलिटी" बनाई थी, उसका उपयोग बिल्कुल शून्य लोगों ने किया। मैं प्लगइन आर्किटेक्चर के बिना पूरी चीज़ 4 दिनों में शिप कर सकता था।
अति-इंजीनियरिंग कैसे होती है
यह एक उचित विचार से शुरू होता है: "क्या होगा अगर हमें बाद में इसे विस्तारित करने की आवश्यकता हो?"
वह विचार जाल है। क्योंकि "बाद में" शायद ही कभी वैसा दिखता है जैसा आपने कल्पना किया था, और काल्पनिक आवश्यकताओं के लिए आप जो एब्स्ट्रैक्शन बनाते हैं, वे आमतौर पर वास्तविक आवश्यकताओं के रास्ते में आते हैं।
यहाँ वह प्रगति है जो मैंने अपने आप में देखी है:
- एक सरल फंक्शन बनाएं ✅
- सोचें "यह कॉन्फ़िगरेबल होना चाहिए" ⚠️
- एक कॉन्फ़िग ऑब्जेक्ट जोड़ें
- सोचें "विभिन्न वातावरणों को अलग-अलग इम्प्लीमेंटेशन की आवश्यकता हो सकती है" ⚠️
- एक इंटरफ़ेस और फ़ैक्टरी पैटर्न जोड़ें
- सोचें "हमें इसे रनटाइम पर स्वैप करने की आवश्यकता हो सकती है" 🚩
- डिपेंडेंसी इंजेक्शन जोड़ें
- महसूस करें कि किसी को कभी इसे स्वैप करने की आवश्यकता नहीं पड़ी
- एब्स्ट्रैक्शन को हमेशा के लिए बनाए रखें क्योंकि इसे हटाना इसे रखने से अधिक कठिन है
तीन प्रश्न
कोई भी एब्स्ट्रैक्शन जोड़ने से पहले, मैं अब पूछता हूं:
1. "क्या वास्तव में किसी ने इसके लिए पूछा है?"
यदि उत्तर "नहीं, लेकिन वे पूछ सकते हैं" है — तो इसे न बनाएं। YAGNI (You Aren't Gonna Need It) इंजीनियरिंग में सबसे अधिक उल्लंघन किया जाने वाला सिद्धांत है।
2. "इसे बाद में बनाम अब जोड़ने की लागत क्या है?"
यदि मैं वास्तव में जरूरत पड़ने पर एब्स्ट्रैक्शन को 2 घंटे में जोड़ सकता हूं, तो इसे अभी "बस मामले में" बनाने का कोई कारण नहीं है। समय से पहले एब्स्ट्रैक्शन की लागत (ऐसे कोड को बनाए रखना जिसका कोई उपयोग नहीं करता) लगभग हमेशा इसे बाद में जोड़ने की लागत से अधिक होती है।
3. "क्या मैं किसी को एक वाक्य में समझा सकता हूं कि यह क्यों मौजूद है?"
"हम डिपेंडेंसी इंजेक्शन का उपयोग करते हैं क्योंकि हमें विभिन्न वातावरणों में पेमेंट प्रदाता को Stripe और Braintree के बीच स्वैप करने की आवश्यकता है।" यह एक वास्तविक कारण है।
"हम डिपेंडेंसी इंजेक्शन का उपयोग करते हैं क्योंकि यह सर्वोत्तम अभ्यास है।" यह कोई कारण नहीं है। यह कार्गो कल्टिंग है।
सरल कोड कैसा दिखता है
\\
