ในความคิดของฉันมี MVC สองประเภท - บริสุทธิ์และไม่บริสุทธิ์ (สำหรับการขาดคำดีกว่า :)
MVC บริสุทธิ์คือสิ่งที่นำมาพูดคุยเล็กน้อย:
สิ่งนี้มีไว้สำหรับการใช้งานคอมพิวเตอร์ส่วนบุคคล / เดสก์ท็อป อย่างที่คุณเห็นโมเดลจะแจ้งมุมมองของการอัพเดต / การเปลี่ยนแปลงใด ๆ ที่เกิดขึ้น ไม่เช่นนั้นด้วย (ไม่บริสุทธิ์) MVC
MVC อื่น ๆ (ไม่บริสุทธิ์) ที่ถูกขนานนามว่าใช้กับเว็บแอปพลิเคชันนั้นเป็นรูปแบบ PAC ( การนำเสนอการควบคุมการนำเสนอที่เป็นนามธรรม ) มากกว่า MVC แบบดั้งเดิมด้านบน นั่นเป็นเรื่องของการจัดระเบียบรหัสและการแยกข้อกังวล:
- รุ่น : นามธรรมสำหรับข้อมูลที่เก็บไว้
- การควบคุม : โดยทั่วไปสิ่งที่เรียกว่าเลเยอร์ตรรกะทางธุรกิจรวมถึงส่วนหนึ่งของแอปพลิเคชันที่รับผิดชอบในการกำหนดเส้นทางคำขอ HTTP ไปยังตรรกะทางธุรกิจที่เกี่ยวข้อง (ตัวควบคุม aka)
- มุมมอง : ส่วนใหญ่ดูเทมเพลตที่จัดรูปแบบข้อมูลจากโมเดลและส่งคืนไปยังไคลเอ็นต์ โมเดลไม่เคยส่งการอัปเดตไปยังมุมมองและมุมมอง 'สมัครสมาชิก' สำหรับการอัปเดตจากโมเดล มันจะเป็นฝันร้ายที่มีเพศสัมพันธ์ ดังนั้นมันจึงเหมือนกับ PAC มากกว่า MVC จริง
ต่อไปนี้เป็นวิธีที่โครงสร้างเว็บแอปพลิเคชันมักจะ:
- Front-end : MVC บนไคลเอนต์ที่ใช้เฟรมเวิร์กเป็น Backbone.js เป็นต้นนี่คือรูปแบบ MVC ที่ 'จริง' ในสาระสำคัญ
- แบ็คเอนด์ : อีกครั้งคุณมี (ไม่บริสุทธิ์) MVC / PAC สำหรับการจัดระเบียบรหัสและการแยกข้อกังวล
- เว็บแอปทั่วโลก (สำหรับเว็บแอปพลิเคชันโดยรวม): หากคุณมีแบ็กเอนด์ RESTful ที่ส่งคืนข้อมูล JSON เท่านั้นแบ็กเอนด์ทั้งหมดของคุณจะถูกรับรู้เป็นแบบจำลองสำหรับแอปพลิเคชันไคลเอนต์ Front-end
ดังนั้นข้อเสียของ MVCคืออะไร รูปแบบได้รับการทดสอบเวลาดังนั้นจึงมีไม่มากนักที่สำคัญกว่านั้นทั้งหมดคือ 'ซับซ้อน' คุณจะเห็นว่า MVC เป็นรูปแบบผสม - ใช้กลยุทธ์ / ผู้สังเกตการณ์รูปแบบและทั้งหมดถูกจัดเรียงอย่างดีเพื่อสร้างรูปแบบระดับสูง
คุณควรใช้มันทุกที่หรือไม่? อาจจะไม่. เว็บแอปพลิเคชั่นที่ซับซ้อนมากอาจแบ่งเป็นหลายเลเยอร์! คุณอาจไม่สามารถออกไปได้ด้วยเลเยอร์ View / Business Logic / Data กรอบ / องค์กรที่ครอบคลุมอาจยังคงเป็น MVC-ish แต่เฉพาะในระดับมหภาค
นี่คือตัวอย่างที่ MVC อาจเป็นตัวเลือกที่ไม่ดี : ลองออกแบบระบบควบคุมการจราจรทางอากาศหรือแอปพลิเคชันประมวลผลสินเชื่อ / จำนองสำหรับธนาคารขนาดใหญ่ - เพียง MVC ด้วยตัวเองจะเป็นตัวเลือกที่ไม่ดี คุณจะต้องมี Event Bus / คิวข้อความอย่างหลีกเลี่ยงไม่ได้พร้อมกับสถาปัตยกรรมหลายชั้นที่มี MVC ภายในแต่ละเลเยอร์และอาจเป็นการออกแบบ MVC / PAC ที่ครอบคลุมเพื่อให้การจัดระเบียบโค้ดดีขึ้น