Pola Desain – Contoh Pola MVC untuk Pemula
Diterbitkan: 2016-04-15Ini menjelaskan tentang apa itu Pola MVC dan apa itu ASP.NET MVC Framework cara kerjanya. Juga menjelaskan siklus hidup halaman ASP.NET MVC dan fitur ASP.NET MVC versi bijaksana.
Contoh langkah-langkah yang diberikan bijaksana untuk membantu pemula untuk memahami dengan mudah dan menjadi mahir dalam ASP.NET MVC.
Seperti yang kita semua tahu banyak pola desain dan menggunakannya dalam mengimplementasikan komponen dan layanan bisnis di aplikasi kita, tetapi kita masih akan menghadapi masalah/tantangan dengan aplikasi kita. Juga dari hari ke hari kebutuhan dan prioritas bisnis akan berubah. Jika kami mengamati dengan cermat sejumlah masalah, cacat, dan tantangan yang kami hadapi ada di UI dan lapisan presentasi. Meskipun beberapa cacat terkait dengan logika bisnis dan aturan bisnis, kami mungkin perlu memperbaikinya di UI dan lapisan presentasi karena kami mungkin mengintegrasikan logika bisnis secara erat di UI dan tingkat presentasi. Alasan di balik ini adalah kami belum fokus pada penerapan pola desain yang tepat dalam aplikasi kami. Mari kita melalui langkah demi langkah dan memahami bagaimana menerapkan dan menggunakan pola presentasi dalam aplikasi kita.
Pernyataan masalah:
- Sudah menggunakan pola yang berbeda dalam aplikasi tetapi tetap mempertahankan aplikasi itu sulit.
- Menggunakan VS Test, NUnit, MBUnit dll untuk menguji lapisan logika bisnis, tetapi masih ada beberapa cacat dalam aplikasi sebagai logika bisnis yang terlibat dalam lapisan presentasi.
- Lapisan Presentasi yang Digunakan, Lapisan Logika Bisnis, Lapisan Akses Data dalam aplikasi tetapi terkadang masih perlu menulis kode yang berlebihan di lapisan presentasi untuk menggunakan atau memanggil modul lain atau kasus penggunaan lainnya.
- Cacat integrasi semakin disuntikkan ketika kami membuat beberapa perubahan dalam modul terintegrasi.
- Perbaikan dan penyempurnaan cacat membutuhkan lebih banyak waktu untuk menganalisis logika tingkat presentasi dan dependensi integrasinya serta menyebabkan pembukaan cacat baru.
- ASP.NET MVC tidak dapat dipilih karena UI rumit untuk dibangun.
Akar Penyebab Masalah:
Di lapisan Presentasi,
- Halaman atau formulir berisi kontrol yang menampilkan data domain aplikasi. Seorang pengguna dapat memodifikasi data dan mengirimkan perubahan. Halaman mengambil data domain, menangani peristiwa pengguna, mengubah kontrol lain pada halaman sebagai respons terhadap peristiwa, dan mengirimkan data domain yang diubah. Menyertakan kode yang menjalankan fungsi ini di halaman Web Selain itu, sulit untuk berbagi kode antar halaman Web yang memerlukan perilaku yang sama. kelas yang kompleks, sulit untuk dipelihara, dan sulit untuk diuji.
- Lapisan UI, Logika UI, Logika Presentasi, Logika Bisnis digabungkan dengan erat.
- Lapisan presentasi menangani pengintegrasian modul atau kasus penggunaan.
Larutan:
- Pilih Pola Lapisan Presentasi terbaik untuk memisahkan Lapisan UI, Logika UI dan Logika Presentasi dan Logika Bisnis sebagai lapisan terpisah untuk membuat kode lebih mudah dipahami dan dipelihara.
- Aktifkan kopling longgar saat mengembangkan modul atau kasus penggunaan apa pun.
- Maksimalkan kode yang dapat diuji dengan otomatisasi. (Tampilan sulit untuk diuji.)
- Bagikan kode antar halaman yang memerlukan perilaku yang sama.
- Pisahkan tanggung jawab untuk tampilan visual dan perilaku penanganan peristiwa ke dalam kelas yang berbeda yang diberi nama, masing-masing, tampilan dan penyaji atau pengontrol atau ViewModel.
Manfaat menggunakan Pola Presentasi:
- Modularitas
- Pendekatan berbasis pengujian – maksimalkan kode yang dapat diuji dengan otomatisasi
- Pemisahan kekhawatiran
- Berbagi kode antara halaman dan formulir
- Mudah dirawat
Apa saja pola lapisan presentasi yang tersedia?
MVC (Pengontrol Tampilan Model)
MVP (Model View Presenter) atau (Model Passive View, Supervisor Controller)
MVVM (Model Tampilan Tampilan Model)
MVC vs MVP vs MVVM:
Model dan View mewakili sama di semua 3 pola di atas?
Ya
Tujuan Controller, Presenter, dan ViewModel sama di semua 3 pola di atas?
Ya
Komunikasi dan alur Model, View dengan Controller, Presenter, dan ViewModel sama?
Tidak , itulah alasan 3 pola ini ada.
Apakah pola-pola ini pengganti PL (Lapisan Presentasi), BLL (Lapisan Logika Bisnis) dan DAL (Lapisan Akses Data)
Tidak , pola ini untuk memisahkan UI dan Logika UI dari Logika Presentasi dan memungkinkan sambungan longgar.
Pilih Pola Lapisan Presentasi terbaik:
MVP
- Mengikat melalui konteks data tidak mungkin
- Desain UI yang Kompleks
- Terbaik untuk Formulir Windows, Formulir Web ASP.NET & Aplikasi Sharepoint
MVC
- Terbaik untuk ASP.NET dengan UI Sederhana
- Model Terputus (Melihat pemisahan dari semua lapisan lainnya)
Catatan: Di sini saya tidak fokus pada MVC VM (MVC ViewModel dari MVC3) dan ASP.NET MVVM dengan Dependency Injection.
MVVM
- Mengikat melalui konteks data dimungkinkan
- Model Terhubung
- Terbaik untuk aplikasi WPF dan Silverlight
Formulir Web ASP.NET vs ASP.NET MVC:
Formulir Web ASP.NET
- RAD
- Pengembangan lebih mudah
- Ekosistem kontrol yang kaya
- Akrab sebagai pendekatan pengembangan untuk pengembangan Windows Forms
- Tidak ada
ViewState
& Tidak ada dukungan postback
ASP.NET MVC
- Pemisahan Kepedulian yang Bersih (SoC)
- Kontrol markup penuh
- Aktifkan TDD (Pengembangan Berbasis Uji)
- Aktifkan dan buat REST dengan mudah
- Integrasi sisi klien yang lebih mudah (Javascript)
- Mesin Multi Tampilan (ini sangat keren!)
- Tidak ada ViewState & Tidak ada dukungan postback
- Dapat diperluas dan WEB 2.0 Diaktifkan
Model, Tampilan & Pengontrol
- Model : Objek model adalah bagian dari aplikasi yang mengimplementasikan logika untuk domain data aplikasi. Seringkali, objek model mengambil dan menyimpan status model dalam database. Misalnya, objek Produk mungkin mengambil informasi dari database, mengoperasikannya, dan kemudian menulis informasi yang diperbarui kembali ke tabel Produk di SQL Server.
- Tampilan : Tampilan adalah komponen yang menampilkan antarmuka pengguna (UI) aplikasi. Biasanya, UI ini dibuat dari data model. Contohnya adalah tampilan edit tabel Produk yang menampilkan kotak teks, daftar turun bawah, dan kotak centang berdasarkan status objek Produk saat ini.
- Controller : Controller adalah komponen yang menangani interaksi pengguna, bekerja dengan model, dan akhirnya memilih tampilan untuk dirender yang menampilkan UI. Dalam aplikasi MVC, tampilan hanya menampilkan informasi; pengontrol menangani dan merespons input dan interaksi pengguna. Misalnya, pengontrol menangani nilai string kueri, dan meneruskan nilai ini ke model, yang pada gilirannya akan mengkueri database dengan menggunakan nilai tersebut.
ASP.NET MVC Siklus Hidup Halaman Tingkat Tinggi?
ASP.NET MVC Siklus Hidup Halaman Tingkat Rendah?
Fitur Baru MVC2.0
1. Pembantu dengan Template:
Templated Helper membantu kita untuk secara otomatis mengaitkan elemen HTML untuk diedit dan ditampilkan dengan tipe data.
Misalnya ketika data tipe System.DateTime
ditampilkan dalam tampilan, elemen UI datepicker dapat dirender secara otomatis.
Ini mirip dengan cara kerja templat bidang di Data Dinamis ASP.NET.
2. Area:
Menggunakan area Kami dapat mengatur proyek besar menjadi beberapa bagian yang lebih kecil untuk mengelola kompleksitas aplikasi Web yang besar.
Setiap bagian ("area") biasanya mewakili bagian terpisah dari situs Web besar dan digunakan untuk mengelompokkan kumpulan pengontrol dan tampilan terkait.
Misalnya
[xhtml]
daerah
admin
Pengendali
model
Tampilan
Klaim Iniala
Pengendali
model
Tampilan
[/xhtml]

