เป็นวิธีปฏิบัติที่ดีในการเรียกใช้ฟังก์ชันคอนโทรลเลอร์จากคอนโทรลเลอร์อื่นหรือไม่?


23

ฉันมีกรณีที่ฉันจัดการกับตรรกะของการค้นหาในคอนโทรลเลอร์เดียวและฉันสร้างข้อมูลบางส่วนจากการค้นหาและกลับมาเป็นสถิติ

เป็นวิธีปฏิบัติที่ดีในการเรียกใช้ฟังก์ชันคอนโทรลเลอร์จากคอนโทรลเลอร์อื่นหรือไม่? หรือผู้ควบคุมสองคนไม่ควร 'คุย'

คำตอบ:


24

มันค่อนข้างแปลกแม้ว่าคำตอบจะขึ้นอยู่กับภาษา / กรอบงานที่คุณใช้เนื่องจากภาษา / กรอบงานต่าง ๆ มีวิธีการต่าง ๆ ของ MVC

โดยทั่วไปคุณจะไม่ใช้คอนโทรลเลอร์หนึ่งจากอีกอันหนึ่งตั้งแต่:

  • ตัวควบคุมมักจะส่งคืนผลลัพธ์ประเภทที่ต้องการใช้โดยกรอบงาน MVC ผลลัพธ์นี้มีข้อมูลจำนวนมากที่คุณไม่จำเป็นต้องใช้ (เช่นชื่อมุมมอง) และไม่ได้ทำให้ง่ายต่อการเข้าถึงข้อมูลที่คุณอาจสนใจ (ในกรณีของคุณ ถ้าฉันเดาถูก)

  • ตัวควบคุมไม่ใช่เรื่องง่ายในการเริ่มต้นจากรหัสธุรกิจเนื่องจากพวกเขามักต้องการข้อมูลจำนวนหนึ่งเกี่ยวกับคำขอ HTTP และบริบท ข้อมูลทั้งหมดนี้คาดว่าจะถูกส่งผ่านโดยกรอบ MVC

ที่สำคัญหากคุณต้องการพวงของผลการค้นหาในสองตัวควบคุมหนึ่งที่แสดงให้เห็นผลไปยังผู้ใช้ที่อีกคนหนึ่งซึ่งจะสร้างสถิติการใส่เพียงตรรกะการค้นหาในชั้นธุรกิจของคุณ (ที่มันเป็นในสถานที่แรก โดยวิธีการ) และทำให้ตัวควบคุมของคุณมีขนาดเล็กที่สุด

บทบาทของคอนโทรลเลอร์ใน MVC คือการประสานกระบวนการ:

  • รับข้อมูลที่เกี่ยวข้องจากคำขอ
  • มอบหมายให้ผู้ตรวจสอบความถูกต้องทำงานตรวจสอบ / ฆ่าเชื้ออินพุต
  • เรียกวิธีการที่เกี่ยวข้องของเลเยอร์ธุรกิจ
  • ให้กรอบ MVC กับโมเดลที่เป็นผลลัพธ์และมุมมอง

บทบาทของคอนโทรลเลอร์ไม่ได้เกี่ยวข้องกับตรรกะทางธุรกิจ

เมื่อโค้ดถูกย้ายไปยังเลเยอร์ธุรกิจจากนั้นคุณสามารถให้อินเทอร์เฟซการค้นหาซึ่งสามารถนำมาใช้ซ้ำได้อย่างชัดเจนตรงไปตรงมาซึ่งแตกต่างจากคอนโทรลเลอร์ที่ใช้จากอีกอันหนึ่ง


สวัสดีขอบคุณสำหรับคำตอบของคุณ สมมติว่าฉันย้ายตรรกะการค้นหาไปยังชั้นธุรกิจซึ่งเป็นวิธีที่ดีที่สุดในการวางอินเทอร์เฟซการค้นหา ฉันกำลังใช้ Laravel
IAmJulianAcosta

น่าเสียดายที่ฉันไม่เคยใช้ Laravel ยิ่งกว่านั้นฉันจินตนาการว่าคำตอบจะขึ้นอยู่กับสถาปัตยกรรมของแอปพลิเคชันของคุณมากกว่ากรอบงาน
Arseni Mourzenko

สมมติว่าคุณอยู่ภายใต้โฟลเดอร์ http ระดับเดียวกับโครงการรูทของคุณ คุณสามารถสร้างโฟลเดอร์ชื่อสัญญาที่นี่และไฟล์ทั้งหมดของคุณที่ทำหน้าที่เป็นอินเทอร์เฟซที่คุณสามารถทำได้ที่นี่
Faris Rayhan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.