2011-11-19 11 views
6

मैं काफी Symfony 2 के लिए नया हूँ और मैं services की तरह उन्नत विषयों में जाने रहा हूँ। ऑब्जेक्ट कब एक सेवा होनी चाहिए?समझौता Symfony2 सेवाओं

उदाहरण के लिए, मान लीजिए कि आप एक बाकी सेवा के लिए कॉल करने के लिए एक मुखौटा वस्तु है। इस वर्ग को उपयोगकर्ता नाम और पासवर्ड की आवश्यकता है। क्या यह वैश्विक मॉडलिंग के रूप में कक्षा को सही मॉडलिंग करेगा? भले ही यह पूरी परियोजना के केवल एक हिस्से में उपयोग किया जाता है?

# app/config/config.yml 
parameters: 
    my_proxy.username: username 
    my_proxy.password: password 

services: 
    my_proxy: 
     class:  Acme\TestBundle\MyProxy 
     arguments: [%my_proxy.username%, %my_proxy.password%] 

उत्तर

13

परिभाषा Symfony2 glossary से लिया:

एक सेवा किसी भी पीएचपी उद्देश्य यह है कि एक विशेष कार्य करता है के लिए एक सामान्य शब्द है। एक सेवा आमतौर पर "वैश्विक रूप से" उपयोग की जाती है, जैसे डेटाबेस कनेक्शन ऑब्जेक्ट या कोई ऑब्जेक्ट जो ईमेल संदेशों को वितरित करता है। Symfony2 में, सेवाओं को अक्सर कंटेनर से कॉन्फ़िगर और पुनर्प्राप्त किया जाता है। एक आवेदन जिसमें कई decoupled सेवाओं है एक सेवा उन्मुख वास्तुकला का पालन करने के लिए कहा जाता है।

मुझे लगता है कि आपका उदाहरण सेवा के लिए एक आदर्श उम्मीदवार है।

आप अपने एपीआई क्लाइंट की आवश्यकता वाले सभी स्थानों पर निर्माण कोड कॉपी नहीं करना चाहते हैं। इस कार्य को निर्भरता इंजेक्शन कंटेनर में प्रतिनिधि करना बेहतर है।

इस तरह इसे बनाए रखना आसान है (जैसा कि निर्माण एक स्थान पर होता है और यह कॉन्फ़िगर करने योग्य है)।

यह भी अधिक लचीला है क्योंकि आप आसानी से एपीआई क्लाइंट क्लास को कोड को प्रभावित किए बिना आसानी से बदल सकते हैं (जब तक यह एक ही इंटरफ़ेस लागू करता है)।

मुझे नहीं लगता कि एक सुनहरा नियम है। लेकिन मूल रूप से एक कार्य को लागू करने वाले सभी वर्ग सेवा के लिए अच्छे उम्मीदवार हैं। दूसरी ओर संस्थाएं उतनी ही नहीं हैं जितनी वे अक्सर डेटा धारक होते हैं।

मैं हमेशा विषय पर फैबियन की लेखों की श्रृंखला की सिफारिश करता हूं: http://fabien.potencier.org/article/11/what-is-dependency-injection

1

हाँ, क्योंकि यह आप विन्यास हिस्सा छोड़ देगा। आप उपयोगकर्ता नाम और पासवर्ड लाने के लिए नहीं जा रहे हैं और जब भी आपको इस कक्षा की आवश्यकता होती है तो इसे निर्माता को दें।

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