मैं यह सुनिश्चित करना चाहता हूं कि मैं एमवीसी में अपनी पहली वास्तविक दरार के साथ उद्योग के मानकों और सर्वोत्तम प्रथाओं का पालन कर रहा हूं। इस स्थिति में, यह C # का उपयोग करते हुए ASP.NET MVC है।
मैं अपने मॉडल के लिए कोड-प्रथम ऑब्जेक्ट्स (डेटाबेस पहले से मौजूद है) के साथ Entity फ्रेमवर्क 4.1 का उपयोग कर रहा हूं, इसलिए डेटाबेस से डेटा प्राप्त करने के लिए DBContext ऑब्जेक्ट होगा।
डेमो में मैं asp.net वेबसाइट पर चला गया हूं, नियंत्रकों में डेटा एक्सेस कोड है। यह मुझे सही नहीं लगता, खासकर जब DRY (खुद को दोहराना नहीं) प्रथाओं का पालन करते हैं।
उदाहरण के लिए, मान लें कि मैं एक सार्वजनिक पुस्तकालय में उपयोग किए जाने वाला एक वेब एप्लिकेशन लिख रहा हूं, और मेरे पास कैटलॉग में पुस्तकें बनाने, अपडेट करने और हटाने के लिए एक नियंत्रक है।
कई कार्यों में एक आईएसबीएन हो सकता है और उसे "बुक" ऑब्जेक्ट वापस करना होगा (ध्यान दें कि यह संभवतः 100% वैध कोड नहीं है):
public class BookController : Controller
{
LibraryDBContext _db = new LibraryDBContext();
public ActionResult Details(String ISBNtoGet)
{
Book currentBook = _db.Books.Single(b => b.ISBN == ISBNtoGet);
return View(currentBook);
}
public ActionResult Edit(String ISBNtoGet)
{
Book currentBook = _db.Books.Single(b => b.ISBN == ISBNtoGet);
return View(currentBook);
}
}
इसके बजाय, क्या मुझे वास्तव में एक पुस्तक वापस करने के लिए मेरे db संदर्भ ऑब्जेक्ट में एक विधि होनी चाहिए ? ऐसा लगता है कि यह मेरे लिए एक बेहतर अलगाव है, और DRY को बढ़ावा देने में मदद करता है, क्योंकि मुझे अपने वेब एप्लिकेशन में कहीं और ISBN द्वारा बुक ऑब्जेक्ट प्राप्त करने की आवश्यकता हो सकती है।
public partial class LibraryDBContext: DBContext
{
public Book GetBookByISBN(String ISBNtoGet)
{
return Books.Single(b => b.ISBN == ISBNtoGet);
}
}
public class BookController : Controller
{
LibraryDBContext _db = new LibraryDBContext();
public ActionResult Details(String ISBNtoGet)
{
return View(_db.GetBookByISBN(ISBNtoGet));
}
public ActionResult Edit(ByVal ISBNtoGet as String)
{
return View(_db.GetBookByISBN(ISBNtoGet));
}
}
क्या यह मेरे आवेदन के कोडिंग में पालन करने के लिए नियमों का एक वैध सेट है?
या, मुझे लगता है कि एक अधिक व्यक्तिपरक प्रश्न होगा: "क्या यह ऐसा करने का सही तरीका है?"