Katakanlah setiap kali saya melakukan operasi CRUD atau memodifikasi hubungan dengan cara tertentu saya juga ingin melakukan sesuatu yang lain. Misalnya, setiap kali seseorang menerbitkan posting saya juga ingin menyimpan sesuatu ke meja untuk analitik. Mungkin bukan contoh terbaik tetapi secara umum ada banyak fungsi "dikelompokkan" ini.
Biasanya saya melihat tipe logika ini dimasukkan ke dalam controller. Itu semua bagus dan keren sampai Anda ingin mereproduksi fungsi ini di banyak tempat. Ketika Anda mulai masuk ke sebagian, membuat API dan menghasilkan konten dummy itu menjadi masalah dengan menjaga hal-hal KERING.
Cara yang saya lihat untuk mengelola ini adalah peristiwa, repositori, perpustakaan, dan menambah model. Inilah pemahaman saya masing-masing:
Layanan: Di sinilah kebanyakan orang mungkin akan meletakkan kode ini. Masalah utama saya dengan layanan adalah bahwa kadang-kadang sulit untuk menemukan fungsionalitas spesifik di dalamnya dan saya merasa mereka dilupakan ketika orang-orang fokus menggunakan Eloquent. Bagaimana saya tahu saya perlu memanggil metode publishPost()
di perpustakaan ketika saya bisa melakukannya $post->is_published = 1
?
Satu-satunya syarat saya melihat ini berfungsi dengan baik adalah jika Anda HANYA menggunakan layanan (dan idealnya membuat Eloquent tidak dapat diakses entah bagaimana dari pengontrol secara bersamaan).
Pada akhirnya sepertinya ini hanya akan membuat banyak file tambahan yang tidak perlu jika permintaan Anda umumnya mengikuti struktur model Anda.
Repositori: Dari apa yang saya pahami ini pada dasarnya seperti layanan tetapi ada antarmuka sehingga Anda dapat beralih di antara ORM, yang tidak saya butuhkan.
Kejadian: Saya melihat ini sebagai sistem yang paling elegan karena Anda tahu acara model Anda akan selalu dipanggil dengan metode Eloquent, sehingga Anda dapat menulis pengendali seperti yang biasa Anda lakukan. Saya bisa melihat ini semakin berantakan dan jika ada yang punya contoh proyek besar menggunakan acara untuk kopling kritis saya ingin melihatnya.
Model: Secara tradisional saya memiliki kelas yang melakukan CRUD dan juga menangani coupling kritis. Ini sebenarnya membuat segalanya mudah karena Anda tahu semua fungsi di sekitar CRUD + apa pun yang harus dilakukan dengan itu ada di sana.
Sederhana, tetapi dalam arsitektur MVC ini biasanya tidak seperti yang saya lihat selesai. Dalam arti tertentu saya lebih suka ini daripada layanan karena sedikit lebih mudah ditemukan, dan ada sedikit file untuk melacak. Itu bisa agak berantakan meskipun. Saya ingin mendengar kejatuhan metode ini dan mengapa kebanyakan orang tampaknya tidak melakukannya.
Apa kelebihan / kekurangan masing-masing metode? Apakah saya melewatkan sesuatu?