Apakah Unit Testing merupakan tujuan utama Pola MVC?

14

Baru-baru ini dalam sebuah wawancara, salah satu pertanyaannya adalah 'Mengapa kita menggunakan MVC?' Saya hanya menjawab bahwa itu jauh lebih dekat dengan bagaimana, banyak sistem dunia nyata! Menjelaskan manfaat yang dimilikinya ketika datang ke Maintainability, Skalability dll. Tetapi mereka tidak yakin dan akhirnya mengatakan kepada saya bahwa MVC digunakan terutama karena 'memungkinkan Unit Testing mudah'.

Walaupun saya tahu bahwa mereka adalah poin yang valid, saya masih ragu apakah itu adalah alasan utama karena (i) bahkan jika saya memutuskan untuk tidak menulis Unit Testcases, MVC adalah pilihan yang memungkinkan (ii) Banyak sistem GUI di mana Unit Testcases ada tidak ikuti MVC.

Jadi pertanyaannya adalah 'Apakah Unit Pengujian merupakan tujuan utama Pola MVC?'

EDIT: Saya berasumsi bahwa mereka mungkin menyebutkan kemudahan Test Driven Development / menulis NUnit Testcases. Ini karena kita dapat menulis testcases untuk Model (Asalkan Tampilan mencerminkan perubahan keadaan Model) - tolong perbaiki saya jika saya salah.

WinW
sumber
11
Anda tidak lulus wawancara, bukan? Jika tidak, beruntunglah kamu. Saya tidak akan bergabung dengan perusahaan yang memiliki pola pikir yang sangat salah sejak awal. :) Unit Testing Jelas bukan tujuan utama. Mungkin membantu pengujian unit karena masalah semua terpisah, tetapi jelas bukan tujuan utama.
Rudy
4
Ingat bahwa wawancara berjalan dua arah. Anda menyelidiki mereka sebanyak mereka menguji Anda. Anda baru saja mendapat bendera merah: jangan masuk perusahaan ini. Mereka tidak memiliki petunjuk, tetapi lebih buruk lagi, mereka berpikir mereka tidak menyadari hal itu, jadi tidak ada harapan untuk perbaikan. Jika Anda memilih untuk masuk perusahaan, Anda akan menghadapi banyak situasi kafka.
deadalnix
@Rudy Tidak, saya tidak lulus: P, itu adalah Dev Center bank investasi terkemuka. Juga orang-orang terlihat bagus dan sangat otentik dengan pertanyaan lain dan itulah sebabnya saya bingung dengan ini.
WinW
@deadalnix, Ya benar..Rasakan hal yang sama setelah saya melihat jawabannya di sini. Tapi saya tidak yakin sebelum mempostingnya di sini.
WinW
Saya sangat setuju dengan deadalnix. Jangan pergi ke perusahaan ini.
Rudy

Jawaban:

33

Tujuan utama adalah "pemisahan masalah", karena model, pandangan dan pengontrol semua memiliki tanggung jawab yang berbeda.

The penulis asli kertas Xerox PARC menyatakan bahwa:

Tujuan penting dari MVC adalah untuk menjembatani kesenjangan antara model mental pengguna manusia dan model digital yang ada di komputer.

Jika pengujian unit adalah tujuan utama, seseorang akan dapat dengan mudah melihat tes unit. Pandangan terhadap lanskap proyek / kerangka kerja pengujian unit akan mengungkapkan bahwa itu sangat bertentangan dengan klaim yang dibuat. Seseorang biasanya akan menggunakan tes integrasi dan fungsional untuk menguji tampilan.

Vineet Reynolds
sumber
2
Saya akan mengatakan bahwa tujuan utama adalah memungkinkan Metafor Manipulasi Langsung (pada dasarnya itulah yang dikatakan kutipan) dan Pemberdayaan Pengguna (awalnya dibayangkan bahwa hanya Model yang akan ditulis oleh pemrogram, Tampilan dan Pengontrol akan ditulis oleh pengguna akhir).
Jörg W Mittag
14

Menurut pendapat saya, jawabannya adalah tegas 'tidak'. Mungkin ini adalah manfaat utama yang diamati dalam organisasi khusus ini, tetapi saya tidak akan menyebutnya 'tujuan utama'.

Saya kira itu tidak akan terlalu sulit untuk mengimplementasikan MVC dengan cara, itu sangat sulit untuk unit test (heck - cara saya melakukannya untuk pertama kalinya hampir tidak dapat diuji).

Di sisi lain, orang dapat mengatakan bahwa hampir semua pola (tidak termasuk hal-hal seperti Singleton) memfasilitasi pengujian unit, karena mereka paling sering mempromosikan decoupling - tetapi apakah itu 'tujuan utama' mereka? Hampir tidak.

Mchl
sumber
12

MVC (seperti sebagian besar pola desain tahu) sudah ada sebelum pengujian unit diketahui. Buku GoF diterbitkan pada tahun 1994 - dan mereka hanya mendokumentasikan pola-pola yang telah digunakan selama bertahun-tahun (jika bukan beberapa dekade) sebelumnya. (Dan tidak disebutkan pengujian unit di dalamnya.) Tentang pengujian unit, saya tidak dapat menemukan waktu yang tepat tentang kapan itu menjadi "publik" - Saya pribadi membacanya di artikel yang terkait dengan Extreme Programming, dan buku XP pertama keluar pada tahun 1999.

