2013-09-05 3 views
11

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

उत्तर

7

नियंत्रक को डीडीडी में सेवा नहीं माना जाता है। नियंत्रक यूआई स्तर में काम करते हैं। आवेदन सेवाओं को डीबी से डेटा प्राप्त होता है, डेटा को मान्य करता है, क्लाइंट को डेटा पास करता है (एमवीसी क्लाइंट हो सकता है लेकिन एक विनफॉर्म ऐप से अनुरोध भी हो सकता है) आदि

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

+0

नियंत्रक सेवा अनुरोध से गुजरने के अनुरोध से अनुरोध - या मॉडल के लिए इसका प्रासंगिक हिस्सा - अनुरोध। एमवीसी एक वास्तुकला है और निश्चित रूप से Winforms के साथ ही वेब ऐप्स पर भी लागू किया जा सकता है। मैं नियंत्रक की स्थिति के बारे में अलग होना चाहता हूं। व्यू निश्चित रूप से एकमात्र यूआई-लेयर है और एमवीसी का बिंदु यह यूआई-लेयर नियंत्रक से अलग रखना है। आपका बिंदु अच्छी तरह से लिया जाता है; जवाब के लिए धन्यवाद। – Louis

+0

-1। नियंत्रक अनुरोध/आदेश समन्वयक हैं।हेक्सागोनल आर्किटेक्चर नियंत्रकों में एप्लिकेशन सेवाओं/कमांड हैंडलर/क्वेरी हैंडलर के ठीक ऊपर हैं। नियंत्रक एक अनुरोध अनुवादक है और संचार प्रोटोकॉल (ऊपरी परत) और कमांड/क्वेरी हैंडलर (निचले स्तर से एप्लिकेशन सेवाएं) के साथ मिलकर है। नियंत्रकों को एप्लिकेशन सेवा facades के रूप में देखा जा सकता है क्योंकि वे निचले स्तर परतों (आवेदन सेवा/कमांड-क्वेरी हैंडलर) द्वारा प्रक्रिया के लिए आदेश/क्वेरी/संदेश अनुवाद और तैयार करते हैं। – Tudor

+0

-1 क्योंकि नियंत्रकों के पास डीडीडी के साथ कुछ लेना देना नहीं है। यह अपरिहार्य है जहां आप नियंत्रक डालते हैं, आप कह सकते हैं कि नियंत्रक केवल संदेश/संचार समन्वयक हैं और वे दोनों तरीकों से मिलकर हैं: यूई और एप्लिकेशन सेवा। आपके पास एक बाध्य संदर्भ में नियंत्रक हो सकते हैं जहां कोई UI (शुद्ध कमांडिंग संदर्भ) नहीं है। और आप केवल प्रेजेंटेशन के लिए एक बाध्य संदर्भ हो सकते हैं (केवल 2 या अधिक बाध्य संदर्भों के लिए पूछे जाने वाले एक समग्र व्यापार घटक)। अनुलेख नियंत्रकों के पास UI के लिए कम युग्मन होता है, वे केवल अनुरोध पैरामीटर के सेट की अपेक्षा करते हैं, इससे कोई फर्क नहीं पड़ता। – Tudor

1

