Kadang-kadang fungsi aksi di kelas pengontrol bisa menjadi besar dan tidak menyenangkan, dengan banyak-banyak baris kode untuk sekadar mengontrol aliran data dari Model ke Tampilan. Pada titik tertentu fungsi-fungsi besar ini benar-benar kehilangan jejak prinsip-prinsip dasar kode yang baik, yaitu hanya melakukan satu hal, menjadi kecil, dapat dibaca dan dikelola dll.
Apakah akan dianggap praktik yang baik untuk memecah fungsi aksi besar ini menjadi fungsi pribadi yang lebih kecil di kelas controller atau haruskah kebutuhan optimasi seperti itu berarti kita harus menambahkannya dalam model?
Saya akan memilih untuk memiliki fungsi yang lebih kecil sebagai pribadi di controller sehingga mereka relatif terhadap tindakan, tetapi saya telah mendengar argumen bahwa controller sebaiknya sederhana sementara modelnya bisa menjadi besar dan gumpal; dan hanya bertanya-tanya mana yang akan menjadi metode yang paling disukai.
sumber
Jawaban terbaik yang bisa saya berikan adalah mengutip dari buku hebat karya Robert Martin, "Clean Code" yang sangat saya rekomendasikan kepada siapa pun yang tertarik pada subjek:
Tidak bisa mengatakannya lebih baik. Kutipan hebat lainnya dari buku yang sama berlaku:
Ketika membagi kode Anda menjadi lebih banyak fungsi, Anda dipaksa untuk memberikan fungsi-fungsi itu nama yang berarti yang dapat sangat meningkatkan keterbacaan kode Anda. Tak perlu dikatakan, semua fungsi yang tidak dimaksudkan untuk digunakan di luar kelas, harus pribadi, sehingga Anda dapat dengan mudah menggunakan kembali kode Anda melalui warisan.
Jika pengontrol Anda sekarang memiliki terlalu banyak fungsi, itu adalah pertanda bahwa ia mungkin melakukan terlalu banyak. Kemudian Anda dapat membaginya menjadi beberapa bagian independen atau mencoba untuk memindahkan beberapa fungsi ke model seperti yang disebutkan dalam jawaban lainnya. Juga jika Anda mengikuti rasa MVC non-klasik, di mana Views diizinkan untuk memiliki beberapa logika, Anda dapat menempatkan beberapa fungsi Anda di sana kapan pun cocok.
sumber
Dalam MVC saya mencoba dan memastikan bahwa pengontrol saya setipis mungkin dan juga bahwa model saya sebodoh mungkin.
Logika dan fungsi pembantu yang diperlukan dimasukkan ke dalam kelas pembantu yang berdiri sendiri secara terpisah. Itu membuat pengujian saya jauh lebih mudah juga (Anda menguji .. benar ??: D) Menguji pengontrol sangat sulit, setiap kali Anda mencoba dan membuat instance pengontrol untuk menguji Anda harus berpikir tentang Konteks HTTP dan memalsukan http ini dan itu, dan itu adalah rasa sakit, tetapi rasa sakit itu sengaja. Anda memerlukan semua itu karena pengontrol terkait erat dengan HTTP dan web. Ini adalah titik masuk ke aplikasi web Anda.
Logika dan fungsi pembantu tidak ada hubungannya dengan web. Mereka sepenuhnya agnostik lingkungan (atau seharusnya). Itu saja seharusnya memberitahu Anda bahwa mereka tidak termasuk bersama di tempat yang sama. Plus, jika Anda mengikat semua logika aplikasi Anda begitu dekat ke web, atau implementasi web tertentu, Anda tidak akan pernah bisa membawanya.
Kami mengembangkan situs MVC kami dengan semua entitas basis data kami (bukan model mvc kami, entitas db kami yang sebenarnya), penyimpanan kami, kelas penolong kami dan logika kami di tempat terpisah, dll. Kami hanya memiliki setiap situs web saja, tetapi kami tetap melakukannya seperti ini.
Beberapa bulan yang lalu kami diminta untuk membuat beberapa aplikasi desktop yang terkait dengan beberapa sistem pinggiran kami. Ini mudah dilakukan karena semua kode kami yang diuji dapat dengan mudah digunakan kembali. Jika kita memasukkan kode kita ke proyek web kita, atau memasukkan pengontrol kita, kita tidak akan pernah bisa melakukan ini.
sumber
Selain Dmitri Zaitsev dan angkasawan jawaban yang bagus saya tidak tahu apakah yang berikut ini juga berlaku untuk PHP: Anda harus mencoba menghindari metode pribadi karena kurangnya kemungkinan tes otomatis.
Ya, Anda dapat menggunakan metaprogramming atau injeksi dependensi untuk menguji metode pribadi juga, tetapi Anda tidak boleh melakukannya karena memiliki dampak besar pada keterbacaan kode Anda.
Selalu ingat prinsip CIUMAN: Tetap sederhana, bodoh.
sumber