Jadi jelas unit testing tidak bisa menjadi tujuan utama dari menemukan / mendokumentasikan pola - sementara itu adil untuk mengatakan bahwa pola, ketika diterapkan dengan baik, memfasilitasi unit testing dengan sangat.

Péter Török
sumber
Referensi garis waktu adalah penyebutan yang bagus- secara logis mendukung argumen.
WinW
Tampaknya ada masalah samll dengan tanggal. heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html mengatakan "MVC dikandung pada tahun 1978 sebagai solusi desain untuk masalah tertentu". Jangan khawatir ... Argumen Anda tetap bagus - MVC sudah ada jauh sebelum pengujian unit dimulai.
WinW
Unit pengujian telah ada setidaknya sejak tahun 1980-an. Saya memulai karir saya saat itu dan kami memiliki unit test pada beberapa proyek yang saya kerjakan (dan itu sepertinya bukan ide baru saat itu). Kami hanya tidak memiliki kerangka kerja pra-dibangun yang kami miliki sekarang.
GreenMatt
2
@GreenMatt, saya tahu unit testing tidak ditemukan oleh Kent Beck, hanya digunakan kembali :-) Tetapi AFAIK relatif tidak dikenal sebelum XP dan Agile mulai menyebarkannya secara luas.
Péter Török
@ Péter Török: Saya ingat 1) menulis kode sederhana saya sendiri untuk menguji fungsi individu sepanjang jalan kembali ke perguruan tinggi (awal pertengahan 1980-an untuk saya) dan saya mendapat ide dari orang lain; 2) melihat penggambaran dan membaca makalah tentang model air terjun di tahun 80-an atau 90-an dengan fase yang disebut "Coding and Unit Testing" (vs. hanya "Coding"). (Maaf, saya tidak ingat di mana, jadi tidak dapat memberikan kutipan.) Jadi, pengujian unit telah ada dan berkembang cukup lama.
GreenMatt
2

Saya pikir tidak, kemudahan pengujian unit adalah salah satu manfaatnya, tetapi merupakan bagian dari kumpulan manfaat saat menggunakan MVC beserta alasannya. Mengatakan bahwa ada satu alasan utama untuk menggunakan MVC adalah kesalahan. Sepertinya perusahaan yang bersangkutan memilih MVC untuk memfasilitasi pengujian unit, maka mereka pikir itu adalah alasan utama. Secara pribadi alasan saya menggunakan MVC adalah kesederhanaannya dibandingkan dengan formulir web yang membuatnya lebih mudah untuk dirancang dan dipelihara, tetapi setiap individu / perusahaan akan memiliki alasan sendiri untuk menggunakan teknologi apa pun.

Robert Anton Reese
sumber
0

Di dunia ASP.NET MVC, banyak perbaikan pada ASP.NET telah dimasukkan dalam kerangka itu sendiri. Tujuan utama dari pola desain ini adalah untuk mengisolasi logika bisnis dari antarmuka pengguna agar dapat fokus pada pemeliharaan yang lebih baik, peningkatan kemampuan pengujian, dan struktur yang lebih bersih untuk aplikasi tersebut.

ASP.NET MVC memiliki kemampuan tertentu yang menjadikannya pilihan terbaik untuk memilih jika Anda memerlukan satu atau lebih dari yang berikut:

Tingkat kontrol yang tinggi atas HTML yang dihasilkan : Tidak seperti Formulir Web, Tampilan di ASP.NET MVC membuat HTML persis seperti yang Anda minta. Baru-baru ini, Formulir Web telah diperbaiki di bidang ini tetapi masih belum memiliki tingkat kontrol yang dimiliki MVC.

Pengujian unit lebih mudah : Dengan ASP.NET MVC, sangat mudah untuk mengikuti pola pengujian seperti test-driven development (TDD). Karena siklus hidup peristiwa yang kompleks dalam Formulir Web, di atas kerangka kerja berbasis kontrol, TDD jauh lebih mudah dengan MVC.

Pemisahan masalah : Ini mengacu pada pemisahan semua aspek sistem dengan jelas. Karena pola yang diterapkannya, aplikasi MVC dibagi menjadi beberapa bagian terpisah dan terikat (model, tampilan, dan pengontrol), yang membuatnya mudah dirawat.

Beberapa manfaat lainnya adalah:

• Pola MVC itu sendiri memudahkan pengelolaan kompleksitas dengan memisahkan fungsi aplikasi menjadi tiga bagian inti, model, tampilan, dan pengontrol.

• Aplikasi web ASP.NET MVC tidak menggunakan tampilan negara atau formulir berbasis server. Ini membuat kerangka kerja MVC ideal untuk pengembang yang ingin kontrol penuh atas perilaku aplikasi. Kondisi tampilan bisa menjadi sangat besar, yang merupakan masalah bagi perangkat seperti ponsel cerdas yang menggunakan jaringan lambat (mentransmisikan semua informasi itu bisa sangat lambat). Di halaman Formulir Web, Anda hanya bisa memiliki satu per halaman. Ini adalah batasan yang cukup besar. Di MVC, tidak ada batasan seperti itu - yaitu, Anda dapat memiliki elemen sebanyak yang Anda suka.

• ASP.NET MVC memberikan dukungan yang lebih baik untuk pengembangan yang digerakkan oleh pengujian (TDD).

• ASP.NET MVC berfungsi dengan baik untuk aplikasi web yang didukung oleh tim pengembang besar dan untuk desainer web yang membutuhkan kontrol tingkat tinggi atas HTML. ASP.NET MVC Pemrosesan Permintaan

Arvind Kumar
sumber