ASP.NET MVC में, व्यू मॉडल में एक आईडी होनी चाहिए?


11

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; }
}

2
वास्तव में आप ViewModel ID के साथ क्या करेंगे? ViewModel में व्यक्तिगत वस्तुओं की अपनी आईडी वैसे भी नहीं है?
रॉबर्ट हार्वे

मुझे केवल तभी निर्दिष्ट करना चाहिए जब दृश्य मॉडल किसी मॉडल से संबंधित हो। सभी दृश्य मॉडल संबंधित नहीं हैं।
लॉटनफेल

You have to abandon statelessness.- आपने अभी एमवीसी को बेकार करने का विकल्प चुना है।
जोएल एथरटन

क्या जिस आईडी का आप यहां उल्लेख कर रहे हैं वह डेटाबेस प्राथमिक कुंजी है, या कुछ और जिसे आप ViewModel में जोड़ रहे हैं?
वरमिस

@Vermis, मुझे लगता है कि एक डेटाबेस प्राथमिक कुंजी एक साधारण आईडी होगी। एक अधिक गहन आईडी डेटा का कोई भी गैर-परिवर्तनीय टुकड़ा होगा जो आपको अपने संपादित किए गए ऑब्जेक्ट को वापस नहीं अभी तक-संपादित किए गए संस्करण से संबंधित करने की अनुमति देता है ताकि संपादित परिवर्तनों को बनाए रखा जा सके।
Lawtonfogle

जवाबों:


1

ViewModel ऑब्जेक्ट वह नहीं है जो आम तौर पर डेटाबेस तालिका में संग्रहीत होता है। यह ViewModel ऑब्जेक्ट में अलग-अलग आइटम हैं जो संग्रहीत होते हैं। उन वस्तुओं में से प्रत्येक में पहले से ही एक आईडी है।

उदाहरण के लिए:

public class InvoiceViewModel
{
    public Customer Customer { get; set; }
    public Address BillingAddress { get; set; }
    public Address ShippingAddress { get; set; }
    public List<InvoiceLineItem> Items { get; set; }
}

चूंकि डेटाबेस में कोई एकल तालिका नहीं है जो किसी इनवॉयस व्यू मोड से मेल खाती है, इसलिए इनवॉयस व्यू मोड ऑब्जेक्ट के लिए कोई आईडी नहीं है।

बेशक, आप इस विशेष ViewModel के लिए हमेशा इनवॉइस आईडी का उपयोग कर सकते हैं। इनवॉयसआईडी आसान है, क्योंकि यही वह वस्तु है जो अंततः प्रस्तुत करती है। लेकिन मैं एक ViewModel ऑब्जेक्ट देख सकता था जो डेटाबेस में किसी विशेष आईडी के अनुरूप नहीं है।


1
सोचें कि दृश्य मॉडल में वास्तविक मॉडल का उपयोग करने के बजाय, InvoiceViewModel में केवल अन्य दृश्य मॉडल (जो मॉडल से संबंधित हैं) शामिल हैं।
Lawtonfogle

-1

डिफ़ॉल्ट रूप से आपके पास देखने में एक आईडी होनी चाहिए, भले ही आप इसका उपयोग नहीं कर रहे हों। के रूप में नामित डेटाबेस में एक स्तंभ बनाएँ idऔर उस पर auto incrementसुविधा को टिक करें ताकि आपको हल किया जाएगा।


1
यह सीधे दूसरे जवाब का खंडन करता है, हालांकि, इस बात को संबोधित किए बिना कि आपके पास वैसे भी आईडी क्यों होनी चाहिए ।
मार्टिजन पीटरर्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.