एक स्तरित आर्किटेक्चर यूआई-लेयर, ऐप-लेयर, डोमेन लेयर और इंफ्रास्ट्रक्चर लेयर (Vaugn Vernons कार्यान्वित डोमेन-संचालित डिज़ाइन (स्थान 2 9 01) में एप्लिकेशन को विभाजित करता है। नियंत्रक इस व्यापक डिजाइन आर्किटेक्चर के "एप्लिकेशन लेयर" में पड़ता है और इसलिए मॉडल में सीधे डोमेन सेवाओं के साथ बातचीत करेगा और उसे एक एप्लिकेशन सेवा माना जाएगा। इतना ही नहीं, यह स्पष्ट रूप से उपलब्ध इकाइयों और योगों का भी उपयोग करेगा।

+4

यदि आप पीजी देखते हैं। इवान के डीडीडी के 72 आप देखेंगे कि आंकड़ा 4.1 नियंत्रक को यूआई परत का हिस्सा बनने के लिए दिखाता है। और यह समझ में आता है क्योंकि यदि वी और सी अलग परतों में होंगे, तो आप उनके बीच घनिष्ठ युग्मन करेंगे जब परतों को केवल संकेत और इंटरफेस के माध्यम से जोड़ा जाना चाहिए। – Gordon

+1

@ लुइस, मैंने वोगन वर्नन्स पुस्तक नहीं पढ़ी है, लेकिन मैंने अभी एक सफल डीडीडी परियोजना से बाहर आ गया है। मैं बस इतना कह सकता हूं कि नियंत्रक पूरी तरह से अलग परियोजना, क्लाइंट प्रोजेक्ट में थे। हमारे मामले में ग्राहक एक एमवीसी फ्रंट एंड था। यह कोई अन्य ग्राहक हो सकता था। आवेदन स्तर एक पूरी तरह से अलग परियोजना थी जो अपने दो चरणों में खड़ी थी। इसके अपने वैधकर्ता थे और डब्ल्यूसीएफ इंटरफ़ेस के माध्यम से डेटा प्रस्तुत कर सकते थे। एमवीसी क्लाइंट में नियंत्रकों को केवल एप्लिकेशन परत की प्रॉक्सी विधियों कहा जाता है। इसके अलावा, उन्होंने कोई अन्य कार्य नहीं किया। – Greg

+0

@ गॉर्डन वी और सी निष्क्रिय विचारों या पर्यवेक्षण नियंत्रकों का उपयोग करके decoupled किया जा सकता है। कुछ अनुप्रयोगों के लिए, उन्हें जोड़ना आवश्यक रूप से एक बुरा विचार नहीं है। यह विकसित होने वाले अनुप्रयोग के विनिर्देशों पर बहुत निर्भर करता है। इवांस के पेज 72 के आपके संदर्भ के प्रकाश में, मैं अपना जवाब वापस ले जाऊंगा क्योंकि ऐसा लगता है कि मेरे दृष्टिकोण से अलग अन्य दृष्टिकोण हैं। जवाब के लिए धन्यवाद। मेरी इच्छा है कि हम रचनात्मक नहीं होने के कारण बंद होने के जोखिम के बिना एसओ पर अच्छी चर्चा कर सकें;) – Louis

0

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

Domain Driven Design: Domain Service, Application Service

  • डोमेन सेवा: - उन एक भंडार के हैं होगा व्यापार तर्क स्वाभाविक रूप से एक डोमेन वस्तु में नहीं आता है कि, और ठेठ CRUD संचालन नहीं हैं समाहित।
  • आवेदन सेवाएं: बाहरी उपभोक्ताओं द्वारा आपके सिस्टम से बात करने के लिए प्रयुक्त (वेब ​​सेवा सोचें)। यदि उपभोक्ताओं को सीआरयूडी संचालन तक पहुंच की आवश्यकता है, तो वे यहां सामने आएंगे।

तो आपकी सेवा शायद एक आवेदन सेवा और नहीं एक डोमेन सेवा, या कुछ हिस्सा एप्लिकेशन सेवाओं, कुछ हिस्सा डोमेन सेवा है। आपको अपने कोड की जांच और पुनर्विक्रेता करनी चाहिए। मुझे लगता है कि 4 साल बाद इससे कोई फर्क नहीं पड़ता, लेकिन मेरे पास एक ऐसे अनुप्रयोग द्वारा वही विचार थे जो मैं वर्तमान में विकसित कर रहा हूं। यह ऐप डीडीडी का उपयोग करने के लिए बहुत छोटा हो सकता है, इसलिए ऐप सेवाओं के साथ भ्रमित नियंत्रक यहां overengineering का संकेत है।

यह एक दिलचस्प सवाल है जब अधिक परत जोड़ने शुरू करें। मुझे लगता है कि उस ऐप को उस डोमेन मॉडल से कनेक्ट करने के लिए किसी प्रकार के domain model and adapters से शुरू होना चाहिए। तो यदि ऐप पर्याप्त सरल है, तो 2 से अधिक परतों को जोड़ना आवश्यक नहीं हो सकता है। लेकिन यह सिर्फ एक विचार है, मैं डीडीडी के साथ अनुभवी नहीं हूं।

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