Saya ingin memastikan saya mengikuti standar industri dan praktik terbaik dengan celah nyata pertama saya di MVC. Dalam hal ini, itu ASP.NET MVC, menggunakan C #.
Saya akan menggunakan Entity Framework 4.1 untuk model saya, dengan objek kode-pertama (database sudah ada), jadi akan ada objek DBContext untuk mengambil data dari database.
Dalam demo yang saya lalui di situs web asp.net, pengontrol memiliki kode akses data di dalamnya. Ini tampaknya tidak benar bagi saya, terutama ketika mengikuti latihan KERING (jangan ulangi sendiri).
Sebagai contoh, katakanlah saya sedang menulis aplikasi web untuk digunakan di perpustakaan umum, dan saya memiliki pengontrol untuk membuat, memperbarui, dan menghapus buku dalam katalog.
Beberapa tindakan mungkin memerlukan ISBN dan ingin mengembalikan objek "Buku" (perhatikan ini mungkin bukan kode yang 100% valid):
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);
}
}
Sebaliknya, haruskah saya benar-benar memiliki metode dalam objek konteks db saya untuk mengembalikan satu Buku? Itu sepertinya pemisahan yang lebih baik bagi saya, dan membantu mempromosikan KERING, karena saya mungkin perlu mendapatkan objek Buku dengan ISBN di tempat lain di aplikasi web saya.
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));
}
}
Apakah ini seperangkat aturan yang valid untuk diikuti dalam pengkodean aplikasi saya?
Atau, saya kira pertanyaan yang lebih subyektif adalah: "Apakah ini cara yang tepat untuk melakukannya?"
sumber
Ini adalah cara saya telah melakukannya, meskipun saya menyuntikkan penyedia data sebagai antarmuka layanan data generik sehingga saya bisa menukar implementasi.
Sejauh yang saya tahu, controller dimaksudkan untuk menjadi tempat Anda mendapatkan data, melakukan tindakan apa pun, dan meneruskan data ke tampilan.
sumber