अपने अनुप्रयोगों में मैंने हमेशा चीजों को अलग किया है, डेटाबेस (एंटिटी फ्रेमवर्क) और एमवीसी के लिए अलग-अलग मॉडल के साथ। मैंने इन्हें अलग-अलग परियोजनाओं में भी अलग कर दिया है:
- Example.Entities - EF और उन्हें तक पहुँचने के लिए DB संदर्भ के लिए मेरी इकाइयाँ हैं।
- उदाहरण.मॉडल - MVC मॉडल शामिल हैं।
- उदाहरण । वेब - वेब अनुप्रयोग। उदाहरण.डोमेन और उदाहरण.मॉडल दोनों पर निर्भर करता है।
डोमेन संस्थाओं की तरह अन्य वस्तुओं के संदर्भों को रखने के बजाय, एमवीसी मॉडल आईडी को पूर्णांक के रूप में रखते हैं।
जब किसी पृष्ठ के लिए GET अनुरोध आता है, MVC नियंत्रक डेटाबेस क्वेरी करता है, जो एक इकाई देता है। मैंने "कन्वर्टर" विधियाँ लिखी हैं जो एक डोमेन एंटिटी लेते हैं और इसे MVC मॉडल में बदलते हैं। ऐसे अन्य तरीके हैं जो विपरीत (एमवीसी मॉडल से एक डोमेन इकाई के लिए) करते हैं। मॉडल तब दृश्य में पास हो जाता है, और इस तरह क्लाइंट को।
जब कोई POST अनुरोध आता है, MVC नियंत्रक को MVC मॉडल मिलता है। एक कन्वर्टर विधि इसे एक डोमेन इकाई में परिवर्तित करती है। यह विधि किसी भी मान्यताओं को निष्पादित करती है, जिन्हें विशेषताओं के रूप में व्यक्त नहीं किया जा सकता है, और यह सुनिश्चित करता है कि यदि डोमेन इकाई पहले से मौजूद है कि हम इसे नया पाने के बजाय इसे अपडेट कर रहे हैं। विधियाँ आमतौर पर कुछ इस तरह दिखती हैं:
public class PersonConverter
{
public MyDatabaseContext _db;
public PersonEntity Convert(PersonModel source)
{
PersonEntity destination = _db.People.Find(source.ID);
if(destination == null)
destination = new PersonEntity();
destination.Name = source.Name;
destination.Organisation = _db.Organisations.Find(source.OrganisationID);
//etc
return destination;
}
public PersonModel Convert(PersonEntity source)
{
PersonModel destination = new PersonModel()
{
Name = source.Name,
OrganisationID = source.Organisation.ID,
//etc
};
return destination;
}
}
इन विधियों का उपयोग करके मैं दोहराव को बाहर निकालता हूं जो अन्यथा प्रत्येक नियंत्रक में होता है। जेनेरिक के उपयोग से चीजों को और अधिक खराब किया जा सकता है।
इस तरह से चीजें करने से कई लाभ मिलते हैं:
- आप किसी विशिष्ट दृश्य या क्रिया के लिए एक मॉडल को अनुकूलित कर सकते हैं। मान लें कि आपके पास किसी ऐसे व्यक्ति के लिए साइनअप फ़ॉर्म है जिसे सबमिट करते समय, कई अलग-अलग संस्थाएँ (व्यक्ति, संगठन, पता) बनाती हैं। एमवीसी मॉडल को अलग किए बिना यह बहुत मुश्किल होगा।
- अगर मुझे देखने के लिए अधिक जानकारी पास करने की आवश्यकता है, अन्यथा यह केवल इकाई में उपलब्ध होगा, या दो संस्थाओं को एक मॉडल में संयोजित करेगा, तो मेरे कीमती डेटाबेस मॉडल कभी भी स्पर्श नहीं किए जाएंगे।
- यदि आप कभी JVC या XML के रूप में एक MVC मॉडल को क्रमबद्ध करते हैं, तो आपको केवल तत्काल मॉडल को क्रमबद्ध किया जा सकता है, न कि इस से जुड़ी प्रत्येक अन्य इकाई।