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?
Jawaban:
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.
sumber
Karena saya tidak mengetahui kerangka kerja PHP, ini terlihat dari tampilan bahasa tingkat rendah.
Model:
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, ...).
Kelas Kontroler Anda berinteraksi dengan kelas Model, mereka memang tipis.
Berdasarkan output, lakukan beberapa hal dengan Model ... Dan kembalikan ModelView ke klien ...
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:
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.
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:
MVC adalah arsitektur / pola perangkat lunak, tempat Pengontrol berjalan dan untuk berapa lama tidak cocok.
sumber
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 adalah Arsitektur Perangkat Lunak, beberapa kerangka kerja mungkin menggunakannya sebagai buzz, tetapi yang lain melakukannya dengan benar ...
Lihat daftar beberapa kerangka kerja di Wikipedia .
MVC dan SEO adalah dua hal yang terpisah, tapi ya ... MVC semakin populer.
sumber
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.
sumber