Apakah praktik yang baik untuk memanggil fungsi Kontroler dari Kontroler lain?

23

Saya memiliki kasus di mana saya menangani logika pencarian dalam satu pengontrol dan saya menghasilkan beberapa data berdasarkan pencarian dan kembali sebagai statistik.

Apakah praktik yang baik memanggil fungsi pengontrol dari pengontrol lain? Atau dua pengendali tidak boleh 'berbicara'?

IAmJulianAcosta
sumber

Jawaban:

24

Ini agak aneh, walaupun jawabannya tergantung pada bahasa / kerangka kerja yang Anda gunakan, karena bahasa / kerangka kerja yang berbeda memiliki pendekatan MVC yang berbeda.

Secara umum, Anda tidak akan menggunakan satu pengontrol dari yang lain karena:

  • Pengendali biasanya mengembalikan hasil dari jenis yang dimaksudkan untuk digunakan oleh kerangka kerja MVC. Hasil ini mengandung banyak informasi yang Anda, sebagai penelepon, tidak perlu (seperti nama tampilan), dan tidak selalu membuatnya mudah untuk mendapatkan informasi yang mungkin menarik bagi Anda (dalam kasus Anda, model, jika saya kira benar).

  • Pengontrol tidak mudah diinisialisasi dari kode bisnis, karena mereka sering memerlukan sejumlah informasi tentang permintaan HTTP dan konteksnya. Semua informasi ini diharapkan akan diteruskan oleh kerangka kerja MVC.

Lebih penting lagi, jika Anda memerlukan banyak hasil pencarian di dua pengontrol — yang menunjukkan hasil kepada pengguna akhir, yang lain menghasilkan statistik, cukup letakkan logika pencarian di lapisan bisnis Anda (di mana ia berada di tempat pertama, ngomong-ngomong), dan pertahankan pengendali sekecil mungkin.

Peran pengontrol, dalam MVC, adalah mengatur proses:

  • Dapatkan input yang relevan dari permintaan,
  • Mendelegasikan kepada validator tugas untuk memvalidasi / membersihkan input,
  • Sebut metode lapisan bisnis yang relevan,
  • Berikan kerangka kerja MVC model yang dihasilkan dan tampilan.

Peran pengontrol bukan untuk berurusan dengan logika bisnis.

Setelah kode dipindahkan ke lapisan bisnis, Anda kemudian dapat menyediakan antarmuka pencarian yang dapat digunakan kembali dengan cara yang jelas dan mudah, tidak seperti satu pengontrol yang digunakan dari yang lain.

Arseni Mourzenko
sumber
Hai, Terima kasih atas tanggapan Anda. Dengan asumsi bahwa saya memindahkan logika pencarian ke lapisan bisnis, di mana tempat terbaik untuk meletakkan antarmuka pencarian? Saya menggunakan Laravel.
IAmJulianAcosta
Sayangnya, saya belum pernah menggunakan Laravel. Selain itu, saya membayangkan bahwa jawabannya akan lebih tergantung pada arsitektur aplikasi Anda, daripada kerangka.
Arseni Mourzenko
Dengan asumsi Anda berada di bawah folder http tepat satu tingkat dengan proyek root Anda. Anda dapat membuat folder bernama kontrak di sini dan semua file Anda yang berfungsi sebagai antarmuka dapat Anda tempatkan di sini
Faris Rayhan