2010-10-01 16 views
18

डोमेन और एप्लिकेशन सेवाओं के बीच मुख्य अंतर क्या है? (मैं NHibernate का उपयोग कर रहा हूं)डोमेन सेवाएं बनाम आवेदन सेवाएं

व्यापार तर्क के लिए कौन सी परत बेहतर होगी? सबसे अच्छा अभ्यास क्या है?

-S # आर्किटेक्चर अनुप्रयोग सेवाओं का उपयोग "समन्वय परत" के रूप में करता है लेकिन यह समझाने के लिए परेशान नहीं है कि यह डोमेन सेवा क्यों नहीं है, जहां व्यवसाय तर्क होना चाहिए।

+2

http://stackoverflow.com/questions/2268699/domain-driven-design-domain-service-plication- सेवा – Karsten

उत्तर

23

आपका लाभ बहुत हो सकता है, लेकिन मैं इस बात के आधार पर परिभाषित करने की कोशिश करूंगा कि मैंने उनका उपयोग कैसे किया है। अपने हठ परत के बावजूद, मैं उन्हें के रूप में व्यावहारिक उपयोग के लिए निर्धारित करना होगा:

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

  • आवेदन सेवाएं - ऐसी सेवाएं जो डोमेन मॉडल के कार्यान्वयन के लिए विशिष्ट हैं या जिनके पास डोमेन मॉडल पर कोई निर्भरता नहीं है। इसका एक क्लासिक उदाहरण डोमेन में राज्य परिवर्तन या कार्रवाई के आधार पर भेज और ईमेल करेगा। यह आमतौर पर एप्लिकेशन की आवश्यकता होती है, और संभवतः डोमेन मॉडल द्वारा निर्दिष्ट नहीं किया जाता है। इसे डोमेन सेवा पर कॉल करने के बाद या डोमेन सेवा से उठाए गए ईवेंट के रूप में या तो एप्लिकेशन सेवा द्वारा प्रक्रियात्मक रूप से निष्पादित किया जा सकता है।

जैसा कि मैंने कहा, यह हर किसी के परिभाषाएँ फिट नहीं हो सकता है, लेकिन यह मुझे लगता है कि सही चिंताओं को सही जगह में जाना बनाने के लिए मदद करता है।

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

समस्या वास्तव में यह जानने के लिए समय ले रही है कि एक वास्तविक "डोमेन चिंता" क्या है। उदाहरण के लिए, कोई उपयोगकर्ता कुछ मनमानी एप्लिकेशन पर टिप्पणी करने में सक्षम नहीं हो सकता है जब तक कि उसका ईमेल पता ज्ञात न हो। आप तर्क दे सकते हैं कि यह किसी भी परत में है। कुंजी वास्तव में संगत है।

+0

"इसके अतिरिक्त, डोमेन सेवाएं डोमेन ऑब्जेक्ट्स के उच्च स्तरीय संयोजनों को व्यूमोडेल में ऑर्केस्ट्रेट कर सकती हैं" - नहीं जो आवेदन सेवा में बेहतर फिट है? – BornToCode

1
  • डोमेन सेवा कई वर्गों जो पुन: उपयोग करने की आवश्यकता से मिलकर डोमेन के भीतर सेवाएं हैं।

    • एप्लिकेशन सेवाएं उन कक्षाओं का उपयोग करती हैं जहां तकनीकी कर्मचारियों को संपीड़न या एसएमएस संदेश जैसे किया जाता है।

कृपया डोमेन में अपने तर्क डाल सेवाओं में वस्तुओं। जटिल डोमेन में बहुत बेहतर पुन: उपयोग करें।

2

मुझे लगता है कि @ karsten उद्धरण उनके टिप्पणी में उद्धृत सबसे अधिक उत्तरदायी उत्तर से अधिक प्रामाणिक है कि @ joseph.ferris यहां पोस्ट किया गया है।

डोमेन सेवाएं "डोमेन में एक महत्वपूर्ण प्रक्रिया या परिवर्तन है जो एक ईएनटीटी या VALUE ऑब्जेक्ट की प्राकृतिक ज़िम्मेदारी नहीं है" (एरिक इवांस डोमेन-संचालित डिजाइन)।

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

एप्लिकेशन सेवाओं में डेटा से भरे डोमेन ऑब्जेक्ट को प्राप्त करने के लिए रिपॉजिटरी को कॉल किया जा सकता है, तो वे डोमेन ऑब्जेक्ट या डोमेन सेवा पर कुछ विधि कॉल कर सकते हैं और संशोधित डोमेन ऑब्जेक्ट को जारी रखने के लिए फिर से संग्रह को कॉल कर सकते हैं। वे आमतौर पर डोमेन सेवा से 'व्यापक' होते हैं क्योंकि उनमें एक संपूर्ण उपयोग केस होता है।

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