หมายเหตุ: โรเบิร์ตซีมาร์ติน (aka ลุงบ๊อบ) อธิบายเรื่องนี้ในทางที่ดีขึ้นและมีอารมณ์ขันในประเด็นสำคัญของเขา, สถาปัตยกรรมที่หายไปปี ค่อนข้างยาว แต่สอนแนวคิดที่ดีมากมาย
tl; dr: อย่าคิดและวางแผนแอปของคุณในแง่ของ MVC กรอบ MVC เป็นเพียงรายละเอียดการใช้งาน
สิ่งที่สับสนมากที่สุดเกี่ยวกับ MVC คือนักพัฒนาพยายามที่จะใช้ส่วนประกอบทั้งหมดที่ติดกัน
ลองคิดในแง่ของโปรแกรมไม่ใช่ในแง่ของกรอบ
โปรแกรมของคุณมีจุดประสงค์ ต้องใช้ข้อมูลบางอย่างทำสิ่งต่าง ๆ ด้วยข้อมูลและส่งคืนข้อมูลบางส่วน
วิธีcontroller
นี้เป็นกลไกการส่งมอบโปรแกรมของคุณ
- ผู้ใช้ส่งคำขอไปยังโปรแกรมของคุณ (สมมติว่าเพิ่มผลิตภัณฑ์ในตะกร้าสินค้า)
- คอนโทรลเลอร์จะรับคำขอนั้น (ข้อมูลผลิตภัณฑ์และข้อมูลผู้ใช้) ซึ่งจะเรียกส่วนที่จำเป็นของโปรแกรมของคุณที่จะจัดการกับคำขอนี้
$user->addToCart($product)
- โปรแกรมของคุณ (
addToCart
ฟังก์ชั่นของuser
วัตถุในกรณีนี้) ทำงานตามที่ตั้งใจไว้และส่งคืนการตอบกลับ (สมมติว่าsuccess
)
- คอนโทรลเลอร์เตรียมการตอบสนองโดยใช้สิ่งที่เกี่ยวข้อง
view
: เช่น ในวัตถุตัวควบคุม$this->render($cartView('success')
วิธีนี้ผู้ควบคุมจะแยกออกจากโปรแกรมและใช้เป็นกลไกการส่งมอบ พวกเขาไม่รู้ว่าโปรแกรมของคุณทำงานอย่างไรพวกเขาเพิ่งรู้ว่าส่วนใดของโปรแกรมที่ต้องถูกเรียกใช้สำหรับการร้องขอ
หากคุณต้องการใช้เฟรมเวิร์กอื่นแอพของคุณไม่ต้องการการเปลี่ยนแปลงคุณเพียงแค่ต้องเขียนตัวควบคุมที่เกี่ยวข้องเพื่อเรียกโปรแกรมของคุณเพื่อขอ
หรือหากคุณต้องการสร้างเวอร์ชันเดสก์ท็อปแอปของคุณจะยังคงเหมือนเดิมคุณเพียงแค่ต้องเตรียมกลไกการจัดส่ง
และที่Model
สำคัญ คิดว่ามันเป็นกลไกการติดตา
ในวิธี OO มีวัตถุในโปรแกรมของคุณที่เก็บข้อมูล
class User {
//...
private $id;
private $shoppingCart;
//...
}
class Product {
//...
private $id;
//...
}
เมื่อคุณเพิ่มสินค้าลงในตะกร้าช้อปปิ้งที่คุณสามารถเพิ่มที่ไปproduct::id
user::shoppingCart
และเมื่อคุณต้องการยืนยันข้อมูลคุณสามารถใช้model
ส่วนของกรอบงานซึ่งโดยทั่วไปประกอบด้วยการใช้ ORM เพื่อแมปคลาสกับตารางฐานข้อมูล
หากคุณต้องการเปลี่ยน ORM ที่คุณใช้โปรแกรมของคุณจะยังคงเหมือนเดิมเฉพาะข้อมูลการแมปเท่านั้นที่จะเปลี่ยน หรือถ้าคุณต้องการหลีกเลี่ยงฐานข้อมูลทั้งหมดเข้าด้วยกันคุณสามารถเขียนข้อมูลลงในไฟล์ข้อความล้วนและแอพของคุณจะยังคงเหมือนเดิม
ดังนั้นเขียนโปรแกรมของคุณก่อน หากคุณเขียนโปรแกรมด้วยวิธี 'OO' ให้ใช้วัตถุเก่าแบบธรรมดาของภาษา อย่าคิดในแง่ของ MVC ในตอนแรก