11

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

मेरे पास 4 परियोजनाएं हैं: कोर, इंफ्रास्ट्रक्चर, वेब & टेस्ट।

जो मैंने सीखा है, से .edmx फ़ाइल को मेरे "इन्फ्रास्ट्रक्चर" फ़ोल्डर के तहत रखा जाना चाहिए। हालांकि, मैंने ईएफ डीकॉप्लिंग और निर्भरता इंजेक्शन का उपयोग करने के लिए रिपोजिटरी और वर्क पैटर्न के यूनिट का उपयोग करने के बारे में भी पढ़ा है।

इस किया जा रहा है के साथ कहा:

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

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

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

मेरे प्रश्न को देखने के लिए धन्यवाद और कृपया कोई भी वैकल्पिक प्रतिक्रिया दें।

मैंने पाया एक समान पद है कि यहाँ उत्तर नहीं दिया गया: EF6 and Onion architecture - database first and without Repository pattern

+2

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

+0

ईडीएमएक्स पर @ एंथनीचु के साथ सहमत हैं। आपको ईएफ पावर टूल्स के साथ पहले रिवर्स इंजीनियर कोड में देखना चाहिए। – EfrainReyes

+0

धन्यवाद दोस्तों। @ एंथनी कू संदर्भों को बाध्य करेगा और डीडीडी एक समाधान प्रदान करेगा जो डेटाबेस-प्रथम या वैकल्पिक के साथ काम करता है? –

उत्तर

7

डाटाबेस पहले करता है पूरी तरह से प्याज वास्तुकला (बंदरगाह और एडेप्टर या हेक्सागोनल वास्तुकला उर्फ ​​से इनकार नहीं है, तो आप अगर आप उन वे 'के लिए संदर्भ देखें वही बात फिर से करें), लेकिन यह निश्चित रूप से अधिक कठिन है। प्याज आर्किटेक्चर और चिंताओं को अलग करने से यह डोमेन-संचालित डिज़ाइन के साथ बहुत अच्छी तरह से फिट हो जाता है (मुझे लगता है कि आपने ट्विटर पर उल्लेख किया है जिसे आपने पहले ही some of my videos on this subject on Pluralsight देखा होगा)।

आपको निश्चित रूप से कोर या वेब परियोजनाओं में ईडीएमएक्स डालने से बचना चाहिए - इसके लिए बुनियादी ढांचा सही स्थान है। उस बिंदु पर, डेटाबेस-पहले के साथ, आप इंफ्रास्ट्रक्चर में ईएफ इकाइयां रखने जा रहे हैं। हालांकि, आप अपनी व्यावसायिक वस्तुओं/डोमेन इकाइयों को कोर में रहने के लिए चाहते हैं। यदि आप इस पथ को जारी रखना चाहते हैं तो उस बिंदु पर मूल रूप से दो विकल्प होते हैं:

1) पहले डेटाबेस से पहले कोड (शायद एक उपकरण का उपयोग करके) स्विच करें ताकि आप कोर में पॉको इकाइयां प्राप्त कर सकें।

2) अपने इंफ्रास्ट्रक्चर इकाइयों और आपकी कोर ऑब्जेक्ट्स के बीच आगे और पीछे नक्शा, शायद ऑटोमैपर जैसे कुछ का उपयोग कर। ईएफ समर्थित पीओसीओ इकाइयों से पहले यह दृष्टिकोण था जब मैंने इसका उपयोग किया था, और मैं उन रिपॉजिटरीज लिखूंगा जो केवल कोर ऑब्जेक्ट्स के साथ निपटाए थे लेकिन आंतरिक रूप से ईएफ-विशिष्ट इकाइयों को मैप करेंगे।

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

ऐसा महसूस न करें कि आपके पास प्रति एप्लिकेशन केवल एक dbcontext हो सकता है। ऐसा लगता है जैसे आप इस डिजाइन को समय के साथ विकसित कर रहे हैं, हरे रंग के फील्ड एप्लिकेशन से शुरू नहीं कर रहे हैं। इसके अंत में, आप अपनी .edmx फ़ाइल और शायद सीआरयूडी प्रयोजनों के लिए एक सामान्य भंडार रख सकते हैं, लेकिन फिर एक नए कोड को पहले डीबीकॉनटेक्स्ट बनाएं जो संचालन के विशिष्ट सेट के लिए है जो पीओसीओ इकाइयों को वारंट करता है, चिंताओं को अलग करता है, टेस्टेबिलिटी में वृद्धि करता है आदि। समय के साथ , आप इसका उपयोग करने के लिए आवश्यक कोड का बड़ा हिस्सा बदल सकते हैं, जबकि अभी भी मौजूदा dbcontext को रखते हुए आप खोना और वर्तमान कार्यक्षमता नहीं खोते हैं।

+0

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

+0

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

+1

बिल्कुल वही जो मैं @ssmith के लिए देख रहा था धन्यवाद! मैंने इस अवधारणा के बारे में और अधिक सीखने के लिए जूली के साथ अपना डीडीडी पाठ्यक्रम खोला है। –

1

मैं अपने डीडीडी प्रोजेक्ट में इकाई फ्रेमवर्क 6.1 का उपयोग कर रहा हूं। यदि आप प्याज आर्किटेक्चर करना चाहते हैं तो कोड पहले बहुत अच्छी तरह से काम करता है।

मेरी परियोजना में हमने डोमेन मॉडल से पूरी तरह से रिपोजिटरी अलग कर दी है। एप्लिकेशन सेवा डेटाबेस को समेकित करने और समेकित रखने के लिए भंडार का उपयोग करती है। इसलिए, डोमेन (कोर) में कोई भंडार इंटरफेस नहीं है।

एक अलग असेंबली में पीओसीओ उत्पन्न करने के लिए टी 4 का उपयोग करने का दूसरा विकल्प एक अच्छा विचार है। कृपया याद रखें कि आपका डोमेन मॉडल (कोर) दृढ़ता से होना चाहिए-अज्ञानी होना चाहिए।

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

http://codingcraft.wordpress.com/

+0

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

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