Mengapa decouple view and controller (web)?

8

Mengapa kita tidak bisa meletakkannya di halaman yang sama, seperti setiap tindakan dipasangkan dengan pandangannya? Tidak menggunakan kode pulau, tetapi kode pengontrol di atas kemudian melihat kode di bawah? Apa masalah dengan pendekatan ini?

Dengan MVC, saya mengacu pada kerangka kerja seperti ASP.NET MVC dan Ruby on Rails, dan saya mendapat kesan bahwa V dan C sebenarnya adalah lapisan UI.

Andy
sumber

Jawaban:

5

Alasan mengapa mereka umumnya dipisahkan adalah karena Anda ingin pandangan Anda menggunakan pengontrol untuk mendapatkan model Anda. Tetapi arsitektur harus memungkinkan Anda untuk mengganti satu tampilan dengan yang lain tanpa harus mengubah logika bisnis (yaitu model objek atau bagaimana objek-objek itu diambil).

Dengan tidak mengikat pengontrol Anda langsung ke tampilan, nanti saya akan jauh lebih mudah untuk menambahkan fungsi lain seperti impor / ekspor yang dapat menggunakan pengontrol / model secara langsung tanpa harus bergantung pada UI.

Keuntungan lain dari mendorong kode sebanyak mungkin keluar dari UI adalah karena UI jauh lebih sulit untuk diuji unit daripada lapisan bisnis di belakangnya. Dengan memisahkan sebanyak mungkin dari tampilan itu sendiri, Anda dapat menulis lebih banyak unit test untuk memastikan controller / model dan logika aplikasi Anda benar.

DXM
sumber
Untuk impor / ekspor, Anda tidak perlu melihat sama sekali, jadi tidak ada yang perlu dipisahkan. Untuk pengujian, Anda masih dapat menjalankan tes logika pada tindakan / tampilan, satu-satunya masalah yang saya lihat adalah memuat kode tampilan yang tidak perlu Anda uji, tetapi Anda dapat menyiasatinya dengan mudah.
Andy
Untuk impor / ekspor, Anda tidak perlu melihat sama sekali jadi kecuali controller Anda dipisahkan dari pandangan Anda, mengapa Anda ingin mengeksekusi kode tampilan ketika impor / ekspor bahkan mungkin tidak berbasis web. Bahkan dengan halaman web, Anda dapat memiliki lebih dari satu tampilan ke dalam model yang sama (yaitu halaman asp yang berbeda, kelas yang berbeda), jika Anda tidak memisahkan controller Anda, Anda akan menduplikasi kode itu dalam tampilan yang berbeda.
DXM
Jika tidak ada tampilan, tidak ada tampilan, terlepas dari dipisahkan atau tidak.
Andy
Saya pikir pertanyaan Anda adalah "mengapa decouple controller dari pandangan". Jika impor / ekspor perlu mengakses controller untuk mendapatkan model objek, bagaimana bisa melakukannya tanpa membuat tampilan Anda? Tanpa decoupling, terlepas dari apakah seseorang membuat HTML atau tidak, Anda membuat kode tampilan. Atau Anda menyarankan menggandakan kode pengontrol di dalam fungsi impor / ekspor?
DXM
1
Posting asli Anda: "Mengapa kami tidak dapat meletakkannya di halaman yang sama" - jadi Anda memiliki halaman asp.net yang merender HTML dan menyajikan data model Anda. Di halaman ini Anda menambahkan VC Anda ke dalam satu kelas. Sekarang Anda mendapatkan persyaratan bahwa aplikasi Anda perlu mendukung impor / ekspor (bukan dari halaman ini, secara umum). Jika logika impor / ekspor yang benar-benar terpisah memerlukan akses ke controller, darimana ia mendapatkannya? Atau apakah Anda berencana untuk menempatkan seluruh aplikasi Anda ke dalam kelas Halaman yang sama? Bagaimana jika Anda ingin menjalankan ekspor offline (yaitu secara lokal di kotak server di luar server web)?
DXM
4
  • Pengontrol menangani logika bisnis yang dapat berubah dari waktu ke waktu, dan Tampilan mungkin tetap tidak berubah, sesuai persyaratan.

  • Sebaliknya di atas juga benar.

  • Desainer dan Pengembang harus dapat bekerja pada proyek yang sama secara mandiri.

Posting yang bagus: http://mashable.com/2011/11/11/designer-collaboration-strategies/

  • Seluruh sistem menjadi lebih mudah dikelola. Memecahkan bug menjadi lebih mudah dengan pendekatan yang dipisahkan.

  • Standar web dengan teknologi ujung depan berubah dengan cepat. Bayangkan sebuah perusahaan memutuskan untuk memigrasi semua teknologi front-end ke HTML5, Dart, dll. Memiliki Tampilan dan Pengontrol yang digabungkan akan menjadi mimpi buruk!

BOSS SHOUBHIK
sumber
Pertama dan untuk sebagian besar, logika bisnis harus ada dalam model. Kedua, tampilan penuh dengan kode seperti foreach dan helpers, seorang desainer grafis tentu tidak ingin berurusan dengan itu. Jika dia ingin berurusan dengan itu maka dia sebenarnya adalah seorang programmer UI, yang mana pengontrolnya adalah bagian dari perhatiannya. Sedangkan untuk HTML5, sebagian besar HTML dibangun dari mekanisme tata letak, pembantu HTML dan sebagian tampilan (yang seperti pembantu), jadi tidak masalah apakah pandangan itu digabungkan, Anda tidak mengubah tampilan itu sendiri untuk HTML5 .
Andy
@Andy Youy meminta perbedaan antara C dan V ... Dari perspektif itu C menangani logika bisnis, karena menangani model.
yannis
3

Anda tidak harus memisahkan keduanya tentunya. Tetapi jika tampilan dan pengontrol independen maka setiap antarmuka pengguna dapat digunakan. Misalnya Anda dapat menggunakan pengontrol melalui konsol, soket, antarmuka web, atau desktop. Dengan kata lain, Anda dapat meningkatkan penggunaan kembali kode.

perreal
sumber
Saya merujuk pada pengembangan web, di mana UI sebenarnya adalah tampilan dan pengontrol yang digabungkan, jadi Anda tidak dapat benar-benar bertukar hanya tampilan dengan UI baru.
Andy
3
@Andy - yakin Anda bisa, Anda dapat memutuskan bahwa Anda ingin memiliki aplikasi iOS asli dan aplikasi Android untuk situs web yang sedang Anda kembangkan. Daripada harus melakukan hal-hal lagi, Anda bisa melakukan panggilan ke controller Anda dan kemudian memiliki tampilan terpisah pada perangkat iOS / Android, sehingga menggunakan kembali controller.
Jetti
@ Jetti itu poin yang bagus.
Andy