मैं हमेशा दृश्य मॉडल के साथ दृश्य मॉडल को डिज़ाइन करता हूं, कभी भी डोमेन मॉडल (= संस्थाओं) के दृष्टिकोण से नहीं। एक व्यूमोडेल कैसा दिखता है जो आप प्रदर्शित करना चाहते हैं और क्या आप एक दृश्य में संशोधित करना चाहते हैं।
नतीजतन आपके पासनहीं हैऔर CustomerViewModel
क्योंकि आपके पास अलग-अलग विचार हैं जो ऑर्डर या ग्राहक या इनमें से कुछ हिस्सों को प्रदर्शित या संपादित करेंगे। इसलिए, आपके पास उन व्यूमोडल्स को एक विशिष्ट उद्देश्य और देखने के लिए है और इसलिए विभिन्न भिन्नताओं में कई बार।
मान लीजिए, आपके पास OrderEditView
है और यह दृश्य ऑर्डर जानकारी संपादित करने और उस ऑर्डर के ग्राहक को प्रदर्शित करने की अनुमति देगा। आप एक OrderEditViewModel
इस तरह होगा:
public class OrderEditViewModel
{
public int OrderId { get; set; }
public DateTime? ShippingDate { get; set; }
[StringLength(500)]
public string Remark { get; set; }
//...
public OrderEditCustomerViewModel Customer { get; set; }
}
public class OrderEditCustomerViewModel
{
[ReadOnly(true)]
public string Name { get; set; }
[ReadOnly(true)]
public string City { get; set; }
// ...
}
यह OrderEditCustomerViewModel
OrderEditViewModel
के लिए एक संदर्भ की जरूरत नहीं है।
तुम इतनी तरह इस ViewModel पॉप्युलेट कर सकते हैं: यदि आप एक CustomerEditView
जो संपादन ग्राहक जानकारी की अनुमति देता है और किसी सूची में ग्राहक के आदेश प्रदर्शित होती है
var orderEditViewModel = context.Orders
.Where(o => o.OrderId == 5)
.Select(o => new OrderEditViewModel
{
OrderId = o.OrderId,
ShippingDate = o.ShippingDate,
Remark = o.Remark,
Customer = new OrderEditCustomerViewModel
{
Name = o.Customer.Name,
City = o.Customer.City
}
})
.SingleOrDefault();
दूसरी ओर,, ViewModel हो सकता है:
public class CustomerEditViewModel
{
public int CustomerId { get; set; }
[Required, StringLength(50)]
public string Name { get; set; }
[Required, StringLength(50)]
public string City { get; set; }
//...
public IEnumerable<CustomerEditOrderViewModel> Orders { get; set; }
}
public class CustomerEditOrderViewModel
{
[ReadOnly(true)]
public DateTime? ShippingDate { get; set; }
[ReadOnly(true)]
public string Remark { get; set; }
// ...
}
यहाँ CustomerEditOrderViewModel
CustomerEditViewModel
के लिए एक संदर्भ की जरूरत नहीं है और आप उदाहरण के लिए इस तरह से डेटाबेस से ViewModel बना सकते हैं:
var customerEditViewModel = context.Customers
.Where(c => c.CustomerId == 8)
.Select(c => new CustomerEditViewModel
{
CustomerId = c.CustomerId,
Name = c.Name,
City = c.City,
Orders = c.Orders.Select(o => new CustomerEditOrderViewModel
{
ShippingDate = o.ShippingDate,
Remark = o.Remark
})
})
.SingleOrDefault();
Customer(*)ViewModel
और Order(*)ViewModel
रों अलग हैं - आवश्यक संदर्भ, गुणों और डेटा एनोटेशन के बारे में, दृश्य जहां वे इस्तेमाल कर रहे हैं पर निर्भर करता है।
इन विचारों के साथ OrderViewModel
और CustomerViewModel
के बीच पारस्परिक सही संदर्भों के प्रश्न के साथ प्रश्न गायब हो जाते हैं क्योंकि आपको आमतौर पर अपने विचारों के लिए ऐसे द्विपक्षीय संदर्भ की आवश्यकता नहीं होती है।
देखें कि यह मदद करता है: http://blogs.teamb.com/craigstuntz/2009/12/31/38500/ –
क्षमा करें प्रासंगिक नहीं .. – user384080