3. Dukungan untuk Pengontrol Asinkron:
ASP.NET MVC2 memungkinkan pengontrol memproses permintaan secara asinkron.
Ini dapat menghasilkan peningkatan kinerja dengan mengizinkan server yang sering memanggil operasi pemblokiran (seperti permintaan jaringan) untuk memanggil rekan non-pemblokiran sebagai gantinya.
4. Dukungan untuk DefaultValueAttribute
dalam Parameter Metode Tindakan:
Kelas System.ComponentModel.DefaultValueAttribute
memungkinkan nilai default diberikan untuk parameter argumen ke metode tindakan.
Misalnya, asumsikan bahwa rute default berikut ditentukan:
[kode]
{controller}/{action}/{id}
[/kode]
Juga asumsikan bahwa pengontrol dan metode tindakan berikut didefinisikan:
[kode]
ArticleController kelas publik
{
Tampilan ActionResult publik(int id, [DefaultValue(1)] halaman int)
{
}
}
[/kode]
Salah satu dari URL permintaan berikut akan memanggil metode tindakan Lihat yang ditentukan dalam contoh sebelumnya.
- /Artikel/Tampilan/123
- /Article/View/123?page=1 (Efektif sama dengan permintaan sebelumnya)
- /Artikel/Tampilan/123?page=2
5. Dukungan untuk mengikat Data Biner dengan Model Binder:
Ada dua kelebihan baru dari helper Html.Hidden
yang mengkodekan nilai biner sebagai string dengan enkode base-64:
[kode]
string statis publik Tersembunyi (HtmlHelper htmlHelper ini, nama string, nilai Biner);
string statis publik Tersembunyi (HtmlHelper htmlHelper ini, nama string, nilai byte[]);
[/kode]
6. Dukungan untuk Atribut DataAnnotations
:
Menggunakan atribut validasi RangeAttribute
, RequiredAttribute
, StringLengthAttribute
, dan RegexAttribute
(didefinisikan dalam namespace System.ComponentModel.DataAnnotations
) saat kita mengikat ke model untuk memberikan validasi input.
[kode]
menggunakan System.ComponentModel.DataAnnotations;
namespace MvcTmpHlprs
{
[MetadataType(typeof(ProductMD))]]
Produk kelas parsial publik
{
ProductMD kelas publik
{
objek publik SellStartDate { dapatkan; mengatur; }
[UIHint("rbDate")]
objek publik SellEndDate { dapatkan; mengatur; }
[Tipe Data(Tipe Data.Tanggal)]
objek publik DiscontinuedDate { dapatkan; mengatur; }
[Kolom Perancah (salah)]
objek publik Tanggal Modifikasi { dapatkan; mengatur; }
[Kolom Perancah (salah)]
rowguid objek publik { dapatkan; mengatur; }
[Kolom Perancah (salah)]
objek publik ThumbnailPhotoFileName { dapatkan; mengatur; }
}
}
}
[/kode]
7. Penyedia Model-Validator:
Kelas penyedia validasi model mewakili abstraksi yang menyediakan logika validasi untuk model.
ASP.NET MVC menyertakan penyedia default berdasarkan atribut validasi yang disertakan dalam namespace System.ComponentModel.DataAnnotations
.
8. Validasi Sisi Klien:
Kelas penyedia model-validator mengekspos metadata validasi ke browser dalam bentuk data serial JSON yang dapat digunakan oleh pustaka validasi sisi klien.
ASP.NET MVC 2 menyertakan pustaka validasi klien dan adaptor yang mendukung atribut validasi namespace DataAnnotations
yang disebutkan sebelumnya.
9. Filter Tindakan RequireHttpsAttribute
Baru:
ASP.NET MVC 2 menyertakan kelas RequireHttpsAttribute
baru yang dapat diterapkan ke metode tindakan dan pengontrol.
Secara default, filter mengalihkan permintaan non-SSL (HTTP) ke yang setara dengan SSL-enabled (HTTPS).
10. Mengganti Kata Kerja Metode HTTP:
Saat kami membangun Situs Web dengan menggunakan gaya arsitektur REST, kata kerja HTTP digunakan untuk menentukan tindakan mana yang harus dilakukan untuk sumber daya.
REST mengharuskan aplikasi mendukung rangkaian lengkap kata kerja HTTP umum, termasuk GET
, PUT
, POST
, dan DELETE
.
ASP.NET MVC 2 menyertakan atribut baru yang dapat kita terapkan ke metode tindakan dan fitur sintaks yang ringkas.
Atribut ini memungkinkan ASP.NET MVC untuk memilih metode tindakan berdasarkan kata kerja HTTP.
Misalnya, permintaan POST
akan memanggil metode tindakan pertama dan permintaan PUT
akan memanggil metode tindakan kedua.
[kode]
[HttpPost]
Edit ActionResult publik (int id)
[HttpPut]
Edit ActionResult publik (int id, Tag tag)
[/kode]
Di versi ASP.NET MVC yang lebih lama, metode tindakan ini memerlukan sintaks yang lebih verbose, seperti yang ditunjukkan pada Contoh berikut:
[kode]
[TerimaVerb(HttpVerbs.Post)]
Edit ActionResult publik (int id)
[TerimaVerb(HttpVerbs.Put)]
Edit ActionResult publik (int id, Tag tag)
[/kode]
Karena browser hanya mendukung verba HTTP GET
dan POST
, tidak mungkin memposting ke tindakan yang memerlukan verba berbeda. Jadi tidak mungkin untuk mendukung semua permintaan RESTful
secara native.
Namun, untuk mendukung permintaan RESTful
selama operasi POST
, ASP.NET MVC 2 memperkenalkan metode helper HTML HttpMethodOverride
baru.
Metode ini membuat elemen input tersembunyi yang menyebabkan formulir secara efektif meniru metode HTTP apa pun.
Misalnya, dengan menggunakan metode helper HTML HttpMethodOverride
, kita dapat membuat pengiriman formulir muncul menjadi permintaan PUT
atau DELETE
.
Perilaku HttpMethodOverride
mempengaruhi atribut berikut:
-
HttpPostAttribute
-
HttpPutAttribute
-
HttpGetAttribute
-
HttpDeleteAttribute
-
AcceptVerbsAttribute
11. Kelas HiddenInputAttribute
Baru untuk Pembantu Template:
Kita dapat menerapkan atribut HiddenInputAttribute
baru ke properti model untuk menunjukkan apakah elemen input tersembunyi harus dirender saat menampilkan model dalam template editor (Atribut menetapkan nilai UIHint
implisit dari HiddenInput
).
Properti DisplayValue
atribut memungkinkan kita menentukan apakah nilai ditampilkan dalam mode editor dan tampilan.
Ketika DisplayValue
disetel ke false, tidak ada yang ditampilkan, bahkan markup HTML yang biasanya mengelilingi bidang.
Nilai default untuk DisplayValue
adalah true.
Kami mungkin menggunakan atribut HiddenInputAttribute
dalam skenario berikut:
- Saat tampilan memungkinkan pengguna mengedit ID objek dan perlu untuk menampilkan nilai serta menyediakan elemen input tersembunyi yang berisi ID lama sehingga dapat diteruskan kembali ke pengontrol.
- Saat tampilan memungkinkan pengguna mengedit properti biner yang seharusnya tidak pernah ditampilkan, seperti properti stempel waktu.
Dalam hal ini, nilai dan markup HTML di sekitarnya (seperti label dan nilai) tidak ditampilkan.
Misalnya:
[kode]
ProductViewModel kelas publik
{
[HiddenInput] // setara dengan [HiddenInput(DisplayValue=true)]
publik int Id { dapatkan; mengatur; }
Nama string publik { dapatkan; mengatur; }
[HiddenInput(DisplayValue=false)]
byte publik[] TimeStamp { dapatkan; mengatur; }
}
[/kode]
12. Metode Helper Html.ValidationSummary
Dapat Menampilkan Kesalahan Tingkat Model:
Alih-alih selalu menampilkan semua kesalahan validasi, metode pembantu Html.ValidationSummary
memiliki opsi baru untuk hanya menampilkan kesalahan tingkat model.
Ini memungkinkan kesalahan tingkat model untuk ditampilkan dalam ringkasan validasi dan kesalahan khusus bidang untuk ditampilkan di sebelah setiap bidang.
13. Templat T4 di Visual Studio Menghasilkan Kode yang Khusus untuk Versi Target .NET Framework:
Properti baru tersedia untuk file T4 dari host ASP.NET MVC T4 yang menentukan versi .NET Framework yang digunakan oleh aplikasi.
Hal ini memungkinkan T4 template untuk menghasilkan kode dan markup yang khusus untuk versi .NET Framework.
Di Visual Studio 2008, nilainya selalu .NET 3.5. Di Visual Studio 2010, nilainya adalah .NET 3.5 atau .NET4.
14. Peningkatan API:
Menambahkan metode CreateActionInvoker
virtual yang dilindungi di kelas Controller.
Metode ini dipanggil oleh properti ActionInvoker
dari Controller dan memungkinkan instantiasi lambat dari pemanggil jika tidak ada pemanggil yang sudah disetel.