Apakah MVC hanya SEO dari pemrograman PHP?

9

Ada sekitar satu juta "kerangka kerja PHP". Dan kebanyakan dari mereka menagih diri mereka sendiri mengikuti pola MVC. Sementara itu selamat datang untuk mengatasi gaya pengkodean osCommerce (logika pemrosesan sangat dicampur dengan SQL dan HTML), ada tentu saja lebih sederhana dan lebih mudah untuk mengikuti pendekatan untuk mendapatkan desain aplikasi yang dapat dipertahankan.

Konsep MVC asli ditargetkan pada aplikasi GUI. Dan untuk Gtk / Python tampaknya layak untuk mengikutinya. Tetapi aplikasi web PHP tidak beroperasi pada Tampilan langsung (elemen GUI) dan runtime Controller yang persisten. Ini tentu saja keliru jika hanya menggambarkan kode yang digunakan + pengelompokan direktori atau penamaan kelas.

"MVC" tampaknya digunakan seperti kata kunci untuk kerangka kerja PHP. Dan saya benar-benar melihat satu atau dua kerangka kerja PHP dewasa mengakuinya, tetapi mendefinisikan ulang frasa untuk mencocokkan internasional.
Jadi, apakah ini umumnya minyak ular? Mengapa terminologi yang lebih baik tidak digunakan, dan konsep yang lebih masuk akal untuk dipelihara PHP dipelihara?

Beberapa alasan yang rumit

Mengapa saya menduga bahwa implementasi PHP tidak mengikuti pola MVC yang sebenarnya:

Model : dalam teori, Model harus gemuk dan mengandung logika bisnis, dan pengendali harus penangan yang tipis (input-> output). Pada kenyataannya, kerangka kerja PHP menganjurkan Model yang dangkal . CI dan Symfony misalnya menyamakan Model == ORM. Bahkan input HTTP ditangani oleh pengontrol, tidak diperlakukan sebagai model.

Tampilan : solusi dengan diskon AJAX, tidak mungkin ada Tampilan di halaman web. Kerangka kerja PHP masih memompa halaman. Antarmuka masih secara efektif mengikuti model HTTP biasa, tidak ada keuntungan dibandingkan aplikasi non-MVC. (Dan terakhir, tidak satu pun kerangka kerja php yang tersebar luas yang secara faktual dapat menampilkan ke Tampilan GUI alih-alih HTML. Saya telah melihat perpustakaan PHP yang dapat mengoperasikan Gtk / Konsol / Web, tetapi kerangka kerjanya tidak.)

Pengendali : Saya tidak yakin. Pengontrol mungkin tidak perlu berjalan lama dan terus aktif dalam model MVC. Namun dalam konteks kerangka kerja PHP, mereka kebanyakan meminta penangan. Bukan sesuatu yang bisa diperdebatkan, tetapi hanya terasa sedikit buzzwordish.

Akankah ada deskriptor yang lebih baik? Saya telah melihat akronim seperti PMVC atau HMVC. Meskipun deskripsi menjadi lebih ambigu di sana, mungkin ini akan menjelaskan kerangka kerja web saat ini yang kurang tipu?

mario
sumber
Jadi, sebagai kesimpulan: Kerangka kerja PHP menerapkan konsep yang mirip dengan MVC asli. Saya pikir sebaiknya dipaku di sini: stackoverflow.com/questions/1549857/simple-php-mvc-framework/…
mario
Saya terkejut membaca bahwa "kebanyakan kerangka kerja PHP menggunakan Tampilan hanya sebagai halaman". Dalam semua kerangka kerja PHP yang saya gunakan, sebuah Tampilan bisa apa saja, pada dasarnya hanya sebuah template HTML. Jadi bisa berupa kotak teks, bilah sisi, bilah navigasi, blok teks statis, atau bahkan tata letak halaman. Saya tidak bisa memikirkan kerangka kerja apa pun yang tidak memungkinkan Anda menanamkan Views dalam Views, membiarkan Anda melakukan hampir semua hal selama logika bisnis aktual Anda / pemrosesan dilakukan di Controller sebelumnya.
Lotus Notes
The Model (tidak jamak) adalah lapisan . Ini bukan satu file atau kelas. Ini adalah kumpulan objek domain, pemetaan data, dan layanan. Baca ini .
James
3
... SEO? "Optimisasi Mesin Pencari"?
Izkata

Jawaban:

12

