Denetleyiciler genellikle belirli bir kaynak (varlık sınıfı, veritabanındaki tablo) için oluşturulur, ancak uygulamanın belirli bir bölümünden sorumlu eylemleri gruplandırmak için de oluşturulabilir. Örneklerinizde bu, uygulamanın güvenliğini işleyen bir denetleyici olacaktır:
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();
}
Not : güvenlikle ilgili eylemleri ve kullanıcı profili eylemlerini aynı denetleyiciye koymayın; kullanıcı ile ilgili oldukları için mantıklı olabilir, ancak biri kimlik doğrulaması, diğeri ise e-posta, ad vb. güncellemeleri işlemelidir.
Kaynaklar için oluşturulmuş denetleyicilerle (diyelim ki Task
), olağan CRUD eylemleriniz olur:
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()
}
Tabii ki, aynı denetleyiciye ilgili kaynakları ekleme olanağınız vardır. Örneğin, varlığa sahip olduğunuzu Business
ve her birinin birkaç BusinessService
varlığı olduğunu varsayalım. Bunun için bir denetleyici şöyle görünebilir:
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);
}
Bu yaklaşım, ilgili çocuk varlıkları ana varlık olmadan var olamazlarsa mantıklıdır.
Bunlar benim önerilerim:
- bir grup ilgili operasyona dayalı kontrolörler oluşturmak (güvenlik veya kaynaklar üzerindeki CRUD operasyonları gibi belirli sorumlulukları ele almak);
- kaynak tabanlı denetleyiciler için gereksiz eylemler eklemeyin (kaynağı güncellemeniz gerekmiyorsa, güncelleme eylemini eklemeyin);
- Bir şeyleri basitleştirmek için "özel" eylemler ekleyebilir (örneğin bir var
Subscription
girişlerin sınırlı sayıda dayalı bir sisteme sahiptir varlık, adlı denetleyiciye yeni bir eylem ekleyebilir use()
itibaren bir girdiyi çıkarılarak tek bir amacı vardır Subscription
)
- işleri basit tutun - denetleyicinizi çok sayıda eylem ve karmaşık mantıkla karıştırmayın, eylem sayısını azaltarak veya iki denetleyici yaparak işleri basitleştirmeye çalışın;
- MVC odaklı bir çerçeve kullanıyorsanız, en iyi uygulama yönergelerini uygulayın (varsa).
Burada daha fazla okumak için bazı kaynaklar .