โดยปกติแล้วตัวควบคุมจะถูกสร้างขึ้นสำหรับทรัพยากรบางอย่าง (คลาสเอนทิตี, ตารางในฐานข้อมูล) แต่ยังสามารถสร้างขึ้นเพื่อจัดกลุ่มการดำเนินการร่วมกันที่รับผิดชอบกับส่วนหนึ่งของแอปพลิเคชัน ในตัวอย่างของคุณนั่นจะเป็นตัวควบคุม aa ที่จัดการความปลอดภัยสำหรับแอปพลิเคชัน:
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();
}
หมายเหตุ : อย่าใส่การดำเนินการที่เกี่ยวข้องกับความปลอดภัยและการกระทำของโพรไฟล์ผู้ใช้ในตัวควบคุมเดียวกัน มันอาจสมเหตุสมผลเนื่องจากเกี่ยวข้องกับผู้ใช้ แต่ควรจัดการการรับรองความถูกต้องและอื่น ๆ ควรจัดการอีเมลชื่อ ฯลฯ การปรับปรุง
ด้วยตัวควบคุมที่สร้างขึ้นสำหรับทรัพยากร (สมมติว่าTask
) คุณจะมีการกระทำCRUDตามปกติ:
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()
}
แน่นอนคุณมีความเป็นไปได้ที่จะเพิ่มทรัพยากรที่เกี่ยวข้องลงในคอนโทรลเลอร์เดียวกัน พูดเช่นคุณมีเอนทิตีBusiness
และแต่ละอันมีBusinessService
เอนทิตีหลายแห่ง ตัวควบคุมอาจมีลักษณะเช่นนี้:
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);
}
วิธีการนี้เหมาะสมเมื่อเอนทิตีลูกที่เกี่ยวข้องไม่สามารถอยู่ได้หากไม่มีเอนทิตีหลัก
นี่คือคำแนะนำของฉัน:
- สร้างตัวควบคุมขึ้นอยู่กับกลุ่มของการดำเนินงานที่เกี่ยวข้อง (การจัดการความรับผิดชอบบางอย่างเช่นการรักษาความปลอดภัยหรือการดำเนินงาน CRUD ในทรัพยากร ฯลฯ );
- สำหรับตัวควบคุมที่ใช้ทรัพยากรอย่าเพิ่มการกระทำที่ไม่จำเป็น (หากคุณไม่ควรอัปเดตทรัพยากรไม่ต้องเพิ่มการดำเนินการอัปเดต)
- คุณสามารถเพิ่มการกระทำ "กำหนดเอง" เพื่อลดความซับซ้อนของสิ่งที่ (เช่นคุณมี
Subscription
หน่วยงานที่มีความพร้อมใช้งานขึ้นอยู่กับจำนวนที่ จำกัด ของรายการที่คุณสามารถเพิ่มการกระทำใหม่ไปยังตัวควบคุมที่มีชื่อuse()
ที่มีวัตถุประสงค์เดียวในการลบหนึ่งรายการจากSubscription
)
- ทำให้สิ่งต่าง ๆ เป็นเรื่องง่าย - อย่าถ่วงตัวควบคุมของคุณด้วยการกระทำจำนวนมากและตรรกะที่ซับซ้อนพยายามทำให้สิ่งต่าง ๆ ง่ายขึ้นโดยลดจำนวนการกระทำหรือทำให้ตัวควบคุมสองตัว
- หากคุณกำลังใช้เฟรมเวิร์กที่เน้น MVC ให้ทำตามแนวทางปฏิบัติที่ดีที่สุด (ถ้ามี)
แหล่งข้อมูลสำหรับการอ่านเพิ่มเติมที่นี่