मुझे अपनी सेवा में वर्तमान ऐप वातावरण प्राप्त करने की आवश्यकता है। मैंने पाया कि मैं इसे कर्नेल से प्राप्त कर सकता हूं, लेकिन बहुत से लोग कहते हैं कि कर्नेल को इंजेक्ट करना बुरा विचार है।
क्या कोई मुझे समझा सकता है कि वास्तव में इसे बुरा अभ्यास क्यों माना जाता है? क्या यह मेरी सेवा में पूरे कंटेनर को इंजेक्ट करने से बेहतर सॉल्यूशन नहीं है?

my_app.my_not_so_great_service:
    class: AppBundle\Services\AppService
    arguments:
      - "@kernel"
4
fghjkdfghjrghjk 8 सितंबर 2016, 15:11

2 जवाब

सबसे बढ़िया उत्तर

कर्नेल ऑब्जेक्ट में संपूर्ण ऐप होता है, यदि आपको पर्यावरण की आवश्यकता है तो बस इसे इंजेक्ट करें:

my_app.my_service:
    class: AppBundle\Services\MyAppService
    arguments:
        - '%kernel.environment%'
3
Aurelijus Rozenas 3 अगस्त 2017, 07:53

[0]

आप एक अलग वातावरण के लिए आसानी से (हॉट-) स्वैप कार्यान्वयन तर्क नहीं कर सकते हैं, क्योंकि आप शायद अगर/स्विच-स्टेटमेंट के समूह के खिलाफ कोड करेंगे। इसके बजाय, आपको अमूर्त का उपयोग करना चाहिए जो विभिन्न वातावरणों का प्रतिनिधित्व कर सकता है।

एप्लिकेशन को इस बात की जानकारी नहीं होनी चाहिए कि यह किस वातावरण में चल रहा है, इसे केवल इसकी कॉन्फ़िगरेशन फ़ाइलों के आधार पर एक विशेष तरीके से कॉन्फ़िगर किया जाना चाहिए। चूंकि हम विभिन्न वातावरणों के बीच कॉन्फ़िगरेशन को अलग-अलग करना चाहते हैं, इसलिए इनमें से प्रत्येक वातावरण के लिए आम तौर पर अलग-अलग कॉन्फ़िगरेशन होते हैं। एप्लिकेशन को यह बताने के बजाय कि यह किस वातावरण में है, हम कॉन्फ़िगरेशन के इनमें से कौन से सेट को लोड करना चुनते हैं।

[0] http://richardmiller .co.uk/2013/05/28/symfony2-avoiding-coupling-applications-to-the-environment/

4
Elias 8 सितंबर 2016, 15:20