Những cải tiến của MVP trên MVC là gì?


49

Tôi đã đọc trong ba ngày về các mẫu Model-View-Controller (MVC)Model-View-Presenter (MVP) . Và có một câu hỏi làm phiền tôi rất nhiều. Tại sao các nhà thiết kế phần mềm phát minh ra MVP, khi đã có MVC?

Họ đã gặp phải vấn đề gì, mà MVC không giải quyết được (hoặc giải quyết kém), nhưng MVP có thể giải quyết? Những vấn đề nào là MVP dự định giải quyết?

Tôi đã đọc rất nhiều bài viết về lịch sử và giải thích về MVP, hoặc về sự khác biệt giữa MVC và MVP, nhưng không có câu trả lời rõ ràng nào cho câu hỏi của tôi.

Trong một trong những bài báo mà tôi đọc, nó đã được nói:

Bây giờ vào Model View Presenter, đây là một phản ứng đối với những bất cập của mẫu MVC khi được áp dụng cho các giao diện người dùng đồ họa dựa trên thành phần hiện đại. Trong các hệ thống GUI hiện đại, các thành phần GUI tự xử lý đầu vào của người dùng như di chuyển chuột và nhấp chuột, thay vì một số bộ điều khiển trung tâm.

Vì vậy, tôi không thể hiểu, nhưng nó thực sự có thể theo một cách khác, sao cho các thành phần GUI không tự xử lý đầu vào của người dùng? Và chính xác thì "tự xử lý" nghĩa là gì?



4
Tôi nghĩ đó chỉ là "Quần áo mới của Hoàng đế", một từ thông dụng mới từ Mickeysoft.
qwerty_so

4
Victor, bạn có một câu hỏi cụ thể nào khác ngoài "tại sao có hai mẫu khác nhau không?" Có hai mô hình khác nhau bởi vì chúng giải quyết cùng một vấn đề theo hai cách hơi khác nhau. Nếu nó giúp, Model và View về cơ bản là giống nhau trong cả hai mẫu. Tập trung vào sự khác biệt giữa Người điều khiển và Người thuyết trình. Bạn có thể tìm thêm trợ giúp tại đây: Linkedin.com/pulse/ khăn
Robert Harvey

18
"Tôi đã đọc được ba ngày về các mẫu MVC và MVP." Rất tiếc. Tôi đề nghị bạn đi tắm nước nóng thư giãn hoặc bỏ qua vài viên đá trên một cái ao đầy vịt hoặc một cái gì đó. Kiểu đọc đó có thể, trong trường hợp không có bất kỳ ứng dụng thực tế nào, thực sự làm tan chảy bộ não của bạn!
1172763

11
Cách bạn có được loại câu trả lời bạn muốn là bằng cách xây dựng một cái gì đó bằng cách sử dụng các mẫu này. Rồi bạn sẽ được giác ngộ.
Robert Harvey

Câu trả lời:


63

MVC là khái niệm thanh lịch:

  • đầu vào của người dùng được xử lý bởi bộ điều khiển
  • bộ điều khiển cập nhật mô hình
  • mô hình cập nhật giao diện xem / người dùng
           +---+
      +----| V |<----+
user  |    +---+     | updates
input |              |
      v              |
    +---+          +---+
    | C |--------->| M |
    +---+ updates  +---+

Tuy nhiên: Luồng dữ liệu và sự kiện trong MVC là hình tròn. Và chế độ xem thường sẽ chứa logic đáng kể (như trình xử lý sự kiện cho hành động của người dùng). Cùng với nhau, các tính chất này làm cho hệ thống khó kiểm tra và khó bảo trì.

Kiến trúc MVP thay thế bộ điều khiển bằng một người trình bày, trung gian giữa chế độ xem và mô hình. Điều này tuyến tính hóa hệ thống:

       user input         updates
+---+ -----------> +---+ --------> +---+
| V |              | P |           | M |
+---+ <----------- +---+ <-------- +---+
        updates            updates

