2010-07-26 11 views
10

मॉडल या मॉडल में डेटा सत्यापन एनोटेशन डालने का सबसे अच्छा अभ्यास है? दूसरे पर एक दृष्टिकोण के फायदे/नुकसान क्या हैं?डेटा एनोटेशन का उपयोग कर एमवीसी सत्यापन - मॉडल कक्षाएं या मॉडल कक्षाएं देखें?

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

उत्तर

10

उपयोग करने के लाभों को वर्णन प्रथाओं का संबंध है मैं कहूंगा: उनमें से कोई भी नहीं। प्रमाणीकरण अलग होना चाहिए। फ्रेमवर्क जैसे FluentValidation आपको अपने मॉडल से अपने सत्यापन तर्क को पूरी तरह से अलग करने की अनुमति देता है। लेकिन आपके प्रश्न का उत्तर देने के लिए मैं व्यू मॉडल में सत्यापन डालूंगा क्योंकि वे कक्षाएं हैं जिन्हें आप अपने नियंत्रक कार्यों को बाध्य कर रहे हैं। आपके पास एक ही मॉडल से जुड़े कई दृश्य मॉडल भी हो सकते हैं लेकिन विभिन्न सत्यापन नियमों के साथ।

+0

अच्छा पॉइंट! आपके पास एक ही मॉडल से जुड़े कई दृश्य मॉडल भी हो सकते हैं लेकिन विभिन्न सत्यापन नियमों के साथ। – GibboK

+0

मुझे _View मॉडल के लिए कोई परिदृश्य नहीं दिखता है जो एक ही मॉडल से बंधे हैं लेकिन विभिन्न सत्यापन नियमों के साथ –

4

अपनी टिप्पणियां अपने व्यूमोडेल में रखें।

प्रत्येक डेटा मॉडल के लिए एकाधिक व्यूमोडल्स होना संभव है, उदाहरण के लिए डिस्प्लेमोडेल, एडिटमोडेल, लिस्टमोडेल .. सभी को अलग-अलग एनोटेशन की आवश्यकता हो सकती है।

यह आमतौर पर सबसे अच्छा अभ्यास माना जाता है कि अपने डेटा मॉडल को सीधे "POST"/संपादित परिदृश्यों में स्पष्ट रूप से एक दृश्य में न उजागर न करें।

मैं ब्रैड विल्सन के उत्कृष्ट सिंहावलोकन पढ़ने का सुझाव: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-1-introduction.html

ये लेख मुख्य रूप से MVC2 भीतर dislpay और संपादित टेम्पलेट्स के उपयोग को कवर किया है, लेकिन स्पष्ट रूप से जहां तक ​​सबसे अच्छा के रूप में ViewModel पैटर्न

0

अच्छी तरह से मेरी राय है: यह निर्भर करता है। मैं आमतौर पर नियंत्रकों और मॉडलों में अपने इनपुट को नियंत्रित करता हूं, इसलिए इनपुट नियंत्रक और मॉडल दोनों में मान्य होता है। यह मामला है कि मैं मॉडल को किसी अन्य प्रकार के ऐप से जोड़ना चाहता हूं। कहो, डब्ल्यूपीएफ।

हालांकि, बहुत से लोग "रक्षात्मक प्रोग्रामिंग" भी नियुक्त करते हैं। इसका मतलब है कि एक फ़ंक्शन (पैरामीटर) में प्रत्येक इनपुट की जांच की जाती है। इस मामले में एक इनपुट को दो बार चेक किया जा सकता है लेकिन आप सुनिश्चित करते हैं कि भले ही आप कुछ बदल दें, सत्यापन तर्क रखता है।

इसलिए मेरे लिए सवालों की एक जोड़ी उत्पन्न होती हैं:

1) वहाँ कोई मौका एक परिदृश्य में जहाँ मान्यता तर्क को नजरअंदाज कर रहा है हो सकता है। मॉडल को एक डब्ल्यूपीएफ ऐप में टाइप करना पसंद है।

2) क्या मैं प्रत्येक कार्य में इनपुट की जांच करके सुरक्षा सुनिश्चित करने के प्रदर्शन पर समझौता करना चाहता हूं?

मेरे लिए this क्रॉस कटिंग चिंताओं पर आलेख भी मदद करता है।

इस मामले पर मेरे विचार हैं। उम्मीद है कि यह

1

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

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