एक सेवा वर्ग और एक सहायक वर्ग के बीच अंतर [बंद]


60

मैं जानना चाहूंगा कि सेवा वर्ग को उपयोगिता वर्ग या सहायक वर्ग से क्या अलग करता है? केवल अंतर्निहित विधियों के साथ एक वर्ग, डाओ की सेवा है? क्या हेल्पर वर्गों का उपयोग SRP का उल्लंघन नहीं करता है?

जवाबों:


73

लाइनें थोड़ी धुंधली हो सकती हैं, लेकिन मैं इसे इस तरह से देखता हूं:

  • सेवा वर्ग / इंटरफ़ेस क्लाइंट को एप्लिकेशन में कुछ कार्यक्षमता के साथ सहभागिता करने का एक तरीका प्रदान करता है। यह आम तौर पर सार्वजनिक है, कुछ व्यावसायिक अर्थ के साथ। उदाहरण के लिए, एक TicketingServiceइंटरफ़ेस आपको अनुमति दे सकता है buyTicket, sellTicketऔर इसी तरह।

  • एक सहायक वर्ग क्लाइंट से छिपाया जाता है और आंतरिक रूप से कुछ बॉयलर प्लेट कार्य प्रदान करने के लिए उपयोग किया जाता है जिसका कोई व्यावसायिक डोमेन अर्थ नहीं है। उदाहरण के लिए, मान लें कि आप किसी तिथि को टाइमस्टैम्प में बदलना चाहते हैं ताकि इसे अपने विशेष डेटास्टोर में सहेजा जा सके। आपके पास एक उपयोगिता वर्ग हो सकता है जिसे DateConvertorएक convertDateToTimestampविधि कहा जाता है जो इस प्रसंस्करण को निष्पादित करता है।

सेवाओं को केवल डीएओ को कसकर युग्मित नहीं किया जाता है, यह दृढ़ता की तुलना में एक व्यापक शब्द / उपयोग पैटर्न है

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


24

वैज्ञानिक परिभाषा नहीं है, लेकिन मेरा सामान्य रूप है एक सेवा वर्ग के आवेदन के भीतर कुछ संदर्भ हैं जबकि सहायकों को अधिक सामान्य हैं और परवाह नहीं करते हैं कि वे किस ऐप की मदद कर रहे हैं।


15

मेरे लिए, मैं एरिक इवांस की परिभाषा सेservice जाता हूं, जो कुछ इस प्रकार है:

आमतौर पर, एक अच्छी तरह से डिजाइन की गई प्रणाली में, अधिकांश वर्गों (डोमेन मॉडल में) की स्पष्ट जिम्मेदारी या कार्य होता है, जिसमें वे एक विशिष्ट इकाई या मॉडल में संस्थाओं के सेट से निपटते हैं।

अर्थात

  • खाता, खाता कारखाना, खाता भंडार, आदि
  • ग्राहक, ग्राहक फैक्टरी, ग्राहक भंडार, आदि

जब आपके पास कार्यक्षमता होती है जो किसी विशेष इकाई के साथ नहीं होती है, तो इसके लिए बैठने के लिए एक सही स्थान ढूंढना मुश्किल हो सकता है। यानी ऐसी कोई चीज़ जो एक ऐसी प्रक्रिया को अंजाम देती है जिसमें Accounta और a दोनों शामिल होते हैं Customer

तो, यह वह जगह है जहां serviceयह आता है। यह वह जगह है जहां आप कोड डालते हैं जो डोमेन मॉडल में है लेकिन स्वाभाविक रूप से एक इकाई / घटक या किसी अन्य से संबंधित नहीं है।

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


1
एरिक इवान की उपरोक्त परिभाषा विशेष रूप से एक डोमेन सेवा के लिए है। DDD में डोमेन सेवाएँ, अनुप्रयोग सेवाएँ, अवसंरचना सेवाएँ और यहाँ तक कि रिपॉजिटरी भी हैं जिन्हें डेटा एक्सेस सेवाओं के रूप में देखा जा सकता है।
सोंगो

12

सेवा वर्ग: कंटेनर व्यावसायिक तर्क।
हेल्पर क्लास: यह क्लास एक प्रकार का पुन: उपयोग योग्य घटक है।


5

आपने दो गैर-संबंधित प्राचार्यों को मिलाया। सेवाएँ और हेल्पर-कक्षाएं जुड़ी नहीं हैं। विशेष रूप से शब्द "सेवा वर्ग" भ्रामक है - मुझे लगता है कि आप एक "सेवा" का उल्लेख कर रहे हैं, जो कक्षाओं की तुलना में उच्च स्तर पर है। एक सेवा के माध्यम से विशेषता है

"एक या अधिक क्षमताओं तक पहुंच को सक्षम करने के लिए एक तंत्र, जहां पहुंच निर्धारित इंटरफ़ेस का उपयोग करके प्रदान की जाती है और सेवा विवरण द्वारा निर्दिष्ट बाधाओं और नीतियों के अनुरूप है।"

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


4

डीडीडी में 'सेवा' की कई परिभाषाओं से सावधान रहना चाहिए:

एप्लिकेशन सेवा: ये एप्लिकेशन लेयर में बैठते हैं और डोमेन और डेटा लेयर के साथ संवाद करते हैं। ये वे इंटरफ़ेस होते हैं जिनके माध्यम से बाहरी सिस्टम / UI DDD सिस्टम के साथ इंटरैक्ट करते हैं।

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

Infrastructure Service: इनका उपयोग डोमेन द्वारा बाहरी संसाधनों के साथ संचार करने के लिए किया जाता है।

हेल्पर वर्गों में कई संस्थाओं द्वारा उपयोग किए जाने वाले कोड या एल्गोरिदम के टुकड़े होते हैं, इसलिए वास्तव में DRY सिद्धांत का उल्लंघन किए बिना संस्थाओं में नहीं जा सकते। वे संभवतः डोमेन सेवाओं के सबसे करीब हैं, इसमें वे एक ही उद्देश्य को पूरा करते हैं (संस्थाओं से व्यावसायिक तर्क को समाप्त करना) लेकिन वे इसे विभिन्न कारणों से करते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.