Ada dua struktur basis kode utama yang saya lihat ketika datang ke kerangka kerja MVC. Masalahnya adalah bahwa mereka berdua tampaknya memiliki bug organisasi yang menyertai mereka.
MVC standar
/controller
/model
/view
Masalah: Tidak ada pemisahan komponen terkait (forum, blog, pengguna, dll.)
MVC modular
/blog
/controller
/model
/view
/user
/controller
/model
/view
/forum
/controller
/model
/view
Memilih sistem berbasis modul membuat Anda memiliki masalah.
- Nama panjang (Forum_Model_Forum = forum / model / forum.php) (Seperti Zend)
- Pencarian sistem file menggunakan
is_file()
untuk menemukan folder mana yang memiliki model forum? (Seperti Kohana)
Apakah ada struktur MVC lain yang berfungsi dengan baik ketika mencoba memisahkan modul yang berbeda? Apakah ada manfaat dari struktur ini yang saya lewatkan?
web-applications
mvc
web-framework
file-structure
Xeoncross
sumber
sumber
Jawaban:
Mencoba:
Model Anda adalah jantung dari aplikasi Anda. Anda harus mendesain dan mengkodekannya sebagai paket mandiri. Pengontrol hanyalah klien dari model Anda, yang kebetulan menerjemahkan aktivitas pengguna menjadi tindakan untuk model Anda. Tampilan hanyalah salah satu cara khusus untuk menampilkan data dari model Anda. Jika aplikasi Anda tumbuh, Anda dapat melangkah lebih jauh dalam memisahkan klien dari model:
Ini harus menjelaskan bahwa Anda dapat memiliki banyak klien, yang semuanya dengan satu atau lain cara, berinteraksi dengan satu model.
sumber
;)
Saya menemukan struktur terbaik untuk Kerangka MVC / HMVC digabungkan. Untuk utama Anda perlu menggunakan pengendali dasar / model / tampilan ... tetapi untuk masing-masing komponen modul saja ...
Jadi dalam struktur kerangka MVC / HMVC saya terlihat seperti ini:
Juga jika saya perlu saya menambahkan modul perpustakaan, i18n atau pembantu.
Konvensi penamaan mudah, untuk pengontrol dan model saya menambahkan akhiran _Controller dan _Model. Untuk pengontrol dan model dari modul saya juga menambahkan awalan dengan nama modul, misalnya. Profil pengontrol di modul Pengguna akan dinamai User_Profile_Controller.
Jadi sangat mudah dan cepat untuk menemukan apa yang Anda butuhkan.
sumber
Penamaan kelas secara sistematis membantu menghindari konflik penamaan antar komponen. Penamaan kelas yang lama sepertinya tidak akan menjatuhkan hukuman kinerja yang berat. Saya menemukan skema penamaan ini agak membantu ketika coding karena mudah untuk melihat apa yang datang dari mana.
Ini sangat tergantung pada bagaimana sistem telah diimplementasikan, tetapi struktur sistem file biasanya mengikuti konvensi yang memungkinkan akses langsung ke komponen yang benar tanpa pencarian sistem file yang luas.
Berikut ini sebuah contoh, misalkan komponen forum yang akan digunakan:
Info:
Nama pengontrol: indeks
$ controller_path = BASEDIR. 'modul /'. $ component_name. '/ controller /'. $ controller_name. '.php';
Juga penting untuk dicatat bahwa ada ratusan permintaan sistem file saat mem-boot situs web biasa, jadi menambahkan beberapa tidak akan merugikan.
sumber
Saya telah bekerja dengan situs web yang dimulai dengan "MVC Standar" pertama, tetapi akhirnya, menjadi "MVC Modular".
Jika Anda melakukan situs web kecil, dan tidak memiliki banyak pengalaman, Anda mungkin ingin memulai dengan "MVC Standar". Jika Anda sudah tahu situs web akan menjadi sangat kompleks dan besar, maka, Anda harus terbiasa dengan "Modular MVC", itu akan sedikit sulit pada awalnya, tetapi, pada akhirnya, Anda akan terbiasa dengan Itu.
sumber
Saya sebenarnya sedang mengerjakan framework sendiri dan menggunakan kombinasi struktur direktori berbasis-modul dan bentuk bebas. Struktur default saya untuk kode situs menggunakan kerangka kerja adalah:
Anda juga dapat memiliki folder modul yang tidak terkait dengan pengontrol dan ada satu secara default Core yang digunakan untuk menyimpan templat lebar situs seperti header dan footer. Bagi saya ini memberikan yang terbaik dari kedua dunia. Anda dapat dengan mudah mengetahui di mana pengontrol karena ada satu pengontrol per folder tetapi untuk kelas seperti model Anda tidak perlu mencari di mana file berada di bawah satu direktori (yang juga membuat nama model bersih) .
Cara saya memuat file sedikit berbeda karena saya mengizinkan pengguna untuk mengkonfigurasi direktori berbeda di mana kelas bisa jadi saya parsing direktori awalnya dan menyimpan semua lokasi file kelas dalam file json dan kemudian menggunakannya untuk mencari cepat untuk semua permintaan lainnya (meskipun saya mencari cara untuk meningkatkan ini).
sumber
Jawabannya telah ditentukan oleh Proposal PSR-0 yang mana semua sistem besar mulai beradaptasi, atau telah mengadopsi sekarang.
Strukturnya adalah:
Ini berarti tidak ada yang dapat Anda lakukan untuk memperbaiki nama file yang panjang:
Ini juga berarti Anda harus menggunakan file case campuran bodoh alih-alih semua huruf kecil (jika Anda tidak perpustakaan pihak ketiga tidak akan berfungsi).
sumber
Solusi Mathiases sangat masuk akal Dan menggunakan struktur foldernya tidak mencegah memiliki konten yang dapat dicolokkan, misalnya menambahkan independen / galeri / bisa terlihat seperti ini
Sekarang kita memiliki "model" bersama dan yang independen jika perlu
sumber