12

मैं एक एएसपी .net MVC आवेदन किया है और हाल ही में एक सेवा सत्यापन परत के साथ भंडार पैटर्न को लागू करने, ज्यादा this की तरह शुरू कर दिया।MVC भंडार पैटर्न डिजाइन निर्णय

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

मेरे लिए, यह है कि मैं या तो कई फाइलों के साथ इस परियोजना के पेड़ को अव्यवस्थित कर रहा हूँ या कई तरीके के साथ एक वर्ग को अव्यवस्थित लगती है। 6 एक तरफ आधे दर्जन दूसरे। क्या आप किसी भी अच्छे तर्क के बारे में सोच सकते हैं? वहाँ कोई सही जवाब है -

उत्तर

16

आम तौर पर, यदि आप अन्य सच्चाई परतों (जैसे ActiveRecord या DAO) के विपरीत "सत्य" रिपोजिटरी पैटर्न का उपयोग कर रहे हैं, तो आपको अपने डोमेन समेकन की पहचान करना और कुल योग एक संग्रह बनाना चाहिए।

इसका क्या अर्थ है? खैर, यह आपके ऐप पर बहुत निर्भर करता है, लेकिन आम तौर पर ऐसी वस्तुएं होती हैं जो स्वाभाविक रूप से अन्य वस्तुओं के 'माता-पिता' हैं, या जो संबंधित लेनदेन का हिस्सा हैं।

मुझे लगता है कि कैननिकल उदाहरण एक ईकॉमर्स सिस्टम है जिसमें आपके पास ऑर्डर की अवधारणा है, और एक क्रम में आपके ऑर्डरलाइन में कुछ ऑर्डरलाइन कुछ उत्पाद और मात्रा है, और इसी तरह।

उस स्थिति में, ऑर्डर ऑब्जेक्ट सिस्टम की कुल जड़ों में से एक है और ऑर्डर रिपोजिटरी बनाई गई है।

उस मामले में याद करने के लिए बात वहाँ एक आदेश और उसके अवधियाँ और इतने पर में कुछ संबंध है (अंतर्निहित या अन्यथा) कर रही है। इसलिए रिपोजिटरी पर "सीआरयूडी" के सी-यूडी भागों को आम तौर पर केवल एक विधि होना चाहिए, और आम तौर पर उस समग्र रूट ऑब्जेक्ट का उदाहरण लेना चाहिए और उस पर काम करना चाहिए (.e.g। Repo.Save (ऑर्डर))। अन्य संभावित पैरा वहां हो सकते हैं, लेकिन यह आपके प्रभाव पर निर्भर करता है।

वास्तव में, आप अक्सर सी-यूडी भाग w/विरासत में से अधिकांश को हल कर सकते हैं (यानी एक रिपोजिटरीबेस बनाते हैं जो आपके विशेष दृढ़ता योजना के लिए शॉउडल के बारे में कुछ ज्ञात तर्क का उपयोग करके उन्हें लागू करता है)।

तो यह हमें सीआरयूडी का आर हिस्सा छोड़ देता है। यदि आप क्वेरी विधि मार्ग पर जाना चुनते हैं तो इस मामले में आपको क्वेरी विधियों का एक टन मिल सकता है (GetById; GetByName; GetByCustomerName, आदि)। कुछ लोग सरल ऐप्स के लिए विशेष रूप से पसंद करते हैं, जो एक linq- आधारित इंटरफ़ेस (उदा। एक IQueryable GetAll()) का खुलासा करते हैं, जिसके बाद क्लॉज लागू हो सकते हैं।YMMV उस पर आपके अंतर्निहित दृढ़ता के आधार पर, लेकिन यह सरल ऐप्स, esp के लिए एक ठोस शॉट है। यदि आप अपने दृढ़ता प्रदाता से सीधे linq का समर्थन करने की उम्मीद करते हैं।

आखिरकार, कई लोग वास्तव में क्वेरी इंपैक्टेशन को एक इम्प्लांटेशन या कमांड क्वेरी जिम्मेदारी पृथक्करण पैटर्न के माध्यम से अलग करते हैं, जो कहता है कि जारी रखने और पूछताछ के लिए इंटरफेस अलग होना चाहिए। उस स्थिति में, आपके पास एक रेपो होगा जिसमें केवल मूल सीआरयूडी (GetById, GetAll, Save, Delete) ops और किसी अन्य प्रकार की दूसरी श्रेणी है जो आपके ऐप के इरादों के आधार पर चीजों से पूछताछ करती है।

आशा है कि मदद करता है।

पॉल

+0

पौलुस उस विस्तृत उत्तर के लिए धन्यवाद। बहुत सोचा और पढ़ने के बाद, मुझे लगता है कि आप प्रति रूट एक भंडार/सेवा के साथ स्पॉट पर हैं। आप सीआरयूडी के बारे में भी सही हैं, सी_यूडी के लिए प्रत्येक विधि और आर के कई तरीके आर। आपके ऑर्डर उदाहरण में, ऑर्डर रेपॉजिटरी ऑर्डरलाइन और ऑर्डरसबलाइन के लिए आर विधियों को रखने का स्थान भी होगा? – bradjive

+0

यह एक अच्छा सवाल है, और यह निर्भर करता है। ऑर्डरलाइन और sublines वास्तव में कुछ भी उनके संबंधित आदेश w/o उपयोगी उपयोगी मतलब है? यदि ऐसा है, तो हाँ, यदि नहीं, तो आपके सभी प्रश्नों को डब्ल्यू/ऑर्डर करना होगा और आप INumerables पर नियमित LINQ अभिव्यक्तियों का उपयोग करके बाल संग्रह को फ़िल्टर कर सकते हैं। – Paul

3

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

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

मेरी सलाह यह कोशिश करनी होगी और देखें कि यह फिट बैठता है, और देखें कि यह सही लगता है या नहीं। आमतौर पर, यदि यह महसूस नहीं करता है, तो यह गलत है।

आप अपने स्रोत कोड पेड़ को अव्यवस्थित की वास्तव में डर रहे हैं, तो आप हमेशा मॉडल हिस्सा बाहर अपने स्वयं के पुस्तकालय में तोड़, और एक निर्भरता के रूप में शामिल कर सकते हैं।

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