2011-03-07 23 views
6

से रिपॉजिटरी एक्सेस करना मैं अपने वेब एप्लिकेशन में डोमेन-संचालित डिज़ाइन पैटर्न को लागू करने पर काम कर रहा हूं। जिन मुद्दों में हमने भाग लिया है उनमें से एक इकाई के भीतर से एक भंडार का उपयोग करने से परहेज कर रहा है।डोमेन-संचालित डिज़ाइन पैटर्न - डोमेन

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

क्या हमें इन उदाहरणों में "सेवा" या "एप्लिकेशन" परत का उपयोग करना चाहिए (हमारे पास उनमें से बहुत सारे हैं)? क्या इस मुद्दे को हल करने का कोई बेहतर तरीका है?

उत्तर

5

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

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

+1

सेवा का उपयोग करना एक अच्छा तरीका है। सेवा के इंजेक्शन के बारे में: * कन्स्ट्रक्टर * की बजाय * विधि * को सेवा पास करके डबल-प्रेषण दृष्टिकोण का उपयोग करना बेहतर है। इससे पता चलता है कि कौन सी विधियां सेवा पर निर्भर हैं और आपको प्रत्येक विधि के लिए विभिन्न सेवा कार्यान्वयन का उपयोग करने की अनुमति देती है। –

3

डोमेन अज्ञान होना चाहिए। आपको भीतर से "भंडार से बात नहीं करनी चाहिए"।

आपके परिदृश्य में - I would raise domain event (उदा। "ग्राहक कुछ खरीद रहा है") और बाहर से ई-मेल भेजना संभालता है।

+3

"डोमेन दृढ़ता से अज्ञान होना चाहिए।" - सच। "आपको भीतर से" भंडार से बात नहीं करनी चाहिए "। - असत्य। आपको एक भंडार का इंटरफ़ेस एक्सेस करना चाहिए जिसे बाहर कार्यान्वित किया जाना चाहिए। – dariol

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