2010-10-19 8 views
15

संभव डुप्लिकेट:
ASP.NET MVC - Linq to Entities model as the ViewModel - is this good practice?एएसपी.नेट एमवीसी: ईएफ इकाइयों का उपयोग व्यूमोडेल के रूप में करते हुए?

है ASP.NET MVC में दृश्य मॉडल के रूप में एफई संस्थाओं वर्गों का उपयोग करने के लिए ठीक है?

क्या होगा यदि व्यूमोडेल ईएफ इकाई वर्ग का 9 0% समान है?

मान लें कि मेरे पास एंटीटी फ्रेमवर्क मॉडल में एक सर्वे क्लास है। इसे संपादित करने के लिए 9 0% डेटा आवश्यक है। दृश्य मॉडल के पास एकमात्र अंतर होना चाहिए - इसमें एक या कई गुणों का उपयोग किया जाना चाहिए (जिन्हें सर्वेक्षण ऑब्जेक्ट को पॉप्युलेट करना आवश्यक है क्योंकि ईएफ क्लास को सीधे मैप किए जा सकते हैं कि इसकी गुणों का प्रतिनिधित्व कैसे किया जाता है (उप-चेकबॉक्स, रेडियो समूह, इत्यादि))

क्या आप उन्हें व्यूडाटा [] का उपयोग करके पास करते हैं? या नए अतिरिक्त गुणों के साथ सर्वे क्लास (सर्वे व्यू मॉडेल) की एक प्रति बनाएं (यह सर्वेक्षण से डेटा कॉपी करने और इसे वापस करने में सक्षम होना चाहिए)?

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

उत्तर

17

मुझे दृश्य और दृश्य मॉडल के बीच हमेशा 1: 1 संबंध होने के Jimmy Bogard's approach का उपयोग करना पसंद है। दूसरे शब्दों में, मैं मॉडल के रूप में अपने डोमेन मॉडल (इस मामले में आपकी ईएफ इकाइयों) का उपयोग नहीं करता। यदि आपको लगता है कि आप दोनों के बीच बहुत सारे काम मैपिंग कर रहे हैं, तो आप अपने लिए काम करने के लिए AutoMapper जैसे कुछ का उपयोग कर सकते हैं।

+2

+1 ... बस इसे मिला, और मुझे यह पसंद है। – Martin

+1

वैल्यू इंजेक्टर बहुत बेहतर है – mare

+1

ऑटोमैपर ने मेरी जिंदगी बदल दी, यह अविश्वसनीय रूप से सहायक है, खासकर जब आप इसका इस्तेमाल करते हैं और नेविगेशन गुणों को मानचित्र बनाना सीखते हैं। – JBeagle

0

बड़ी परियोजनाओं पर, मैं आमतौर पर शैली के मामले के रूप में डेटा ऑब्जेक्ट्स से व्यावसायिक वस्तुओं को विभाजित करता हूं। प्रोग्राम और डेटाबेस दोनों को बदलने और केवल नियंत्रण (या वीएम) परत को प्रभावित करने का यह एक आसान तरीका है।

+1

एमवीसी संदर्भ में मॉडल देखें विशेष रूप से एक एमवीसी व्यू द्वारा उपभोग किए जाने वाले मॉडल वर्गों का संदर्भ लें। वे आमतौर पर केवल उन वर्गों के साथ एक वर्ग होते हैं जो आपके डोमेन मॉडल के उप-समूह का प्रतिनिधित्व करते हैं। –

+0

प्रतिक्रिया के लिए धन्यवाद। मैंने कुछ वर्षों तक एमवीसी का उपयोग नहीं किया है। मुझे लगता है कि यह उस समय एमएस से सिर्फ कुछ ही संकेत और कुछ वर्ग था। उस भाग को एमवीवीएम के साथ विलय करना होगा। – tzerb

15

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

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

+0

इतना सच साइमन .. – mare

+0

यह, महान टिप्पणी +1। Automapper के लिए – jhartzell

7

आपको हमेशा 1: 1 होने पर भी मॉडल देखना चाहिए। डेटाबेस लेयर युग्मन के बजाय व्यावहारिक कारण हैं जिन पर मैं ध्यान केंद्रित करूंगा।

डोमेन, इकाई फ्रेमवर्क, निबर्ननेट या लिनक 2 एसक्यूएल मॉडल के साथ समस्या आपके व्यू क्लास के रूप में है, तो आप प्रासंगिक सत्यापन को अच्छी तरह से संभाल नहीं सकते हैं।उदाहरण के लिए एक उपयोगकर्ता वर्ग दी:

कोई व्यक्ति आपकी साइट पर पंजीकरण करता है जब वे एक उपयोगकर्ता स्क्रीन मिलता है, तो आप:

  1. मान्य नाम
  2. मान्य ईमेल
  3. मान्य पासवर्ड मौजूद

जब कोई व्यवस्थापक उपयोगकर्ता के नाम को संपादित करता है तो उन्हें उपयोगकर्ता स्क्रीन मिलती है, फिर आप:

  1. मान्य नाम
  2. मान्य ईमेल

अब FluentValidation के माध्यम से प्रासंगिक सत्यापन का पर्दाफाश, DataAnnotations गुण, या यहाँ तक कि कस्टम अगर है() व्यापार वर्गों पर तरीकों और सिर्फ नाम और ईमेल परिवर्तन सत्यापित। आप नहीं कर सकते आपको विभिन्न संदर्भों के रूप में विभिन्न संदर्भों का प्रतिनिधित्व करने की आवश्यकता है क्योंकि उन मॉडलों पर सत्यापन स्क्रीन प्रतिनिधित्व के आधार पर बदलता है।

पहले एमवीसी 1 में आप आसानी से फ़ील्ड पोस्ट नहीं कर सकते थे जिन्हें आप मान्य नहीं करना चाहते थे। एमवीसी 2 में यह बदल गया है और अब मॉडल के हर हिस्से को मान्य, पोस्ट किया गया है या नहीं।


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

+0

आप एक वैध बिंदु बनाते हैं, लेकिन यदि आप डबल-पासवर्ड एंट्री मैचों कर रहे हैं, तो आपका व्यू मॉडल वास्तव में 1: 1 इकाई मॉडल ऑब्जेक्ट के साथ नहीं है, है ना? –

+0

@ रॉबर्ट हार्वे, हाँ, मुझे एक अलग उदाहरण का उपयोग करना चाहिए। पासवर्ड सत्यापित करना बेहतर है क्योंकि व्यवस्थापक संपादन पर आप पासवर्ड कभी नहीं बदल रहे हैं। धन्यवाद, मैं इसे बदल दूंगा। – jfar

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