อะไรคือความแตกต่างระหว่างคอนโทรลเลอร์ใน MVC และ ViewModel ใน MVVM


21

ฉันไม่เห็นความแตกต่างระหว่าง MVC และ MVVM อย่างชัดเจน ฉันรู้สึกว่า Command ใน ViewModel นั้นเหมือนกับวิธี Action ใน Controller และทั้ง Controller และ ViewModel จะแจ้งเตือนให้ View ทำการรีเฟรชตัวเองหลังจากแก้ไขสถานะของ Model ผ่าน Data Binding ความแตกต่างที่สำคัญระหว่างสองรูปแบบคืออะไร?

คำตอบ:


25

คอนโทรลเลอร์และ ViewModel แตกต่างกันไปในหลายวิธี

ใน MVC ผู้ควบคุมรู้ถึงมุมมองสามารถเปลี่ยนมุมมองได้ นอกจากนี้ยังรู้จักโมเดลและสามารถเรียกใช้ได้ ใน MVVM ViewModel เป็นการแสดงนามธรรมของมุมมองและไม่รู้จัก UI ที่เป็นรูปธรรมมันจะล้อมรอบโมเดลในทางที่จะสามารถแสดงผลได้ตามต้องการ

ใน MVC แบบคลาสสิกคอนโทรลเลอร์เป็นเพียงกลยุทธ์ของ View ในการโต้ตอบกับ Model ในความเป็นจริงบางครั้งคอนโทรลเลอร์ไม่จำเป็นด้วยซ้ำ ใน MVVM คุณไม่จำเป็นต้องใช้เพราะคุณสามารถมี ViewModels ที่แตกต่างกันสำหรับมุมมองเดียวกันหากคุณต้องการพฤติกรรมที่แตกต่างกัน ใน MVC คุณอาจมีตัวอย่างเช่น ReadOnlyController หรือ AdminController เพื่อสื่อสารกับ Model ใน MVVM คุณสามารถมี ViewModels สองรายการและคุณเลือก ViewModels ที่คุณต้องการ

แต่พวกเขามีความคล้ายคลึงกัน ในรูปแบบที่ทั้งสองดูเป็นผู้สังเกตการณ์ ใน MVC แบบคลาสสิกมุมมองเป็นผู้สังเกตการณ์ของโมเดลใน MVVM เป็นผู้สังเกตการณ์ของ ViewModel

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

คุณอาจพบคำตอบของฉันสำหรับคำถามที่คล้ายกันนี้เป็นประโยชน์

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


คุณไม่คิดว่าสถาปัตยกรรมมุมมองแบบจำลองเหล่านี้เป็นที่เข้าใจกันดีที่สุดโดยผู้ใช้งาน ฉันเชื่อว่ามันเป็นเรื่องของทางเลือกสำหรับนักพัฒนา หนึ่งเลือก MVC หรือ MVVM ขึ้นอยู่กับว่าเขาต้องการสิ่งที่เป็นนามธรรมเกี่ยวกับมุมมองที่มีหัวเล็กน้อย (ในกรณี MVVM)
Pankaj Upadhyay

@Pankaj Upadhyay: อันไหนที่คุณควรใช้นั้นขึ้นอยู่กับความต้องการและทางเลือกของเทคโนโลยีและความเป็นไปได้ของแพลตฟอร์มของคุณ
Falcon

ฉันเชื่อว่าสถาปัตยกรรม MVC นั้นดีพอสำหรับทุกสิ่ง แต่อาจเป็นเพราะฉันไม่ได้ประสบปัญหาที่จำเป็นต้องใช้ MVVM เป็นพิเศษ IMO คุณต้องควบคุมมุมมองอย่างแน่นอนเพราะการทำให้หลวมจะทำให้ข้อผิดพลาดเพิ่มขึ้นในการอัพเกรดในอนาคต
Pankaj Upadhyay

1
@Pankaj Upadhyay: หากคุณต้องการใช้ตรรกะเดียวกันสำหรับเทคโนโลยี UI ที่หลากหลาย MVP นั้นเหนือกว่า ฉันไม่คิดว่าคุณจำเป็นต้องมีการควบคุมมุมมอง มันสามารถเป็นอิสระอย่างสมบูรณ์และคุณสามารถทดสอบ ViewModels ได้เช่นกัน - ถ้าไม่ดีขึ้น การแยกที่ดีขึ้นยังเป็นประโยชน์ต่อนักออกแบบเนื่องจากสามารถแบ่งพาร์ติชันของโครงการได้ดีกว่า
Falcon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.