ASP.NET MVC एप्लिकेशन को विकसित करते समय जो मॉडल को अपडेट करने की अनुमति देता है, आपको अपडेट किए गए मॉडल को लेने का तरीका जानने के लिए किसी तरीके की आवश्यकता होती है और इसे अब अपडेट किए गए मॉडल से वापस मिलाएं। ऐसा करने के कुछ अलग तरीके प्रतीत होते हैं और मैं सोच रहा हूं कि क्या इनमें से कोई भी उचित MVC नहीं है (बहुत कुछ आपके नियंत्रक स्टोर डेटा की तरह है जो मॉडल में होना चाहिए उचित MVC नहीं है)?
सभी दृश्य मॉडल में एक आईडी है: पेशेवरों
- हमेशा सुनिश्चित करें कि आप अपने मॉडल से मेल खा सकते हैं।
विपक्ष
- आपको वास्तविक सावधान रहना होगा कि कोई भी आईडी नहीं बदली गई थी और आपके पास उन उपयोगकर्ताओं को पंक्तियों को अपडेट करने की सुविधा हो सकती है जिनके पास पहुंच नहीं होनी चाहिए।
केवल नंगे न्यूनतम दृश्य मॉडल में एक आईडी है: पेशेवरों
- उपयोगकर्ताओं को उन डेटा को अपडेट करने से बचने के लिए बहुत कम जाँच की आवश्यकता होती है जिन्हें वे एक्सेस नहीं करते हैं।
विपक्ष
- यह देखने के लिए कि मॉडल किस मॉडल से मेल खाते हैं, इसे ट्रैक करना अधिक कठिन है।
- आपको अभी भी आईडी के साथ कुछ दृश्य मॉडल की जांच करनी है ताकि यह सुनिश्चित हो सके कि उपयोगकर्ता उन डेटा को अपडेट नहीं कर रहा है जिनकी उन्हें एक्सेस नहीं करनी चाहिए।
कोई दृश्य मॉडल आईडी नहीं है:
पेशेवरों
- अपडेट के लिए आईडी की जांच करने की आवश्यकता नहीं है।
विपक्ष
- आपको स्टेटलेसनेस को त्यागना होगा।
इसलिए मेरे दो सवाल हैं।
पहला, क्या सही / गलत विकल्प है? (यदि नहीं, तो इसका मतलब है कि चुनाव एक राय का विषय है और मेरे दूसरे प्रश्न पर आधारित राय को नजरअंदाज किया जाना चाहिए।)
दूसरा, अगर कोई सही / गलत विकल्प है, तो वह कौन सा है?
एक टिप्पणी पर स्पष्ट करने के लिए, मैं तब बात कर रहा हूं जब आपके पास एक दृश्य मॉडल है जो आपके डेटाबेस ऑब्जेक्ट का एक नकल है।
इस बारे में विचार करो:
public class InvoiceViewModel //Does not have ID, does not relate to model.
{
public CustomerViewModel CustomerVM { get; set; } //Maybe has ID? Does relate to model.
public AddressViewModel BillingAddressVM { get; set; } //Ditto
public AddressViewModel ShippingAddressVM { get; set; } //Ditto
public List<InvoiceLineItemViewModel> ItemVMs { get; set; } //Each one has an ID?
}
यह नहीं:
public class InvoiceViewModel
{
public Customer Customer { get; set; }
public Address BillingAddress { get; set; }
public Address ShippingAddress { get; set; }
public List<InvoiceLineItem> Items { get; set; }
}
You have to abandon statelessness.
- आपने अभी एमवीसी को बेकार करने का विकल्प चुना है।