Dibandingkan dengan Formulir Web, MVC secara bersamaan merupakan pendekatan tingkat rendah untuk pembuatan HTML dengan kontrol yang lebih besar terhadap output halaman dan pendekatan tingkat tinggi yang lebih digerakkan oleh arsitektur. Izinkan saya menangkap Formulir Web dan MVC dan tunjukkan mengapa saya pikir perbandingannya mendukung Formulir Web dalam banyak situasi - selama Anda tidak jatuh ke dalam beberapa perangkap Formulir Web klasik.
Formulir Web
Dalam model Formulir Web, halaman Anda berhubungan langsung dengan permintaan halaman dari browser. Dengan demikian, jika Anda mengarahkan pengguna ke daftar Buku, Anda mungkin akan memiliki halaman di suatu tempat yang disebut "Booklist.aspx" di mana Anda akan mengarahkannya. Di halaman itu, Anda harus memberikan semua yang diperlukan untuk menunjukkan daftar itu. Ini termasuk kode untuk menarik data, menerapkan logika bisnis apa pun, dan menampilkan hasilnya. Jika ada logika arsitektur atau perutean yang mempengaruhi halaman, Anda juga harus membuat kode logika arsitektur di halaman tersebut. Pengembangan Formulir Web yang baik biasanya melibatkan pengembangan satu set kelas pendukung di DLL yang terpisah (unit-testable). Kelas-kelas ini akan menangani logika bisnis, akses data dan keputusan arsitektur / routing.
MVC
MVC mengambil pandangan yang lebih "arsitektural" dari pengembangan aplikasi web: menawarkan perancah standar untuk membangun. Ini juga menyediakan alat untuk secara otomatis menghasilkan kelas model, tampilan dan pengontrol dalam arsitektur yang sudah ada. Misalnya, di Ruby on Rails (hanya "Rails" dari sini dan seterusnya) dan ASP.NET MVC Anda akan selalu memulai dengan struktur direktori yang mencerminkan keseluruhan model arsitektur aplikasi web mereka. Untuk menambahkan tampilan, model, dan pengontrol, Anda akan menggunakan perintah seperti Rails "Rails script / generate scaffold {modelname}" (ASP.NET MVC menawarkan perintah serupa di IDE). Di kelas pengontrol yang dihasilkan, akan ada metode ("Tindakan") untuk Indeks (tampilkan daftar), Tampilkan, Baru dan Edit dan Hancurkan (setidaknya di Rails, MVC serupa). Secara default, ini "
Tata letak direktori dan file penting dalam MVC. Misalnya, dalam ASP.NET MVC, metode Indeks untuk objek "Buku" kemungkinan hanya memiliki satu baris: "Return View ();" Melalui keajaiban MVC, ini akan mengirim model Buku ke halaman "/View/Books/Index.aspx" di mana Anda akan menemukan kode untuk menampilkan Buku. Pendekatan Rails serupa meskipun logikanya sedikit lebih eksplisit dan kurang "ajaib". Sebuah Lihat halaman dalam sebuah aplikasi MVC biasanya lebih sederhana daripada sebuah halaman Web Forms karena mereka tidak perlu khawatir karena banyak tentang routing yang, logika bisnis atau penanganan data.
Perbandingan
Keuntungan MVC berkisar pada pemisahan masalah yang bersih dan model yang lebih bersih, HTML / CSS / AJAX / Javascript-sentris untuk menghasilkan output Anda. Ini meningkatkan kemampuan uji, menyediakan desain yang lebih standar dan membuka pintu ke jenis situs web yang lebih "Web 2.0".
Namun, ada beberapa kelemahan yang signifikan juga.
Pertama, meskipun mudah untuk membuat situs demo berjalan, model arsitektur keseluruhan memiliki kurva belajar yang signifikan. Ketika mereka mengatakan "Convention Over Configuration" kedengarannya bagus - sampai Anda menyadari bahwa Anda memiliki konvensi yang layak untuk dipelajari. Selain itu, sering sedikit menjengkelkan untuk mencari tahu apa yang terjadi karena Anda sedang mengandalkan magic daripada panggilan eksplisit. Misalnya, bahwa "Return View ();" telepon di atas? Panggilan yang sama persis dapat ditemukan di Tindakan lain tetapi mereka pergi ke tempat yang berbeda. Jika Anda memahami konvensi MVCmaka Anda tahu mengapa ini dilakukan. Namun, itu tentu saja tidak memenuhi syarat sebagai contoh penamaan yang baik atau kode yang mudah dimengerti dan jauh lebih sulit bagi pengembang baru untuk mengambil dari Formulir Web (ini bukan hanya pendapat: Saya memiliki pekerja magang musim panas mempelajari Formulir Web tahun lalu dan MVC tahun ini dan perbedaan produktivitas diucapkan - mendukung Formulir Web). BTW, Rails sedikit lebih baik dalam hal ini meskipun Ruby on Rails fitur metode dinamis yang mengambil beberapa membiasakan diri juga.
Kedua, MVC secara implisit mengasumsikan bahwa Anda sedang membangun situs web gaya CRUD klasik. Keputusan arsitektur dan terutama pembuat kode dibuat untuk mendukung jenis aplikasi web ini. Jika Anda sedang membangun aplikasi CRUD dan ingin mengadopsi arsitektur yang terbukti (atau hanya tidak suka desain arsitektur), maka Anda mungkin harus mempertimbangkan MVC. Namun, jika Anda akan melakukan lebih dari CRUD dan / atau Anda cukup kompeten dengan arsitektur maka MVC mungkin terasa seperti straightjacket sampai Anda benar-benar menguasai model perutean yang mendasarinya (yang jauh lebih kompleks daripada hanya perutean dalam aplikasi WebForms). Bahkan kemudian, saya merasa seperti saya selalu melawan model dan khawatir tentang hasil yang tidak terduga.
Ketiga, jika Anda tidak peduli dengan Linq (baik karena Anda takut Linq-to-SQL akan hilang atau karena Anda menemukan Linq-to-Entities secara berlebihan diproduksi di bawah dan di bawah daya) maka Anda juga tidak ingin untuk berjalan di jalur ini karena alat perancah ASP.NET MVC dibangun di sekitar Linq (ini adalah pembunuh bagi saya). Model data Rails juga cukup canggung dibandingkan dengan apa yang dapat Anda capai jika Anda berpengalaman dalam SQL (dan terutama jika Anda berpengalaman dalam TSQL dan prosedur tersimpan!).
Keempat, pendukung MVC sering menunjukkan bahwa pandangan MVC lebih dekat dengan model HTML / CSS / AJAX web. Misalnya, "HTML Helpers" - panggilan kode kecil di halaman Anda yang bertukar konten dan menempatkannya ke dalam kontrol HTML - jauh lebih mudah untuk diintegrasikan dengan Javascript daripada kontrol Formulir Web. Namun, ASP.NET 4.0 memperkenalkan kemampuan untuk memberi nama kontrol Anda dan karenanya sangat menghilangkan keuntungan ini.
Kelima, puritan MVC sering mencemooh Viewstate. Dalam beberapa kasus, mereka berhak melakukannya. Namun, Viewstate juga bisa menjadi alat yang hebat dan anugerah bagi produktivitas. Sebagai perbandingan, menangani kondisi tampilan jauh lebih mudah daripada mencoba mengintegrasikan kontrol web pihak ketiga dalam aplikasi MVC. Sementara integrasi kontrol mungkin lebih mudah untuk MVC, semua upaya saat ini yang saya lihat menderita dari kebutuhan untuk membangun (agak grody) kode untuk menghubungkan kontrol ini kembali ke kelas Controller view (yaitu - untuk bekerja di sekitar model MVC ).
Kesimpulan
Saya suka pengembangan MVC dalam banyak hal (walaupun saya lebih suka Rails daripada ASP.NET MVC jika perlu waktu lama). Saya juga berpikir bahwa penting bagi kita untuk tidak terjebak dalam pemikiran bahwa ASP.NET MVC adalah "anti-pola" dari Formulir Web ASP.NET. Mereka berbeda tetapi tidak sepenuhnya asing dan tentu saja ada ruang untuk keduanya.
Namun, saya lebih suka pengembangan Formulir Web karena, untuk sebagian besar tugas , itu lebih mudah untuk menyelesaikan sesuatu (pengecualian menjadi pembuatan satu set formulir CRUD). MVC juga tampaknya menderita, sampai batas tertentu, dari kelebihan teori. Memang, lihat banyak pertanyaan yang diajukan di sini pada SO oleh orang-orang yang tahu ASP.NET berorientasi halaman tetapi yang mencoba MVC. Tanpa pengecualian, ada banyak kertakan gigi karena pengembang menemukan bahwa mereka tidak dapat melakukan tugas-tugas dasar tanpa melewati rintangan atau bertahan dalam kurva belajar yang besar. Inilah yang membuat Formulir Web lebih unggul dari MVC dalam buku saya: MVC membuat Anda membayar harga dunia nyata untuk mendapatkan sedikit lebih banyak testability atau, lebih buruk lagi, hanya terlihat keren karena Anda menggunakanteknologi terbaru.
Pembaruan: Saya banyak dikritik di bagian komentar - beberapa di antaranya cukup adil. Jadi, saya telah menghabiskan beberapa bulan mempelajari Rails dan ASP.NET MVC hanya untuk memastikan saya tidak benar-benar kehilangan hal besar berikutnya! Tentu saja, ini juga membantu memastikan bahwa saya memberikan respons yang seimbang dan sesuai untuk pertanyaan itu. Anda harus tahu bahwa respons di atas adalah penulisan ulang utama dari jawaban awal saya jika komentarnya tampaknya tidak selaras.
Ketika saya melihat lebih dekat ke MVC saya berpikir, untuk sementara, bahwa saya akan berakhir dengan mea culpa utama. Pada akhirnya saya menyimpulkan bahwa, sementara saya pikir kita perlu menghabiskan lebih banyak energi pada arsitektur Formulir Web dan testability, MVC benar-benar tidak menjawab panggilan untuk saya. Jadi, "terima kasih" yang tulus kepada orang-orang yang memberikan kritik cerdas atas jawaban awal saya.
Mengenai mereka yang melihat ini sebagai pertarungan agama dan yang tanpa henti merekayasa banjir downvote, saya tidak mengerti mengapa Anda repot-repot (20+ suara turun dalam hitungan detik satu sama lain pada beberapa kesempatan tentu tidak normal). Jika Anda membaca jawaban ini dan bertanya-tanya apakah ada sesuatu yang benar-benar "salah" tentang jawaban saya mengingat bahwa skornya jauh lebih rendah daripada beberapa jawaban lainnya, yakinlah bahwa itu mengatakan lebih banyak tentang beberapa orang yang tidak setuju daripada pengertian umum tentang komunitas (secara keseluruhan, yang ini telah terunggah lebih dari 100 kali).
Faktanya adalah bahwa banyak pengembang tidak peduli dengan MVC dan, memang, ini bukan pandangan minoritas (bahkan dalam MS seperti yang ditunjukkan oleh blog).