2010-08-10 5 views
7

मैं डीडीडी पर पढ़ रहा हूं और मुझे लगता है कि मैं सेवाओं का गलत इस्तेमाल कर रहा हूं या कम से कम एक आदर्श तरीके से। मेरी सेवा कक्षाओं में रिपोजिटरी संदर्भ वाले कुछ इंस्टेंस चर होते हैं और वे बहुत सारे काम करते हैं (यानी बहुत सारी विधियां हैं)।क्या मैं सेवा परत का सही उपयोग कर रहा हूं?

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

धन्यवाद!

उत्तर

14

मेरी सेवा वर्गों काफी कुछ उदाहरण चर ...

यह आवश्यक रूप से एक कोड-गंध नहीं है हो जाते हैं। अगर आपकी सेवा को अपने काम को पूरा करने के लिए कई निर्भरताओं की आवश्यकता है, तो यह केवल एक तथ्य है।

... वे बहुत काम करने के लिए लग रहे हैं (यानी तरीकों का एक बहुत है)।

क्या यह अधिक केंद्रित सेवाओं को बनाने की सलाह दी जाती है?

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

साथ ही, सेवा कक्षाओं को अन्य इकाइयों को आवृत्ति चर स्टोर करना चाहिए? मैंने stateless होने वाली सेवाओं के बारे में कुछ पढ़ा है, मुझे यकीन नहीं है कि क्या मैं उन आवृत्ति चर के द्वारा उस नियम को तोड़ रहा हूं।

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

कारण स्टेटलेस सेवाएं एक वांछनीय लक्ष्य है, जिसमें कोई भी राज्य बग की संभावना को कम नहीं करता है।यह सेवा की पिछली स्थिति के बारे में चिंता करने के बजाय, परीक्षण-मामलों को पारित करने वाले पैरामीटर को अलग करने के लिए एक सेवा विधि के परीक्षण को सरल बनाता है। यह प्रदर्शन लाभ भी प्रदान कर सकता है।

+0

महान उत्तर एमजे के लिए धन्यवाद! यह बहुत मदद करता है। – chobo

+0

@ एमजे रिचर्डसन क्या आप अपना ईमेल आईडी साझा कर सकते हैं (मेरा प्रोफ़ाइल में जोड़ा गया है)? मुझे कुछ संदेह हैं कि मैं इस पोस्ट के बारे में स्पष्टीकरण देना चाहता हूं। –

0

मैं निर्भरता इंजेक्शन, नियंत्रण में उलझन और इसी तरह के पढ़ने पर अनुशंसा करता हूं।

यहां फाउलर का आलेख है: http://martinfowler.com/articles/injection.html, हालांकि मैं हमेशा उसे शीर्ष पर थोड़ा सा पाया। मैं एक ट्यूटोरियल के माध्यम से चलने की कोशिश करता हूं जो एक डीआई/आईओसी कंटेनर का उपयोग करता है।