7

मेरे पास मानक ऑर्डर/ऑर्डरलाइन इटैम सेटअप है।डीडीडी/डीआई (एकता)/.NET/संरचना रूट - डोमेन सेवाएं

दिन के दौरान जारी किए जाने वाले दिन के दौरान कई धनवापसी उत्पन्न होती है, रिफंड में ऑर्डर आईडी और 1 या अधिक LineItemId होता है। क्रेडिट कार्ड, गिफ्ट कार्ड, रिवार्ड कार्ड इत्यादि के लिए दिन के धनवापसी के अंत में मुझे इन्हें (विंडोज सेवा में) समेकित करने की आवश्यकता है।

मैं Mark Seemann's book पढ़ रहा हूं और ऑब्जेक्ट ग्राफ़ को हल करने के लिए Composition Root का उपयोग करने का लाभ देख सकता हूं।

एकीकरण प्रक्रिया स्वयं ही है जहां मुझे सबसे अधिक रचना करने की आवश्यकता है।

जो मुझे समझ में नहीं आता वह बिल्कुल ठीक है जहां यह समेकन तर्क समाप्त होना चाहिए? क्या मैं मान सकता हूं कि समेकन तर्क समाप्त होने के बावजूद मैं अभी भी रचना रूट में एकता की तरह कुछ उपयोग करता हूं और यह संरचना बहुत जल्दी होनी चाहिए?

अधिक जानकारी प्रदान करने या उपयुक्त के रूप में स्पष्ट करने के लिए खुश!

उत्तर

3

एकीकरण प्रक्रिया स्वयं ही है जहां मुझे सबसे अधिक रचना करने की आवश्यकता है।

तो, आप का मतलब है कि आपके सिस्टम में डेटा बनाने की प्रक्रिया सबसे अधिक डोमेन ऑब्जेक्ट्स बनाई जाएगी?

यह समझ में आता है, और अधिकांश अनुप्रयोगों के अनुरूप है।

मुझे समझ में नहीं आता कि यह समेकन तर्क समाप्त होना चाहिए?

समेकन तर्क एक या अधिक सेवा घटकों, संभावना है कि एक या अधिक repository घटकों और एक या अधिक unit of work घटकों का इस्तेमाल करता द्वारा प्रदान किया जाएगा। वह सेवा संरचना जड़ में बनाई जाएगी, जैसा कि आपके द्वारा बनाए गए काम की कोई भी रिपॉजिटरी/इकाइयां बनेंगी।

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

फिर आप भंडारण से डेटा पुनर्प्राप्त करने के लिए काम की भंडार/इकाई का उपयोग कर सकते हैं। आप new का उपयोग करके नया डेटा बनाने के लिए अपनी यूआई/सेवा का भी उपयोग करते हैं - इसमें डोमेन ऑब्जेक्ट्स के लिए कोई शर्म नहीं है जो पूरी तरह से डेटा हैं, और इसकी कोई निर्भरता नहीं है। काम के भंडार/इकाई में नए या संशोधित डेटा को जारी रखें।

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

तो आपको सबकुछ प्रदान करने के लिए एकता का उपयोग करने की आवश्यकता नहीं है, और आपको संरचना रूट में अपने सिस्टम में बिल्कुल हर ऑब्जेक्ट बनाने की ज़रूरत नहीं है। लेकिन आपको रचना प्रणाली में अपने सिस्टम के स्थिर टुकड़े, या यहां तक ​​कि स्थिर रूप से कॉन्फ़िगर करने योग्य गतिशील टुकड़े लिखने की कोशिश करनी चाहिए। यह एकता जैसे डी कंटेनर के लिए बहुत अच्छी तरह से नक्शे।

+0

आपके उत्तर के लिए धन्यवाद। मेरे ऊपर एक प्रश्न है जो आपने ऊपर बताया है ... क्या मुझे हमेशा एक सेवा का उपयोग करना चाहिए जो बदले में किसी भी भंडार का उपयोग करने के विरोध में एक भंडार का उपयोग करता है? – inthegarden

+0

@inthegarden: आप सीधे किसी सेवा की त्वचा पर रिपोजिटरी का पर्दाफाश नहीं कर सकते हैं, और आप इकाइयों को सीधे UI पर वापस नहीं कर सकते हैं। तो आपके ऐप के शीर्ष स्तर पर आपको * कुछ * परत की आवश्यकता होगी। यदि यह पूरी तरह से एक कॉल करने योग्य सेवा परत पर नक्शा करता है, तो यह बहुत अच्छा है। लेकिन मैं उस परत पर सबकुछ में सभी सेवा हुक नहीं डालूंगा * जब तक कि मैं वेब सेवा को कॉल करने वाले लोगों को यूआई पर कार्यक्षमता के प्रत्येक टुकड़े का पर्दाफाश नहीं करना चाहता था। सेवा यूआई से आवश्यकताओं का एक अलग सेट है, इसलिए सबकुछ इसके माध्यम से जाने के साथ अति उत्साही न हों। –

3

यदि आपके धनवापसी आइटम केवल डेटा कंटेनर या संस्थाएं हैं जिनके पास सेवाओं पर कोई निर्भरता नहीं है तो आप केवल नए का उपयोग करके एक उदाहरण बना सकते हैं।

यदि उनके पास निर्भरताएं हैं और आपके आईओसी कंटेनर द्वारा बनाई जानी चाहिए और आप स्टार्टअप पर नहीं कर सकते हैं तो आप फ़ैक्टरी इंटरफ़ेस का उपयोग करना चाहेंगे। इस फैक्ट्री इंटरफेस में एक CreateRefund विधि है जिसमें सभी आवश्यक पैरामीटर हैं जिन्हें आप बनाए गए उदाहरण में पास करना चाहते हैं। यह इंटरफ़ेस अपने उपभोक्ता के नामस्थान/असेंबली में परिभाषित किया गया है।

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

इस तरह कंटेनर तक पहुंचने वाला एकमात्र स्थान संरचना रूट में है।

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