रिपोजिटरी पैटर्न बनाम डीएएल ऑब्जेक्ट क्रिएशन


9

जहां तक ​​मैंने सीखा है, इसमें IRepositoryहोना चाहिए CRUD। फिर हम इसे IRepositoryअपने अन्य इंटरफेसेस की तरह विरासत में देते हैं IProductऔर IProductकंक्रीट क्लास को लागू ProductRepositoryकरते हैं GetAllProducts(), जैसे तरीके Top5Products()

हम n-tier आर्किटेक्चर के साथ भी ऐसा ही कर सकते थे। जैसे, बनाना DAL Class Libraryऔर उस में एक वर्ग को परिभाषित Productतरह के तरीकों के साथ GetAllProducts(), Top5Products()

दोनों में DAL.Productऔर Repo.ProductRepositoryकक्षाएं हम प्रारंभ DB Contextकी Entity Frameworkऔर हमारे लिए प्रासंगिक डेटा क्वेरी।

कॉलिंग दोनों से Repo.ProductRepositoryया DAL.Productविधियों से समान हैBLL

इन समानताओं के मद्देनजर, मेरा सवाल यह है कि Repos का क्या लाभ है? मैं के साथ n स्तरीय आर्किटेक्चर का उपयोग कर बहुत आसानी के साथ भी ऐसा ही कर सकते हैं ( Controller, BLL Class Library, DAL Class Library)।


@ मुझे लगता है कि ओपी डीएएल से परिचित है और पूछता है कि क्या रिपॉजिटरी एक ही काम करने के लिए सिर्फ अन्य इंटरफेस हैं या यदि यह अधिक है
क्रिस्टोफ

@Christophe बिल्कुल, मैं इस पर उलझन में हूं। अगर हम DAL में भी ऐसा कर सकते हैं तो रेपो पैटर्न का उपयोग क्यों करें?
एम। अर्सलान

जवाबों:


7

मेरी समझ है:

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

  • रिपॉजिटरी DDD (डोमेन ड्रिवेन डिज़ाइन) की एक अवधारणा है।

DDD में, एक रिपोजिटरी किसी दिए गए एग्रीगेट के लिए सभी डेटा एक्सेस चिंताओं को एनकैप्सुलेट करने के लिए जिम्मेदार है । यह एग्रीगेट के पढ़ने और लिखने के दौरान निरंतरता सुनिश्चित करने की जिम्मेदारी के साथ आता है। और एक सकल संबंधित संस्थाओं (जैसे, का एक समूह है Product, Store, आदि)।

तो, एक रिपॉजिटरी विशेष रूप से अपने एग्रीगेट की दृढ़ता और स्थिरता की चिंताओं से अवगत है। आपका सामान्य DAL सबसे अधिक विशिष्ट रिपोजिटरी से बना होगा

टी एल; डॉ;

  • DAL डेटा एक्सेस चिंताओं को दूर करने के लिए एक सामान्य शब्द है।
  • रिपोजिटरी एक समान, लेकिन अधिक विशिष्ट, डीडीडी से अवधारणा है।
  • आपका DAL संभवतः कई रिपोजिटरी से बना होगा।

4
रिपॉजिटरी भी एक शब्द है जो डीडीडी के बाहर और अधिक उपयोग किया जाता है जो डेटाबेस रिकॉर्ड्स को मिरर करने वाली ऑब्जेक्ट्स की इन-मेमोरी कलेक्शन को संदर्भित करता है। इस संदर्भ में, यहडीएएल और बिजनेस लॉजिक लेयर के बीच बैठता है। देखें martinfowler.com/eaaCatalog/repository.html
रॉबर्ट हार्वे

हर कोई हर चीज के लिए DDD क्रेडिट देने की कोशिश क्यों करता है ?!
TheCatWhisperer

1
आज मैंने सीखा: पी
मेटाफ़ाइट

2

आप दो अलग और पूरक अवधारणाओं की तुलना कर रहे हैं:

  • डेटा एक्सेस परत एक वास्तुशिल्प परत है कि आंकड़ों के सार का उपयोग करने का इरादा रखता है। यह नहीं कहता है कि अभिगम कैसे समाप्त हो जाएगा।
  • भंडार एक विशिष्ट पैटर्न है कि दल (के अंत में पैटर्न की सूची देखने के अंतर्गत आता है है इस लिंक )। यह वास्तव में डेटा की एक विशिष्ट पहुंच को कैसे सार करता है: डेटा स्टोर में इंटरफ़ेस जैसे संग्रह की पेशकश करके कहता है।

आपके उदाहरण में DAL

दिलचस्प है, कक्षा पुस्तकालय के आपके उदाहरण में, DAL.Productएक भंडार प्रतीत होता है। इसलिए यह सामान्य है कि आप वास्तव में अंतर नहीं देखते हैं: कार्यान्वयन के दृष्टिकोण से यह समान है (इस विशिष्ट मामले में)।
लेकिन यह करने के लिए नहीं है; एक DAL को अलग तरह से लागू किया जा सकता है, उदाहरण के लिए:

  • सक्रिय रिकॉर्ड जो एक डेटाबेस अमूर्त परत पर भरोसा करते हैं।
  • एनीमिक डोमेन ऑब्जेक्ट्स (ध्यान, विरोधी पैटर्न!) एक पंक्ति डेटा गेटवे से प्राप्त किया
  • या क्यों नहीं, अलग-अलग क्वेरी ऑब्जेक्ट से प्राप्त डोमेन ऑब्जेक्ट, जहां प्रत्येक क्वेरी ऑब्जेक्ट को पुनर्प्राप्त करने के लिए एक विशेष तरीके को लागू करेगा
  • खजाने
  • उन सभी का मिश्रण

रिपॉजिटरी के लिए अलग क्या है

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.