2009-11-02 30 views
11

क्या किसी नियंत्रक को कभी भी रिपोजिटरी को कॉल करने की आवश्यकता होनी चाहिए, या सेवा सेवा के बावजूद इसे हमेशा चलाना चाहिए? या क्या अन्य विकल्प हैं?एएसपी.नेट एमवीसी - रेस्पोजिटरी/सेवा/नियंत्रक

उत्तर

11

यदि आपके पास सेवा परत है और आप इसे इस तरह से उपयोग कर रहे हैं जो व्यवसाय तर्क को भंडार से दूर कर देता है (जैसा कि आपको सेवा परत के साथ होना चाहिए) तो नहीं, आपके नियंत्रक केवल सेवा में कॉल कर रहे हैं तरीकों। सेवा परत फिर रेपो के साथ युग्मन होगा।

माया के उत्तर के आगे: मॉडल डेटा कक्षाएं हैं जो पूरे एप्लिकेशन (रेपो, सेवा और यूआई/नियंत्रक) में पारित की जाएंगी ताकि यूआई/वेब परत को अन्य परतों की तरह 'संचालित' करना चाहिए।

मुझे लगता है कि अगर आप Fowler's definition के संदर्भ और modern aspnet mvcadaptions में एक सेवा परत को लागू है, तो आप अपने नियंत्रक कार्यों बहुत छोटे और हल्के तरीके के रूप में तैयार किया गया होना चाहिए, आपकी सेवा परत से 'भावपूर्ण' व्यापार तर्क बुला।

संपादित करें: मुझे लगता है कि मैं स्पष्ट नहीं था: मैं यह नहीं कह रहा हूँ होने एक सेवा परत ही एकमात्र विकल्प है, बस प्रश्न मामले ऐसे हैं जिनमें उपयोग कर से संबंधित का हिस्सा जवाब देने के लिए कोशिश कर रहा है एक सेवा परत। सहमत हैं, विशेष रूप से छोटी परियोजनाओं के लिए एक सेवा परत हमेशा जरूरी नहीं है।

+0

+1 मुझे लगता है कि आप मुझे मानते हैं? "नियंत्रक से तर्क का हर बिट," – Mayo

0

मेरे द्वारा काम किए जा रहे सभी उदाहरणों का सुझाव है कि नियंत्रक को मॉडल पर काम करना चाहिए।

यह कहा गया है कि मैंने कुछ लेखकों को यह सुझाव दिया है कि मॉडल व्यापार तर्क से डेटा भंडार (सब कुछ व्यावसायिक वस्तु वर्गों के विपरीत है जो कई मॉडल मानते हैं) के रूप में बना है।

व्यक्तिगत रूप से, मैं नियंत्रक के खिलाफ संचालित कक्षाओं पर नियंत्रक संचालित करके इसे साफ/सुसंगत रखने की कोशिश करता हूं - लेकिन मुझे नहीं लगता कि इसके खिलाफ एक कठिन/तेज नियम है।

+0

टिप्पणी करें कि आपको उत्तर लोगों को क्यों पसंद नहीं है ... अन्यथा कोई भी नहीं सीखता है। :) – Mayo

+0

यह +1 +1 -1 कहता है? हालांकि यह नहीं था कि वोट किसने किया था, जवाब वास्तव में मदद नहीं करता है। रिपोजिटरी/सर्विस पैटर्न में मॉडल मॉडल रिपोजिटरी/सर्विस नहीं है। मैं सिर्फ सेवा पर काम करना चाहता हूं लेकिन मुझे यकीन नहीं है कि अगर परिणामस्वरूप अत्यधिक कोड डुप्लिकेशन – LiamB

+0

दिखाई देगा तो मैं देख सकता हूं ... तो वह -1 को समझा सकता है। मैंने अभी माना है कि आप इसे अलग शब्दावली कह रहे थे - एक अलग अवधारणा नहीं। मुझे आज शोध करने के लिए कुछ देता है (काम पर धीमा दिन)। – Mayo

-1

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

सबसे अच्छा विकल्प आईएमएचओ नियंत्रक के भीतर से अपने भंडार तक पहुंचने के लिए DI का उपयोग करना है।

+2

के लिए – LiamB

+0

उम, नहीं, मॉडल से तर्क के हर बिट। मॉडल कुछ भी नहीं करते हैं लेकिन उपयोगकर्ता इनपुट/अनुरोधों के जवाब में नियंत्रक एकत्रित डेटा संग्रहित करते हैं। – Will

+0

यह 'एनीमिक मॉडल' होगा, और अधिकांश लोगों द्वारा बहुत अच्छा अभ्यास नहीं माना जाता है: http://en.wikipedia.org/wiki/Anemic_Domain_Model – UpTheCreek

0

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

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

8

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

3

मैं इंजीनियरिंग इंजीनियरिंग बिंदु के बारे में @Sosh से सहमत हूं। लेकिन मुझे नियंत्रक को सेवा के माध्यम से जाने से एक बड़ा फायदा मिला है जब एसओएपी/आरईएसटी के माध्यम से तार पर उस सेवा का पुन: उपयोग करने का समय आता है तो आपका रिफैक्टर काम बहुत ही कम है। ध्यान रखें कि यह यज्ञी का उल्लंघन करता है और यह आगे सोच रहा है (कुछ हद तक)।

लेकिन फिर फिर - जेफरी पालेर्मो - MVC In Action द्वारा नवीनतम पुस्तक पढ़ने के बाद, उसके पास एक रोटोजिटरी के साथ शून्य तर्क बात के साथ एक नियंत्रक है और यह ठीक काम करता है।

+0

हाँ, वेब सेवाओं के बारे में अच्छी बात है। – UpTheCreek

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