Praktik Terbaik untuk Arsitektur MVC [ditutup]

28

Pertanyaan saya lebih lanjut tentang bagaimana merancang aplikasi MVC. Sebagai contoh, kami dianjurkan untuk menggunakan DI dengan pola Repositori untuk memisahkan akses data dari pengontrol, namun sangat sedikit yang dikatakan tentang BAGAIMANA untuk melakukannya khusus untuk MVC. Di mana kita akan menempatkan kelas Repositori, misalnya? Mereka tampaknya tidak terkait model secara khusus, karena model juga harus relatif dipisahkan dari teknologi akses data yang sebenarnya.

Pertanyaan kedua melibatkan bagaimana menyusun lapisan atau tingkatan. Sebagian besar contoh aplikasi (Nerd dinner, Music Store, dll.) Semua tampaknya menggunakan tier tunggal, pendekatan 2 lapis (tidak termasuk tes) yang biasanya memiliki pengendali yang secara langsung memanggil kode L2S atau EF.

Jika saya ingin membuat aplikasi multi-tier / layer apa sajakah praktik terbaik yang ada dalam hal MVC?

Erik Funkenbusch
sumber

Jawaban:

5

DI dicapai dalam ASP MVC menggunakan Pabrik Pengendali. Pabrik ini digunakan untuk menyelesaikan dependensi pengontrol Anda.

MvcContrib memiliki beberapa implementasi Controller Facotry yang dapat Anda gunakan di luar kotak. Saya menggunakan implementasi Castle Windsor mereka dan itu bekerja dengan baik. Sarankan juga memeriksa Kelas TestHelper mereka. Ini memiliki beberapa fungsi yang sangat keren untuk mengejek Controller HTTPContext, Sessions, dll. MVCContrib

Secara pribadi saya ingin memberikan contoh Repositori Model saya untuk dikerjakan. Model mengekspos api ke repositori (CRUD). Ketergantungan pengontrol pada model tertentu disuntikkan pada penciptaan (konstruktor) ini disuntikkan melalui Pabrik Pengendali. Ini adalah titik masuk saya ke grafik objek yang dikelola wadah IoC saya.


sumber
2

Di mana kita akan menempatkan kelas Repositori, misalnya?

Mereka termasuk dalam model; mereka adalah model dalam aplikasi.

Bagaimana cara saya menyusun lapisan? Jika saya ingin membuat aplikasi multi-tier / layer apa sajakah praktik terbaik yang ada dalam hal MVC?

Tiers Merupakan pemisahan kode secara fisik. Lapisan mewakili pemisahan logis. Lapisan (sebagaimana adanya) berfungsi dengan baik untuk MVC. Bergantung pada jumlah logika bisnis, itu dapat ditempatkan di Pengontrol Anda, atau dapat ditempatkan di rakitan terpisah dan dapat digunakan oleh pengontrol selama siklus permintaan.

George Stocker
sumber
Jadi Anda menyarankan agar mereka masuk ke Proyek UI aplikasi multi-tier?
Erik Funkenbusch
@Mystere Man Jika bukan raksasa, maka mereka harus pergi dalam proyek yang menampung aplikasi MVC Anda. Secara khusus, logika bisnis akan masuk ke controller dan setiap tindakan akan memiliki logikanya sendiri. MVC bukan hanya pola UI saja; itu sebabnya saya tidak setuju dengan pernyataan Anda bahwa ini adalah 'proyek UI'. Bukan itu. Ini adalah proyek MVC yang sebagai Viewbagian (ada UI Anda).
George Stocker
Ok, mungkin saya mengucapkannya dengan buruk. Namun, apakah Anda tidak setuju bahwa lapisan tampilan tidak boleh memanipulasi database? Dan jika Anda menempatkan kelas Repositori dalam model, maka tampilan dapat melakukannya.
Erik Funkenbusch
dalam aplikasi MVC Kecil, UI "Layer" hanyalah folder yang menampung pandangan. Dalam aplikasi yang lebih besar, itu bisa menjadi proyeknya sendiri. Jika itu adalah proyeknya sendiri, maka ia akan berkoordinasi dengan controller, dan controller tersebut dapat terhubung ke BusinessLayer sesuai kebutuhan. Tidak seorang pun di luar pengontrol bahkan perlu mengetahui lapisan bisnis yang ada. Saya pikir Anda secara otomatis berpikir ini adalah proyek yang terpisah, tetapi tidak harus begitu.
George Stocker