Điều này có những ưu điểm sau:

  • Logic (như trình xử lý sự kiện và trạng thái giao diện người dùng) có thể được chuyển từ chế độ xem sang người trình bày.

  • Giao diện người dùng có thể được kiểm tra theo đơn vị của người trình bày, vì nó mô tả trạng thái giao diện người dùng. Trong thử nghiệm đơn vị, chúng tôi thay thế chế độ xem bằng trình điều khiển thử nghiệm thực hiện cuộc gọi đến người trình bày.

  • Vì giao diện người dùng được tách biệt khỏi logic ứng dụng, cả hai có thể được phát triển độc lập.

Nhưng cũng có một số nhược điểm của phương pháp này:

  • Nó đòi hỏi nhiều nỗ lực hơn.
  • Người thuyết trình có thể dễ dàng biến đổi thành một lớp thần thần không thể nhầm lẫn.
  • Ứng dụng không có một trục MVP duy nhất, nhưng nhiều trục: một trục cho mỗi màn hình / cửa sổ / bảng điều khiển trong giao diện người dùng. Điều này có thể đơn giản hóa kiến ​​trúc của bạn hoặc quá phức tạp hóa nó.

7
Câu trả lời hay, nhưng MVC hiện đại thường không sử dụng nhiều (nếu có) các trình xử lý sự kiện, ngoại trừ việc xác thực mẫu cục bộ và tôi không coi các sự kiện đó là một phần của MVC. Đó là lý do tại sao chúng tôi có MVP và MVVM. MVC về cơ bản là phía máy chủ.
Robert Harvey

@amon, cảm ơn bạn đã trả lời, nó nói nhiều điều với tôi. Và bạn đề cập rằng, có một số trục trong ứng dụng có thể đơn giản hóa kiến ​​trúc. Tôi đáp ứng ý tưởng đó trong nhiều bài báo, và đã được đề cập, là một trong những lý do chính để phát minh ra MVP, bởi vì MVC không phù hợp với các yêu cầu GUI phức tạp. Đó là, yêu cầu nào MVP phù hợp, và làm thế nào nó giải quyết các yêu cầu đó? Xin lỗi vì đã cố chấp, nhưng tôi THỰC SỰ biết điều đó tốt.
Victor

4
@Victor Không có mô hình tốt nhất, nhưng sự đánh đổi là khác nhau. MVC có thể là một kết hợp cho các yêu cầu phức tạp. Về mặt kiến ​​trúc, MVP thực thi mối quan hệ 1: 1 giữa các chế độ xem và người thuyết trình: mỗi chế độ xem có người trình bày riêng, mỗi người thuyết trình được kết nối với một chế độ xem. Trong MVC, có một mối quan hệ n: m: Một khung nhìn có thể gửi đầu vào của người dùng đến nhiều bộ điều khiển khác nhau và một bộ điều khiển có thể nhận đầu vào từ nhiều khung nhìn. Điều đó linh hoạt hơn, nhưng cũng hỗn loạn hơn - không có trục rõ ràng nào trong trục MVC trong MVC.
amon

1
@Victor Tôi không có nhiều kinh nghiệm với GUI, nên có lẽ tôi đã không đề cập nhiều. GUI cuối cùng mà tôi đã làm là một mớ hỗn độn tuyệt đối vì tôi không biết về MVP tại thời điểm đó - một luồng dữ liệu và kiểm soát được tuyến tính hóa sẽ là một cải tiến lớn.
amon

9
@RobertHarvey Tôi sẽ lập luận rằng những gì web gọi là "MVC" không bao giờ thực sự là "MVC" theo định nghĩa ban đầu. Bất cứ ai chiếm quyền từ viết tắt nên bị đánh lộn đầu vì chọn một thuật ngữ được tải và gây nhầm lẫn cho tất cả mọi người.
jpmc26

6

Trong MVP, Presenter thay thế Trình điều khiển của MVC. Sự khác biệt giữa hai là Người thuyết trình trực tiếp thao tác với Chế độ xem. Nó được thiết kế cho các khung UI được điều khiển chủ yếu theo sự kiện (như Windows Forms) mà không hỗ trợ nhiều cho liên kết dữ liệu phong phú sẽ cho vay mẫu MVVM (như WPF). Mặt khác, rất nhiều logic để quản lý trạng thái xem và cập nhật mô hình sao lưu sẽ nằm trong chính khung nhìn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.