Saya pikir Anda melihat ini dengan cara yang sepenuhnya salah. Aplikasi GUI dan halaman web adalah dunia yang berbeda sehingga definisi yang sama persis dari MVC tidak akan pernah bekerja untuk keduanya. MVC lebih tentang ideal: memisahkan bagian-bagian tertentu dari aplikasi seperti tampilan dan logika.

Dalam PHP (atau web pada umumnya), suatu View adalah halaman web itu sendiri: output HTML. Ini bukan "hidup" sesuai definisi Anda, tetapi Anda cukup mengklik tautan untuk kembali ke controller (yaitu permintaan halaman lain).

The Pengendali dan Model adalah di mana hal-hal yang berbeda, seperti Anda menjelaskan. Dalam PHP modelnya cenderung menjadi lapisan data, berinteraksi dengan database dan sebagainya. Tetapi masih memodelkan situasi, dan controller masih mengontrol aliran aplikasi, jika hanya sekali memuat per halaman.

Jadi nama "Model-View-Controller" sangat logis, meskipun implementasi yang berbeda dalam aplikasi GUI vs aplikasi web.

DisgruntledGoat
sumber
Saya tidak memiliki pertengkaran dengan konsep abstrak MVC. Ini keberatan saya bahwa kerangka kerja PHP tidak jujur ​​tentang sebenarnya hanya menerapkan Pasif-MVC. Bahkan pola "Model-View-Presenter" adalah deskripsi yang lebih realistis. Tapi tentu saja, syarat harus ditekuk ketika Anda menerapkannya ke domain lain. Pertanyaan asli; mungkin istilah lentur menjadikannya kata kunci?
mario
3

Karena saya tidak mengetahui kerangka kerja PHP, ini terlihat dari tampilan bahasa tingkat rendah.

Model:

dalam teori, Model harus gemuk dan mengandung logika bisnis

Itu sepenuhnya untuk dilakukan, saya tidak melihat apa yang harus dilakukan PHP dengan ini ...

Model adalah kelas data dalam PHP yang mungkin dapat berkomunikasi dengan database,
maka Anda juga dapat mengirim model yang sama atau model parsial dalam format JSON ke klien.

Saya tidak akan mengatakan logika bisnis, ini lebih seperti logika data (validasi, interaksi basis data, impor / ekspor, ...).

dan pengendali harus pengendali tipis (input-> output)

Kelas Kontroler Anda berinteraksi dengan kelas Model, mereka memang tipis.

Berdasarkan output, lakukan beberapa hal dengan Model ... Dan kembalikan ModelView ke klien ...

Pada kenyataannya, kerangka kerja PHP menganjurkan Model yang dangkal. CI dan Symfony misalnya menyamakan Model == ORM. Bahkan input HTTP ditangani oleh pengontrol, tidak diperlakukan sebagai model.

Saya tidak begitu menyadari kerangka PHP itu ...

Tetapi input HTTP harus ditangani sebelum mencapai controller,
Anda dapat dengan mudah membuat kelas yang mengubah data GET dan POST menjadi routing dan parameter yang baik.

Ini persis apa yang terjadi di ASP.NET MVC 2 dan tidak ada yang salah dengan itu,
saya tidak tahu bagaimana ini akan terjadi dengan PHP tapi saya kira itu akan terkait erat.

Anda bahkan dapat dengan mudah mengubah data GET dan POST menjadi model, model itu mungkin mengandung logika konstruktor untuk itu. Atau beberapa kelas terpisah dapat ditambahkan untuk tujuan itu.


Dilihat:

solusi dengan diskon AJAX, tidak mungkin ada Tampilan di halaman web. Kerangka kerja PHP masih memompa halaman.

Saya tidak melihat mengapa itu tidak bisa, satu-satunya perbedaan adalah protokol dan PHP dapat mengembalikan JSON, dll ...

Halaman adalah pandangan Anda dan dapat meminta dan memperbarui melalui AJAX + JSON.
Sekali lagi, saya tidak benar-benar menyadari kerangka PHP itu tetapi dalam ASP.NET MVC 2 berfungsi seperti itu.

Antarmuka masih secara efektif mengikuti model HTTP biasa, tidak ada keuntungan dibandingkan aplikasi non-MVC. (Dan terakhir, tidak satu pun kerangka kerja php yang tersebar luas yang secara faktual dapat menampilkan ke Tampilan GUI alih-alih HTML. Saya telah melihat perpustakaan PHP yang dapat mengoperasikan Gtk / Konsol / Web, tetapi kerangka kerjanya tidak.)

