Pengontrol biasanya dibuat untuk sumber daya tertentu (kelas entitas, tabel dalam database), tetapi juga dapat dibuat untuk mengelompokkan tindakan bersama yang bertanggung jawab dengan bagian tertentu dari aplikasi. Dalam contoh Anda, itu akan menjadi pengontrol yang menangani keamanan untuk aplikasi:
class SecurityController
{
// can handle both the login page display and
// the login page submission
login();
logout();
register();
// optional: confirm account after registration
confirm();
// displays the forgot password page
forgotPassword();
// displays the reset password page
// and handle the form submission
resetPassword();
}
Catatan : jangan letakkan tindakan terkait keamanan dan tindakan profil pengguna di pengontrol yang sama; mungkin masuk akal karena terkait dengan pengguna, tetapi yang satu harus menangani otentikasi dan yang lain harus menangani email, nama, dll. pembaruan.
Dengan pengontrol yang dibuat untuk sumber daya (katakanlah Task
), Anda akan memiliki tindakan CRUD seperti biasa :
class TasksController
{
// usually displays a paginated list of tasks
index();
// displays a certain task, based on an identifier
show(id);
// displays page with form and
// handles form submission for creating
// new tasks
create();
// same as create(), but for changing records
update(id);
// displays confirmation message
// and handles submissions in case of confirmation
delete()
}
Tentu saja, Anda memiliki kemungkinan untuk menambahkan sumber daya terkait ke pengontrol yang sama. Katakan misalnya Anda memiliki entitas Business
, dan masing-masing memiliki beberapa BusinessService
entitas. Pengontrol untuk itu mungkin terlihat seperti ini:
class BusinessController
{
index();
show(id);
create();
update(id);
delete();
// display the business services for a certain business
listBusinessServices(businessId);
// displays a certain business service
showBusinessService(id);
// create a new business service for a certain business
createBusinessService(businessId);
// updates a certain business service
updateBusinessService(id);
// deletes a certain business service
deleteBusinessService(id);
}
Pendekatan ini masuk akal ketika entitas anak terkait tidak dapat ada tanpa entitas induk.
Ini adalah rekomendasi saya:
- membuat pengontrol berdasarkan pada sekelompok operasi terkait (menangani tanggung jawab tertentu seperti keamanan, atau operasi CRUD pada sumber daya dll.);
- untuk pengontrol berbasis sumber daya, jangan tambahkan tindakan yang tidak perlu (jika Anda tidak seharusnya memperbarui sumber daya, jangan tambahkan tindakan pembaruan);
- Anda dapat menambahkan tindakan "kustom" untuk menyederhanakan hal-hal (misalnya Anda memiliki
Subscription
entitas yang memiliki ketersediaan berdasarkan jumlah entri yang terbatas, Anda dapat menambahkan tindakan baru ke pengontrol yang bernama use()
yang memiliki tujuan tunggal untuk mengurangi satu entri dari Subscription
)
- sederhanakan hal-hal - jangan mengacaukan controller Anda dengan sejumlah besar tindakan dan logika kompleks, cobalah untuk menyederhanakan hal-hal dengan mengurangi jumlah aksi atau membuat dua controller;
- jika Anda menggunakan kerangka kerja terfokus MVC, ikuti panduan praktik terbaiknya (jika ada).
Beberapa sumber untuk dibaca lebih lanjut di sini .