2009-08-23 32 views
48

Ai đó có thể giải thích một cách đơn giản nhất có thể mô hình Trình xem mô hình xem không? Sự khác nhau với Trình điều khiển Chế độ xem Mô hình là gì? Điều gì là tốt nhất hoặc cho mục đích nào?Trình xem chế độ xem mô hình là gì?

Trả lời

28

Martin Fowler có một trang trên các mẫu thiết kế giao diện người dùng, trong đó ông định nghĩa và sau đó nói về MVC, MVP và các mẫu khác.

http://martinfowler.com/eaaDev/uiArchs.html

Để tóm tắt sự khác biệt, điều khiển trong MVC có kiểm soát nhiều hơn giao diện người dùng, và xử lý các sự kiện, trong khi một người dẫn chương trình trong MVP là thụ động hơn, và chỉ trình bày thông tin thông qua giao diện người dùng.

Nói chung không có nhiều sự khác biệt và thường là ranh giới giữa chúng bị mờ.

+7

Trong cả hai trường hợp, bạn tham gia vào các mô hình và điều đó là tốt Điều. –

54

Trình xem chế độ xem mô hình và Trình xem mô hình đều cố gắng giải quyết cùng một vấn đề "tách riêng mối quan tâm".

Sự khác biệt chính mà bạn thấy là Bộ điều khiển chế độ xem mô hình (MVC) thường được thực hiện với một số khớp nối giữa chế độ xem và một số kiểu nhất định - do đó một chế độ xem cụ thể được cung cấp để cung cấp trực quan hóa một đối tượng cụ thể (mô hình).

Trong mô hình Trình xem mô hình, bạn thường thấy rằng Người trình bày quan tâm đến làm việc với mô hình và quyết định thông tin nào cần thiết để tạo ra một số loại trực quan hóa.

Trong sơ đồ này, mũi tên đại diện phụ thuộc:

MVC and MVP dependencies

Thông thường bạn nghe cuộc thảo luận mô hình này đưa ra khi thảo luận về khuôn khổ ASP.NET MVC, và đi qua thông tin liên quan đến mô hình MVP và nó thực hiện trong ASP.NET WebForms. Nó là phổ biến trong kinh nghiệm của tôi rằng người ta tin rằng WebForms là trong và của chính nó một khuôn khổ khuôn khổ MVP - điều này là không đúng sự thật. Tuy nhiên WebForms không làm cho nó rất dễ dàng để thực hiện một mô hình MVP - nguồn lực tốt nhất của bạn này sẽ là để điều tra Factory Phần mềm Web Client từ Patterns và nhóm thực hành:

CodePlex site: http://www.codeplex.com/websf

Một hình màn che phủ lớn chủ đề: http://www.pnpguidance.net/Screencast/MVPBundleScreencastWCSFModelViewPresenterDesignPattern.aspx

+0

Tôi không chắc những mũi tên phụ thuộc đó là đúng. Trong MVC, tại sao Chế độ xem có phụ thuộc vào Mô hình? –

+2

Nó chắc chắn không * có * được, tuy nhiên đây là việc thực hiện phổ biến hơn.Ví dụ, nếu bạn sử dụng ASP.NET MVC, cách thực hành tốt nhất là làm cho "view" của bạn phụ thuộc vào một kiểu (tạo ra một khung nhìn được đánh mạnh). Các triển khai MVC điển hình gửi một mô hình tới một khung nhìn, sau đó cho phép khung nhìn quyết định làm gì với nó (do đó tạo ra một phụ thuộc), trong khi đó trong MVP, View sẽ hỏi người trình bày "Tôi nên đặt dữ liệu nào vào hộp văn bản này". – apiguy

+0

Có triển khai thực hiện rất tốt mẫu này http://www.mvpwebforms.com – hakan

3

Dolphin Smalltalk đã từng triển khai MVC nhưng sau đó họ di chuyển sang MVP.

Đây là the technical paper mô tả những gì họ đã làm và lý do.

Hệ thống tài năng của IBM cũng đã sử dụng MVP - chúng mô tả những gì và lý do tại sao here.

+0

Liên kết TwistingTheTriad.PDF không hoạt động nữa. – Xonatron

+1

Đã sửa URL "Xoắn bộ ba". – daf

+0

@daf Tôi đã thực sự quan tâm để đọc nhưng TwistingTheTriad.PDF đi đến một trang trống hiện tại = ( – Coops

4

Fowler tách MVP thành 2 mẫu: Giám sát người xem và Chế độ xem thụ động.
Aviad Ezra có một bài viết hay về chủ đề này http://aviadezra.blogspot.com/2008/10/model-view-presenter-design-pattern.html.
Tôi nghĩ MVP tốt hơn cho máy tính để bàn và MVC dành cho ứng dụng web, vì trong máy tính để bàn, Mô hình có khả năng nâng cao sự kiện

+0

Tôi tìm thấy bài viết tham chiếu của Aviad Ezra là khá hữu ích cho tôi bắt đầu sử dụng mô hình kiến ​​trúc MVP với ứng dụng máy tính để bàn WinForms của tôi. Mã ví dụ bao gồm dễ hiểu – DavidRR

+0

Bạn có thể tăng sự kiện bằng cách sử dụng các cuộc gọi ajax hoặc websockets. – hakan

Các vấn đề liên quan