ผู้ควบคุมควรส่งผ่านข้อมูลไปยังมุมมองในรูปแบบ MVC หรือไม่


11

ฉันทำงานกับ ASP.NET MVC (และการใช้งาน MVC บนเว็บอื่น ๆ ) ค่อนข้างบ่อย แต่นี่เป็นสิ่งที่ฉันไม่เคยแน่ใจ: คอนโทรลเลอร์และดูการสื่อสารควรหรือไม่

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

ฉันมีแนวทางที่ถูกต้องหรือเป็นกรณีที่ไม่มีคำตอบที่ถูกต้องหรือไม่ คำตอบเปลี่ยนไปเมื่อทำงานในเว็บกับสภาพแวดล้อมอื่น ๆ หรือไม่? คำตอบเปลี่ยนไปหรือไม่เมื่อคุณมีแนวคิดเกี่ยวกับมุมมองที่พิมพ์ออกมาอย่างรุนแรง (เช่นใน ASP.NET MVC) หรือไม่?


นี่คือสิ่งที่ "M" ใน "MVC" มีไว้สำหรับ - แบบจำลอง - ซึ่งแสดงถึงข้อมูลที่ถูกส่งผ่านจากคอนโทรลเลอร์ไปยังมุมมอง
Jay Sullivan

คำตอบ:


7

คอนโทรลเลอร์เตรียมข้อมูลซึ่งจะถูกส่งต่อไปยังมุมมองสำหรับการเรนเดอร์ / การแสดงผล นอกจากนี้ยังรับข้อมูลอินพุตของผู้ใช้ผ่านกลไกเผยแพร่ - สมัครสมาชิกหรือคล้ายกัน ลองดูแผนภาพแรกในWikipediaหรือเว็บไซต์ของ Martin Fowlerสำหรับข้อมูลเพิ่มเติมเกี่ยวกับ MVC

หากมุมมองคาดหวังว่าข้อมูลจากคอนโทรลเลอร์จะมีการเชื่อมโยงกันอย่างมีประสิทธิภาพเป็นคู่ (คอนโทรลเลอร์, มุมมอง)

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

คำตอบเปลี่ยนไปหรือไม่เมื่อคุณมีแนวคิดเกี่ยวกับมุมมองที่พิมพ์ออกมาอย่างรุนแรง (เช่นใน ASP.NET MVC) หรือไม่?

ไม่ว่าภาษาการเขียนโปรแกรมของคุณจะถูกพิมพ์อย่างรุนแรงหรือไม่ก็ไม่มีผลต่อวิธีการจัดระเบียบแอปพลิเคชันของคุณ


มีการเตรียมข้อมูลและส่งผ่านข้อมูลประเภทใด ยกตัวอย่างง่ายๆ: แสดงบทความโดยใช้ ID มันเป็นรหัสที่ส่งผ่านหลังจากการตรวจสอบ (มันอาจไม่ชี้ไปที่บทความ) หรือว่าผู้ควบคุมได้รับบทความจากฐานข้อมูลและส่งผ่านหรือไม่
Andy Hunt

หากคุณผ่าน ID เท่านั้นมุมมองของคุณจะไม่ทำงานมากกว่าการแสดงผล มันจะต้องดึงข้อมูลที่อาจไม่อยู่ในจิตวิญญาณของรูปแบบ
Rig

1

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

ครั้งแรกระบุว่าตัวควบคุมอาจปรับปรุงมุมมองตามรูปแบบต่อไปนี้ มันฟังทั้งเหตุการณ์ GUI และโมเดล เมื่อมีเหตุการณ์ GUI เกิดขึ้นจะเรียกใช้การดำเนินการที่จำเป็นในโมเดลซึ่งจะเปิดไฟและเหตุการณ์ ตอนนี้คอนโทรลเลอร์จะอัพเดตมุมมองด้วยข้อมูลที่ต้องการ

วิธีที่สองระบุว่ามุมมองนั้นกำลังฟังเหตุการณ์โมเดลและอัพเดตตัวเองด้วยข้อมูลที่แนบกับเหตุการณ์หรือโดยการสอบถามโมเดล

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

ในวินาทีที่คุณแยกชิ้นส่วนออกจากกัน แต่มุมมองของคุณคือการควบคุมตัวเองในบางลักษณะ

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