โมเดล-วิว-คอนโทรลเลอร์

Model-View-Controller (MVC) คือ สถาปัตยกรรมซอฟต์แวร์ชนิดหนึ่ง ซึ่งในขณะนี้ถือว่าเป็นแบบแผนสถาปัตยกรรม (architectural pattern) ที่ใช้ในสาขาวิศวกรรมซอร์ฟแวร์ รูปแบบ MVC ใช้เพื่อแยกส่วนซอฟต์แวร์ในส่วน ตรรกะเนื้อหา (domain logic) ได้แก่ความเข้าใจในระบบของผู้ใช้ และส่วนการป้อนข้อมูลและแสดงผล (GUI) ซึ่งช่วยให้การพัฒนา การทดสอบ และการดูแลรักษาซอฟต์แวร์ แยกออกจากกัน

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

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

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

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

แอปพลิเคชันที่ใช้ MVC อาจจะเป็นกลุ่มของ โมเดล/วิว/คอนโทรลเลอร์ โดยแต่ละกลุ่มใช้ในงานต่างกันไป

MVC มักจะพบได้ในเว็บแอปพลิเคชันโดย วิว จะเป็น HTML หรือ XHTML ที่สร้างโดยแอปพลิเคชันนั้น ส่วนคอนโทรลเลอร์รับค่า GET หรือ POST เข้ามา 
แล้วเลือกติดต่อกับโมเดลในส่วนที่เกี่ยวข้องเพื่อตอบสนอง โมเดลซึ่งมี business rules จะทำการจัดการตามคำร้องขอนั้นๆ

ประวัติ 

MVC ได้ถูกอธิบายครั้งแรกในปีคศ. 1979  โดย Trygve Reenskaug ซึ่งในระหว่างนั้นได้ทำงานเกี่ยวกับภาษา Smalltalk ที่บริษัท Xerox PARC. การนำไปใช้แบบดั้งเดิม ได้ถูกอธิบายอย่างละเอียดในเปเปอร์ที่สำคัญชื่อ "Applications Programming in Smalltalk-80: How to use Model–View–Controller".

หลังจากนั้นได้มีรูปแบบของ MVC แยกย่อยออกมาหลายแบบด้วยกัน ตัวอย่างเช่น  Model View Presenter ถูกนำไปใช้ใน .NET Framework แต่ MVC แบบมาตรฐานก็ยังคงเป็นที่นิยมอยู่

Overview 

แม้ว่า MVC จะมีรูปแบบต่างกันไป แต่ control flow มันจะเป็นดังนี้:
 ผู้ใช้ทำการตอบโต้ กับ user interface ในทางใดทางหนึ่ง (ยกตัวอย่างเช่น กดปุ่มเมาส์)
 คอนโทรลเลอร์ จัดการ event ที่เกิดขึ้นจาก user interface มักจะโดย handler ที่ได้สร้างเอาไว้ หรือ callback แล้วแปลง event เป็นการกระทำของผู้ใช้ที่เหมาะสม ซึ่งเข้าใจได้ด้วยโมเดล
 คอนโทรลเลอร์ แจ้งโมเดลถึงการกระทำของผู้ใช้ เช่นอาจจะทำให้เกิดการเปลี่ยนสถานะในโมเดล (ยกตัวอย่างเช่น คอนโทรลเลอร์ปรับปรุงตะกร้าสินค้าของผู้ใช้)
 วิว ถามโมเดลเพื่อที่จะสร้างการแสดงผลที่เหมาะสมแก่ผู้ใช้ (ยกตัวอย่างเช่น วิวแสดงรายการสินค้าในตะกร้าสินค้า) โดยวิวได้ข้อมูลมาจากโมเดล ในบางรุปแบบของ MVC คอนโทรลเลอร์อาจจะให้คำสั่งแก่วิวด้วย หรือบางรูปแบบ วิวจะได้รับการบอกจากโมเดลถึงการเปลี่ยนแปลง
 user interface รอการปฏิสัมพันธ์จากผู้ใช้ ซึ่งจะกลับเข้าสู่วงจรในขั้นแรก

ในบางรูปแบบของ MVC เช่นใน W3C XForms  ใช้หลักการของ dependency graph เพื่อให้เกิดการปรับปรุงวิวโดยอัติโนมัติ เมื่อข้อมูลในโมเดลเปลี่ยนแปลง

ด้วยการแยกโมเดลและวิวออกจากกัน MVC ช่วยให้ความซับซ้อนในการออกแบบลดลง และเพิ่มความคล่องตัวและการนำโค้ดกลับมาใช้ใหม่ (Code reuse)

อ้างอิง 

วิศวกรรมซอฟต์แวร์