ใครช่วยอธิบายหน่อยได้ไหมว่าความแตกต่างระหว่าง Django กับรูปแบบ Model View Controller
ตามหน้าที่แล้วเราคาดหวังอะไรจากความแตกต่างเหล่านั้นนั่นคือสิ่งที่ทำงานแตกต่างกันเมื่อเปรียบเทียบ Django กับตัวอย่างเช่น Ruby on Rails
ใครช่วยอธิบายหน่อยได้ไหมว่าความแตกต่างระหว่าง Django กับรูปแบบ Model View Controller
ตามหน้าที่แล้วเราคาดหวังอะไรจากความแตกต่างเหล่านั้นนั่นคือสิ่งที่ทำงานแตกต่างกันเมื่อเปรียบเทียบ Django กับตัวอย่างเช่น Ruby on Rails
คำตอบ:
ตามDjango Book Django ติดตามรูปแบบ MVC อย่างใกล้ชิดมากพอที่จะเรียกว่าเฟรมเวิร์ก MVC
Django ถูกเรียกว่าเป็นเฟรมเวิร์ก MTV เนื่องจากคอนโทรลเลอร์ได้รับการจัดการโดยเฟรมเวิร์กเองและความตื่นเต้นส่วนใหญ่เกิดขึ้นในโมเดลเทมเพลตและมุมมอง
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับ MTV / MVC ได้ที่นี่:
ถ้าคุณคุ้นเคยกับกรอบ MVC เว็บการพัฒนาอื่น ๆ เช่น Ruby on Rails คุณอาจพิจารณามุมมอง Django จะเป็นตัวควบคุมและแม่ Django จะเป็นมุมมอง
นี่เป็นความสับสนที่น่าเสียดายที่เกิดจากการตีความ MVC ที่แตกต่างกัน
ในการตีความ MVC ของ Django มุมมองจะ อธิบายถึงข้อมูลที่นำเสนอต่อผู้ใช้ ไม่จำเป็นต้องเป็นเพียงลักษณะของข้อมูล แต่เป็นข้อมูลที่นำเสนอ
ในทางตรงกันข้าม Ruby on Rails และเฟรมเวิร์กที่คล้ายกันแนะนำว่างานของคอนโทรลเลอร์นั้นรวมถึงการตัดสินใจว่าจะนำเสนอข้อมูลใดให้กับผู้ใช้ในขณะที่มุมมองเป็นลักษณะของข้อมูลอย่างเคร่งครัดไม่ใช่ข้อมูลที่จะถูกนำเสนอ
คำถามที่พบบ่อยของ Django เป็นจุดเริ่มต้นที่ดี:
ในการตีความ MVC ของเรา "มุมมอง" อธิบายถึงข้อมูลที่นำเสนอต่อผู้ใช้ ไม่จำเป็นว่าข้อมูลจะมีลักษณะอย่างไร แต่จะนำเสนอข้อมูลใด ข้อมูลพร็อพเพอร์ตี้จะอธิบายว่าคุณเห็นข้อมูลใดไม่ใช่ข้อมูลที่คุณเห็น มันเป็นความแตกต่างที่ลึกซึ้ง
...
นอกจากนี้ควรแยกเนื้อหาออกจากการนำเสนอซึ่งเป็นที่มาของเทมเพลตใน Django "มุมมอง" จะอธิบายว่าข้อมูลใดถูกนำเสนอ แต่โดยปกติมุมมองจะมอบสิทธิ์ให้กับเทมเพลตซึ่งจะอธิบายถึงวิธีการนำเสนอข้อมูล
แล้ว“ คอนโทรลเลอร์” อยู่ตรงไหน? ในกรณีของ Django อาจเป็นกรอบงานเอง: เครื่องจักรที่ส่งคำขอไปยังมุมมองที่เหมาะสมตามการกำหนดค่า URL ของ Django
หากคุณหิวกับคำย่อคุณอาจพูดได้ว่า Django เป็นเฟรมเวิร์ก "MTV" นั่นคือ "โมเดล" "เทมเพลต" และ "มุมมอง" รายละเอียดดังกล่าวมีความหมายมากกว่านั้น
โปรดจำไว้ว่า "Model View Controller" เป็นเพียงรูปแบบเท่านั้นกล่าวคือความพยายามที่จะอธิบายสถาปัตยกรรมทั่วไป ดังนั้นคำถามที่ดีกว่าคือ“ Django เหมาะกับรูปแบบ Model View Controller ได้ดีแค่ไหน?”
เมื่อคุณเขียนโค้ดโดยไม่คิดเกี่ยวกับชื่อของเฟรมเวิร์กจะไม่มีความแตกต่างที่ชัดเจนระหว่าง RoR แต่มันขึ้นอยู่กับการใช้งานที่คุณให้models
เนื่องจากบน Django พวกเขามีตรรกะบางอย่างที่ง่ายในกรอบงานอื่น ๆ จะอยู่ในระดับคอนโทรลเลอร์
view
ใน Django มีแนวโน้มที่จะเป็นชุดของคำสั่งสำหรับการเรียกข้อมูลและผ่านไปยังแม่แบบ
views
ใน Django เป็นสิ่งที่เหมือนcontroller
ใน MVC และtemplate
ใน Django มีแนวโน้มมากกว่า aviews
ใน mvt คำขอไปยัง URL จะถูกส่งไปยัง View View นี้เรียกเข้าสู่ Model ดำเนินการปรับแต่งและเตรียมข้อมูลสำหรับเอาต์พุต ข้อมูลจะถูกส่งไปยังเทมเพลตที่แสดงผลเป็นการตอบกลับ ตามหลักการแล้วในเว็บเฟรมเวิร์กตัวควบคุมจะถูกซ่อนจากมุมมอง
นี่คือจุดที่แตกต่างจาก MVC: ใน mvc ผู้ใช้โต้ตอบกับ gui คอนโทรลเลอร์จะจัดการกับคำขอและแจ้งโมเดลและมุมมองจะสอบถามโมเดลเพื่อแสดงผลลัพธ์ให้กับผู้ใช้