Apa pola HMVC?

130

Membaca dokumentasi Kohana, saya menemukan bahwa perbedaan utama dalam versi 3.0 adalah bahwa ia mengikuti pola HMVC bukannya MVC seperti versi 2.x. Halaman tentang ini di dokumen Kohana dan yang ada di wikipedia tidak benar-benar memberi saya ide yang jelas.

Jadi pertanyaan: apa pola HMVC dan apa bedanya dengan MVC?

Matteo Riva
sumber
30
Sebuah diskusi tentang topik ini terjadi di forum Kohana. Anda mungkin merasa terbantu: forum.kohanaframework.org/discussion/1681
Sampson

Jawaban:

86

Sam de Freyssinet (salah satu pengembang Kohana) menulis artikel yang agak mendalam tentang HMVC , apa itu, dan bagaimana itu bisa digunakan.

Tautan sudah mati: Tautan Baru - https://web.archive.org/web/20160214073806/http://techportal.inviqa.com/2010/02/22/scaling-web-applications-with-hmvc/

bayangan tangan
sumber
terima kasih untuk tautan yang bagus, juga checkout javaworld.com/jw-07-2000/jw-0721-hmvc.html
Owais Qureshi
Tautan akan selalu mati! memposting konten, bukan tautan.
Loki
58

Saat ini saya sedang dalam proses mengembangkan kerangka kerja PHP 5.3 HMVC saya sendiri yang disebut Alloy . Karena saya banyak berinvestasi dan dijual di HMVC, saya pikir saya bisa menawarkan sudut pandang yang berbeda, dan mungkin penjelasan yang lebih baik tentang mengapa HMVC harus digunakan dan manfaat yang dihasilkannya.

Manfaat praktis terbesar dari menggunakan arsitektur HMVC adalah "widgetisasi" dari struktur konten. Contohnya bisa berupa komentar, peringkat, Twitter atau blog, tampilan umpan RSS, atau tampilan konten keranjang belanja untuk situs web e-commerce. Ini pada dasarnya adalah sepotong konten yang perlu ditampilkan di beberapa halaman, dan mungkin bahkan di tempat yang berbeda, tergantung pada konteks permintaan HTTP utama.

Kerangka kerja MVC tradisional umumnya tidak memberikan jawaban langsung untuk jenis-jenis struktur konten ini, sehingga orang-orang pada akhirnya akan menduplikasi dan mengubah tata letak, menggunakan bantuan khusus, membuat struktur widget atau file pustaka sendiri, atau menarik data yang tidak terkait dari permintaan utama. Controller untuk mendorong ke View dan merender secara parsial. Tak satu pun dari ini adalah opsi yang sangat baik, karena tanggung jawab memberikan bagian tertentu dari konten atau memuat data yang diperlukan akhirnya bocor ke beberapa area dan mendapatkan duplikat di tempat itu digunakan.

HMVC, atau secara khusus kemampuan untuk mengirim sub-permintaan ke Pengendali untuk menangani tanggung jawab ini adalah solusi yang jelas. Jika Anda berpikir tentang apa yang Anda lakukan, itu cocok dengan struktur Pengontrol tepat. Anda perlu memuat beberapa data tentang komentar, dan menampilkannya dalam format HTML. Jadi Anda mengirim permintaan ke Controller komentar dengan beberapa params, itu berinteraksi dengan Model, memilih Tampilan, dan Tampilan menampilkan konten. Satu-satunya perbedaan adalah Anda ingin komentar yang ditampilkan sebaris, di bawah artikel blog yang dilihat pengguna alih-alih halaman komentar lengkap yang sepenuhnya terpisah (meskipun dengan pendekatan HMVC, Anda sebenarnya dapat melayani permintaan internal dan eksternal dengan pengontrol yang sama dan "mematikan dua burung dengan satu batu ", seperti kata pepatah). Dalam kasus ini, HMVC benar-benar hanya produk sampingan alami dari berjuang untuk peningkatan modularitas kode, dapat digunakan kembali, dan mempertahankan pemisahan masalah yang lebih baik. INI adalah titik penjualan HMVC.

Jadi, sementara artikel TechPortal Sam de Freyssinet tentang penskalaan dengan HMVC menarik untuk dipikirkan, bukan di mana 90% orang yang menggunakan kerangka kerja HMVC akan mendapatkan manfaat nyata, praktis, sehari-hari darinya.

Vance Lucas
sumber
5
Ya ini adalah bagaimana saya membayangkannya dalam penggunaan dunia nyata, tetapi dari sudut pandang ini nama tidak cukup pas karena H di HMVC menyesatkan (tidak ada hierarki nyata).
Matteo Riva
2
Ya, Anda membuat poin yang bagus. Saya sebenarnya membagikan sudut pandang ini dan memberinya nama lain - "Nested MVC" - dalam presentasi yang saya lakukan di Alloy at Confoo 2011. Terserah pada Slideshare, slide # 20: slideshare.net/vlucas/alloy-hmvc-php- framework
Vance Lucas
Bagaimana HMVC akan menangani kebutuhan akan banyak pengembalian dari pohon modul? Misalnya menyusun konten head / body / footer, dependensi JS / Css dan keterkaitan antar modul. Acara? Kait? Kerangka kerja halaman tunggal? Objek pengembalian terstruktur?
scipilot
1
Jawaban ini adalah salinan wikipedia: / en.wikipedia.org/wiki/…
EricG
3
@EricG sepertinya seseorang menyalin jawaban yang saya berikan di sini, dan kemudian menambahkannya ke Wikipedia (bukan saya). Periksa bagian "Referensi" di bagian bawah artikel Wikipedia - ini tautan kembali ke komentar ini.
Vance Lucas
7

