2009-11-09 21 views
6

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

मैं अपनी कक्षाओं के लिए रिपोजिटरी डिज़ाइन पैटर्न का लाभ उठाने का प्रयास कर रहा हूं, जो मुझे मेरे प्रश्न के बारे में बताता है कि कितना भंडार में रखा जाए।

  • विषय
  • विषय टिप्पणियां (विषय अनेक टिप्पणियाँ हो सकता है)
  • विषय संशोधन (किसी भी समय एक विषय संपादित किया जाता है, एक संशोधन दर्ज की गई है)
  • :

    मैं निम्नलिखित संस्थाओं है विषय सदस्यता (उपयोगकर्ताओं को किसी विशेष विषय के लिए परिवर्तनों की सदस्यता लेने की अनुमति देता है)

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

मुझे आश्चर्य है कि यह सब टॉपिक रिपोजिटरी में जाता है या क्या मैं प्रत्येक इकाई के लिए एक संग्रह बना देता हूं, उदाहरण के लिए, टॉपिक रिविजन रिपोजिटरी और इसी तरह।

उत्तर

8

औसत एमवीसी डेटा एक्सेस रणनीति और रिपोजिटरी पैटर्न की डोमेन-ड्राइव-डिज़ाइन समझ के बीच एक बहुत ही महत्वपूर्ण डिस्कनेक्ट है।

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

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

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

1

मेरी राय यह उसके अपने भंडार में जाने चाहिए ...

संपादित करें: डोमेन और डेटा मानचित्रण परतों डोमेन पहुँचने के लिए एक संग्रह की तरह इंटरफ़ेस के बीच

मध्यस्थता करता है ऑब्जेक्ट्स।

Repository Pattern

यह अगर अनुमति देता है अपने this example जो कम कोड का मतलब है ...

2

NerdDinner tutorial को देखते हुए की तरह एक सामान्य भंडार का उपयोग करने के इच्छुक हैं, वे इकाई प्रति एक respository साथ जाने के लिए लग रहे हैं।

जब आप इसके बारे में सोचते हैं, तो यह समझ में आता है। ऐसे मामले होंगे जहां आप उप-संस्थाओं को लोड करने के दौरान नियंत्रण रखना चाहते हैं।

2

मुझे लगता है कि यह इस बात पर निर्भर करता है कि आप अपने डेटा तक कैसे पहुंच सकते हैं। परिवर्तन हमेशा आपकी टिप्पणियों के साथ एक विषय को देखने के लिए जाते हैं और इसके विपरीत (32) टिप्पणियां यूआई तत्वों के लिए।

इसलिए आपका विषय Aggregate Root बन गया है और आपको केवल इस दृष्टिकोण के लिए एक ही भंडार की आवश्यकता है।

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

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

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

+1

कुल रूट लिंक को अद्यतन करने की आवश्यकता है। –

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