Satu-satunya keuntungan yang Anda dapatkan (dan itu sama dengan aplikasi normal) adalah pemisahan menjadi Model (Data) + View (GUI) + Controller (Logic). Serupa, Anda tidak akan melihat kerangka C ++ yang secara faktual dapat menampilkan ke HTML atau JSON, bukan GUI Views.


Pengendali:

Saya tidak yakin. Pengontrol mungkin tidak perlu berjalan lama dan terus aktif dalam model MVC. Namun dalam konteks kerangka kerja PHP, mereka kebanyakan meminta penangan. Bukan sesuatu yang bisa diperdebatkan, tetapi hanya terasa sedikit buzzwordish.

MVC adalah arsitektur / pola perangkat lunak, tempat Pengontrol berjalan dan untuk berapa lama tidak cocok.

Tamara Wijsman
sumber
1

Tetapi aplikasi web PHP tidak beroperasi pada Tampilan langsung (elemen GUI) dan runtime Controller yang persisten.

Tidak, tentu saja!

Pikirkan aplikasi AJAX, kemudian tampilan meminta sesuatu ke controller dan mendapatkan sebagian tampilan kembali,
tampilan atau data ini kemudian diisi di suatu tempat di halaman dan dengan demikian tinggal diperbarui.

Pengontrol juga gigih karena Anda dapat menggunakan cookie / sesi.

"MVC" tampaknya digunakan seperti kata kunci untuk kerangka kerja PHP.

MVC adalah Arsitektur Perangkat Lunak, beberapa kerangka kerja mungkin menggunakannya sebagai buzz, tetapi yang lain melakukannya dengan benar ...
Lihat daftar beberapa kerangka kerja di Wikipedia .

Apakah MVC hanyalah SEO dari pemrograman php?

MVC dan SEO adalah dua hal yang terpisah, tapi ya ... MVC semakin populer.

Tamara Wijsman
sumber
1
Tentu saja, elemen AJAX UI mendekatinya, tapi itu solusi yang objektif. Dan sepertinya masih menekuk definisi. (Btw, saya mengetahui Cappucino.org dan toolkit nyata lainnya, tetapi merujuk pada kerangka PHP yang kasar.)
mario
Tidak akan menyebutnya solusi, Anda mungkin juga menghitung Qt dan kerangka kerja lain sebagai solusi juga ... Hanya ada overhead transfer data antara server dan klien, dan dengan kecepatan koneksi dan latensi saat ini, ini bahkan tidak banyak lagi. Saya tidak melihat bagaimana itu menekuk definisi: Pola ini mengisolasi logika domain (logika aplikasi untuk pengguna) dari input dan presentasi (UI), memungkinkan pengembangan independen, pengujian dan pemeliharaan masing-masing.
Tamara Wijsman
1
Saya mengerti apa yang kamu maksud. Jika Anda menafsirkan PHP sebagai server aplikasi dan AJAX sebagai mekanisme RPC antara logika dan UI, ya. Namun saya masih menyebutnya solusi pada HTTP. OTOH tidak yakin apakah itu relevan dengan denominasi MVC. Saya pikir saya sebenarnya keberatan dengan implikasi bahwa hanya "" "MVC" "" yang menyediakan UI web responsif dan interaktif yang Anda gambarkan.
mario
-1

Menurut pendapat saya menggunakan MVC di php membawa programmer ke web. Lebih mudah untuk mendapatkan dari misalnya Java ke PHP ketika Anda tahu cara bekerja dengan MVC.

baklap
sumber
+1 Tetapi apakah itu hanya keunggulan terminologi, atau apakah ada kerangka kerja PHP yang dekat dengan implementasi Java. (Dan secara tersirat, apakah Anda berbicara tentang Java GUI atau Web / Struts?)
mario
Saya tidak tahu persis tapi saya menggunakan kerangka kerja zend dan saya kira itu sama dengan kerangka kerja MVC lainnya: sangat penting untuk mengetahui apa yang harus dilakukan dalam model, tampilan, dan pengontrol Anda dan juga kesenjangan antara dunia pemrograman dan skrip interning dunia tertutup. Mungkin usia skrip internets sudah berakhir, dan aku akan senang melihatnya. Itu terlalu buggy.
baklap