HMVC terkait erat dengan pendekatan "berbasis komponen" untuk pengiriman. Pada dasarnya, alih-alih memiliki satu operator, yang mendelegasikan ke controller, masing-masing controller dapat bertindak sebagai dispatcher itu sendiri. Ini memberi Anda hierarki pengendali. Desainnya lebih fleksibel dan menyebabkan enkapsulasi kode yang lebih baik, tetapi dengan harga abstraksi yang lebih tinggi. Konstrukt dirancang di sekitar pola ini.

Lihat juga jawaban ini: /programming/115629/simplest-php-routing-framework/120411#120411

troelskn
sumber
7

Di Kohana, setidaknya, permintaan HMVC adalah permintaan HTTP yang dilayani "secara internal": alih-alih dikeluarkan melalui jaringan, itu dialihkan, dikirim dan ditangani oleh kerangka itu sendiri. Kesamaan nama "HMVC" dan "MVC" membingungkan karena menunjukkan hubungan mendasar antara istilah yang sebenarnya tidak ada: satu bukan varian kecil atau modifikasi yang lain, mereka adalah hal yang sama sekali berbeda. (HMVC juga digambarkan sebagai Ajax tanpa permintaan HTTP sisi klien.) Penekanan Kohana pada, dan dukungan untuk "HMVC" berarti bahwa kerangka kerja tersebut memiliki dukungan kuat untuk arsitektur berorientasi layanan berbasis HTTP.

Keuntungan dari pola arsitektur ini adalah bahwa karena "konvensi panggilan" yang sama digunakan untuk permintaan internal dan eksternal, itu sepele untuk mengubah permintaan layanan "internal" menjadi permintaan "eksternal" atau sebaliknya ketika diperlukan.

Sementara ini adalah pola arsitektur yang masuk akal, memberikan namanya sendiri tampaknya tidak perlu (Symfony2 menggambarkan konsep yang sama " sub-permintaan "), dan pada kenyataannya nama tersebut tampaknya keliru: tidak ada persyaratan atau kebutuhan khusus bahwa permintaan membentuk suatu hierarki (selain grafik panggilan standar setiap program penting); permintaan bisa dengan mudah bersifat rekursif, misalnya.

[ Pembaruan Apr 2011, Mar 2012: Diperluas pada jawaban dalam menanggapi komentar.]

mjs
sumber
2
Mampu mengonversi permintaan layanan 'internal' ke permintaan 'eksternal', Anda dapat meningkatkan skala dengan lebih mudah jika diperlukan, yaitu memindahkan beberapa modul aplikasi ke server mereka sendiri.
Pangeran Kim
1
ya, coba terapkan layanan web internal dengan itu dan tanpa itu, hanya untuk melihat apakah itu sebenarnya "tidak terlalu penting".
Kemo
@Kemo Saya pikir ini adalah arsitektur yang bagus, saya pikir namanya membingungkan, dan itu menyiratkan bahwa Kohana melakukan sesuatu yang sangat tidak biasa.
mjs
Saya tidak yakin bagaimana jawaban Anda membantu. Anda tidak menjawab pertanyaan hanya mengeluh tentang nama dan itu tidak perlu (yang baik-baik saja).
Dave
4

HMVC adalah Hierarchical Model View Controller. Dalam MVC normal, setiap objek GUI memiliki MVC-nya. Tetapi tidak ada hubungan antara objek GUI induk dan objek GUI anak, tidak seperti HMVC. Dalam HMVC setiap objek GUI memiliki akses ke objek anaknya dan masing-masing objek anak dapat mengakses ke objek induknya.

Jadi di setiap tampilan ada tampilan induk. Melalui itu dapat mengaksesnya tampilan induk. Karena di setiap pengontrol terdapat pengontrol induk yang dapat digunakan untuk meneruskan acara tersebut ke pengontrol induk (Jika acara tidak berada dalam cakupannya.)

Untuk keterangan rinci, silakan klik di sini

Tautan baru adalah alamat ini

Sanjay Jain
sumber
1
tanda jawaban yang baik bukan hanya tautan tanpa informasi atau konteks lain. Dapatkah Anda mengeluarkan jawaban dan meringkas bagian yang relevan dari pos yang ditautkan?
Kev
1
@ Sanjay, ada alasan Anda mengubah tujuan tautan dari artikel HMVC menjadi satu di status gwt untuk seluler?
Brad Koch
@ Koch..Aku tidak mengubah tautan ... bahkan aku tidak tahu siapa yang mengubahnya .... tapi aku menautkannya ke tautan asli.
Sanjay Jain