มีคำตอบมากมายสำหรับคำถามนี้ แต่ฉันรู้สึกว่ามีความต้องการคำตอบง่ายๆจริงๆเปรียบเทียบได้อย่างชัดเจน นี่คือการสนทนาที่ฉันทำขึ้นเมื่อผู้ใช้ค้นหาชื่อภาพยนตร์ในแอป MVP และ MVC:
ผู้ใช้: คลิกคลิก ...
View : นั่นใคร [ MVP | MVC ]
ผู้ใช้: ฉันเพิ่งคลิกที่ปุ่มค้นหา ...
ดู : โอเครอสักครู่…. [ MVP | MVC ]
( ดูการเรียกPresenter | Controller …) [ MVP | MVC ]
ดู : Hey Presenter | ผู้ควบคุมผู้ใช้เพิ่งคลิกที่ปุ่มค้นหาฉันต้องทำอย่างไร [ MVP | MVC ]
ผู้นำเสนอ | ผู้ควบคุม : เฮ้ดูมีคำค้นหาใดในหน้านั้นบ้าง [ MVP | MVC ]
ดู : ใช่…นี่คือ…“ เปียโน” [ MVP | MVC ]
ผู้นำเสนอ : ขอบคุณที่ดู …ในขณะที่ฉันกำลังค้นหาข้อความค้นหาในโมเดลโปรดแสดงแถบความคืบหน้าของเขา / เธอ [ MVP | MVC ]
( ผู้นำเสนอ | คอนโทรลเลอร์กำลังเรียกใช้โมเดล ... ) [ MVP | MVC ]
ผู้นำเสนอ | ตัวควบคุม : เฮ้โมเดลคุณมีอะไรที่ตรงกับคำค้นหานี้หรือไม่:“ piano” [ MVP | MVC ]
รุ่น : Hey Presenter | คอนโทรลเลอร์ให้ฉันตรวจสอบ ... [ MVP | MVC ]
( Modelกำลังสร้างการสืบค้นไปยังฐานข้อมูลภาพยนตร์ ... ) [ MVP | MVC ]
(หลังจากนั้นครู่หนึ่ง ... )
-------------- นี่คือจุดเริ่มต้นที่ MVP และ MVC แตกต่าง ---------------
แบบจำลอง : ฉันพบรายการสำหรับคุณPresenterที่นี่อยู่ใน JSON“ [{"ชื่อ": "อาจารย์สอนเปียโน", "ปี": 2001}, {"ชื่อ": "เปียโน", "ปี": 1993} ]” [ MVP ]
รุ่น : มีผลบางอย่างที่มีอยู่ควบคุม ฉันสร้างตัวแปรฟิลด์ในอินสแตนซ์ของฉันและเติมด้วยผลลัพธ์ ชื่อของมันคือ "searchResultsList" [ MVC ]
( Presenter | ControllerขอบคุณModelและกลับไปที่View ) [ MVP | MVC ]
ผู้นำเสนอ : ขอบคุณที่รอดูฉันพบรายการผลลัพธ์ที่ตรงกันสำหรับคุณและจัดเรียงในรูปแบบที่ทำได้: ["Piano Teacher 2001", "Piano 1993"] โปรดแสดงให้ผู้ใช้เห็นในรายการแนวตั้ง นอกจากนี้โปรดซ่อนแถบความคืบหน้าในขณะนี้ [ MVP ]
ผู้ควบคุม : ขอบคุณที่รอดูฉันได้ถามรุ่นเกี่ยวกับคำค้นหาของคุณ มันบอกว่าพบรายการผลลัพธ์ที่ตรงกันและเก็บไว้ในตัวแปรชื่อ "searchResultsList" ภายในอินสแตนซ์ของมัน คุณสามารถรับได้จากที่นั่น นอกจากนี้โปรดซ่อนแถบความคืบหน้าในขณะนี้ [ MVC ]
ดู : ขอบคุณPresenterมาก[ MVP ]
ดู : ขอบคุณ "ผู้ควบคุม" [ MVC ] (ตอนนี้มุมมองกำลังตั้งคำถามตัวเอง: ฉันจะนำเสนอผลลัพธ์ที่ฉันได้รับจากตัวแบบให้ผู้ใช้ได้อย่างไรปีการผลิตของภาพยนตร์เรื่องนี้มาเป็นอันดับแรกหรือครั้งสุดท้าย ... อยู่ในรายการแนวตั้งหรือแนวนอน? ... )
ในกรณีที่คุณสนใจฉันได้รับการเขียนบทความที่เกี่ยวข้องกับแอปรูปแบบสถาปัตยกรรม (MVC, MVP, MVVP สถาปัตยกรรมสะอาด, ... ) พร้อมด้วย Github repo ที่นี่ แม้ว่าตัวอย่างจะถูกเขียนขึ้นสำหรับ Android หลักการพื้นฐานที่สามารถนำไปใช้กับสื่อใด ๆ