2010-08-05 9 views
8

मेरी टीम एक होमबैक डी कंटेनर का उपयोग कर एक PHP परियोजना में निर्भरता इंजेक्शन लागू करने के माध्यम से उलझ रही है। डीआई का हमारा पहला पुनरावृत्ति शायद चरम पर ले जाया गया था, और यहां तक ​​कि अपवादों को कक्षाओं में इंजेक्शन दिया जा रहा है जो उन पर निर्भर करता है।निर्भरता इंजेक्शन को लागू करते समय अपवादों को इंजेक्शन दिया जाना चाहिए?

क्या यह एक अच्छा अभ्यास या ओवरकिल है?

उत्तर

9

निर्भरता इंजेक्शन के प्रयोजन निर्भरता जो एक वस्तु के द्वारा प्रयोग किया विन्यास या सहयोगी व्यवहार की सुविधा के लिए सहयोगियों कर रहे हैं प्राप्त करने की जिम्मेदारी को उलटने के लिए है।

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

वहाँ शायद कुछ वैध कारण आप इस तरह के एक अपवाद हैंडलिंग घटक है जो प्रवेश, रैपिंग के बाद अपवाद rethrows, आदि की डिजाइन के साथ के रूप में, एक अपवाद इंजेक्षन करना चाह सकते हैं, या शायद जहां अपवाद के निर्माण कर रहे हैं खुद को बाहरी संसाधनों को प्राप्त करने की आवश्यकता होती है (हालांकि वह ज़रूरत मुझे खुद को रोक देगी), लेकिन आम तौर पर मैं यह नहीं कहूंगा कि आपको यह तय करना चाहिए कि घटक कैसे घटकों से इसकी गलती बताता है।

+0

किसी ऐसे व्यक्ति के रूप में जो हमेशा मिनीटिया के बारे में सोचता है (चाहे कितना नाबालिग हो), यह एक अच्छा जवाब है! –

+0

इसके अलावा, PHP अपवादों में उस रेखा को इंगित करता है जहां वे बनाए गए थे, न कि उन्हें फेंकने वाली रेखा। तो उन्हें इंजेक्शन देने से उन्हें डीआई कंटेनर में रेखा को इंगित किया जाएगा, जिसने अपवाद बनाया है, जो शायद आप जो चाहते थे वह नहीं है :) स्रोत: http://php.net/manual/en/class.exception.php – acidtv

4

यह ओवरकिल का एक अच्छा सा लगता है।

जब एक अपवाद फेंक दिया जाता है, यह अपने संदेश और प्रकार के माध्यम से उपयोगी जानकारी के कुछ प्रकार प्रदान किया जाना चाहिए।

यदि आप अपवाद वर्ग का उपयोग करने के लिए इंजेक्शन कर रहे हैं, तो इसका मतलब है कि अपवाद का प्रकार अब यह पता लगाने में उपयोगी नहीं है कि समस्या वास्तव में क्या है (क्योंकि आप इसे पहले से ही इंजेक्शन के बाद से जानते हैं)।

+2

तो यूनिट परीक्षण के दौरान कक्षाओं को स्वीकार्य समझौता करने के अपवादों के साथ जोड़ा जा सकता है? – DRock

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