Chương trình Model-View-Presenter (MVP) có hữu ích cho Android không?


34

Cách tách Chế độ xem và Trình dẫn trong Android, trong khi các phản ứng về hành động của người dùng (Phần trình bày của MVP) được đặt thành cùng một hoạt động hiển thị các thành phần GUI (Xem một phần của MVP).

"Trong người dẫn chương trình xem mô hình giống như Martin Fowler hoặc Michael Feathers [2] nói, logic của UI được phân tách thành một lớp được gọi là người trình bày, xử lý tất cả các đầu vào từ người dùng và cho biết chế độ xem" ngu ngốc "khi nào và khi nào hiển thị "(trích dẫn từ đây ).

Cho đến bây giờ tôi đã nghĩ rằng một trong những tính năng chính của Android là Hoạt động thông minh có hành động, phản ứng với chúng và hiển thị kết quả. Là kế hoạch MVP mâu thuẫn với triết lý Android? Có ý nghĩa gì khi cố gắng nhận ra nó trên Android? Nếu có, làm thế nào nó có thể được thực hiện?


2
+1 Câu hỏi hay vì tôi chưa thấy mvp / mvvm trong các nguồn ứng dụng Android. Sẽ rất thú vị khi xem các ví dụ về mvp android và số lượng mã / lib mà họ sản xuất. Vấn đề này đã không được thảo luận tại Stackoverflow được đề xuất theo cách-sản xuất-ứng dụng-di động-giữa-android-và-các nền tảng khác
k3b

Có lẽ, tôi có thể đưa nó vào Stackoverflow, hoặc nó sẽ trái với quy tắc?
Gangnus

Bạn có thể yêu cầu một trong những quản trị viên di chuyển câu hỏi này thay vì sao chép Qestion. Ở đây, programmerscác câu hỏi là câu hỏi gây tranh cãi hơn "bạn nghĩ gì về .. / nó tốt hay xấu đối với ..." trong khi stackoverflowsẽ giống như "Có ví dụ nào về mvp trong Android". Đối với tôi cả hai nơi đều ổn.
k3b

Tôi rất xin lỗi vì sự bất hạnh của mình, nhưng cho đến giờ tôi vẫn chưa tìm được cách kết nối với quản trị viên :-(
Gangnus

Câu hỏi này KHÔNG phù hợp với Stack Overflow. BTW - bạn có thể liên hệ với người điều hành bằng cách gắn cờ bài đăng của mình bằng liên kết "cờ".
ChrisF

Câu trả lời:


15

Các ứng dụng Android được xây dựng cơ bản xung quanh Model-View-Controller (MVC) - MVP nghe có vẻ giống như vậy, mặc dù tôi chưa từng nghe thuật ngữ này trước đây. Các hoạt động đóng vai trò của Trình điều khiển, Các khung nhìn XML chỉ là như vậy (mặc dù bạn có thể xây dựng chúng theo lập trình trong Hoạt động - việc thực hiện bằng XML dễ dàng và đơn giản hơn) và Mô hình bạn tự viết. Vì vậy, có, mô hình đó là khá thực tế.

Một lý do có thể bạn có thể chưa nghe nhiều về mô hình thiết kế này là khung Android buộc bạn phải tách biệt chế độ xem. Vì ứng dụng trên thiết bị di động có xu hướng nhỏ, mọi người không có xu hướng sử dụng MVC đầy đủ; chúng có xu hướng hướng tới các lớp xem và hành động trong đó lớp hành động thực hiện nhiều công việc (nhỏ) của mô hình.

Nếu bạn đang viết một ứng dụng đa nền tảng, bạn có thể muốn xem xét một cách tiếp cận bốn lớp: Xem, Hành động, Logic nghiệp vụ và Mô hình. Các lớp Chế độ xem và Hành động sẽ là nền tảng cụ thể, trong khi Mô hình và Logic nghiệp vụ sẽ không thay đổi. Về cơ bản, bạn tách ra sự tương tác của người trình bày và người dùng với lớp Hành động, gọi lớp Business Logic để thực hiện hành động mà người dùng muốn.


+1! Xin vui lòng, bạn có thể cung cấp một tài liệu tham khảo hoặc hai cho một số văn bản tốt về nó?
Gangnus

4
Tôi nghĩ MVP cung cấp cho bạn cơ hội để giữ cho Actionnền tảng lớp (= Bản trình bày) độc lập - ít nhất là khi các nền tảng khác nhau của bạn cung cấp các khả năng UI tương tự.
Doc Brown

@DocBrown Về lý thuyết, vâng. Trong thực tế tôi không chắc chắn điều đó sẽ xảy ra, bởi vì các tương tác của người dùng có thể đạt được cả chế độ xem hoặc người trình bày. Chẳng hạn, các thao tác vuốt trong Android được xử lý bởi hoạt động, nhưng trên các trang web sẽ được xử lý bởi chế độ xem (trình duyệt).
Michael K

12
"Các ứng dụng Android về cơ bản được xây dựng xung quanh Model-View-Controller" - điều đó thật sai ở nhiều cấp độ, tôi xin lỗi. Kiến trúc khung Android được xây dựng xung quanh các Lớp Thần, nơi logic của View / Controller bị lộn xộn.
Igor Filippov

2
Tôi ước tôi có thể nâng cao nhận xét của @ IgorFilippov hơn một lần. Ý tưởng rằng các ứng dụng Android triển khai MVC theo thiết kế là một quan niệm sai lầm phổ biến. Trái ngược với iOS, không có kiến ​​trúc GUI nào được Android thi hành với sự phân tách rõ ràng các mối quan tâm và cho phép một Mô hình dễ bị cô lập, dễ kiểm tra. Bạn phải tự cung cấp một cái, có thể là MVP, MVC hoặc một cái gì đó khác.
Piovezan

6

Tôi không có bất kỳ kinh nghiệm nào về lập trình Android, nhưng có một cái nhìn ngắn gọn về một số hướng dẫn lập trình Android giới thiệu Tôi không thấy lý do tại sao MVP sẽ ít hữu ích hơn trong bất kỳ khuôn khổ hướng sự kiện nào khác. Các Activitylớp học không phải là rất khác nhau từ Dialoghoặc Formtrong các khuôn khổ khác, vì vậy nó phải được dễ dàng để tạo một lớp "Activitity Presenter" cho bất kỳ lớp con Hoạt động của ứng dụng của bạn và đặt logic lõi đó.

Các sự kiện được gửi đến "Hoạt động" của bạn phải được ủy quyền cho người thuyết trình của bạn và nếu người thuyết trình của bạn sẽ tự gửi sự kiện hoặc gọi các tính năng phụ thuộc hệ thống khác, Hoạt động của bạn phải cung cấp các chức năng liên quan thông qua giao diện mà nó chia sẻ với người thuyết trình. Nhưng về cơ bản thì giống như trong bất kỳ khung GUI nào khác mà tôi biết.


+1 cảm ơn bạn đã dành thời gian cho bạn. Nhưng như bạn thấy từ một câu trả lời khác, trong Android được sử dụng mô hình tương tự, nhưng khác nhau. "Tôi đã nói bằng văn xuôi trong 50 năm và không biết gì về nó!" Bây giờ tôi sẽ cố gắng xem xét sự khác biệt của các mô hình.
Gangnus

4
@Gangnus: MVP là một hình thức đặc biệt của MVC, ở đây codebetter.com/jeremymiller 2007/07/26 / bạn tìm thêm thông tin. Và tôi khá chắc chắn rằng đây không phải là câu hỏi về "MVC hay MVP". Các hoạt động có thể là một dạng "bộ điều khiển", nhưng chúng phụ thuộc vào nền tảng. Việc tách logic UI thành một lớp người trình bày độc lập nền tảng cho từng hoạt động có thể sẽ giúp chúng dễ kiểm tra đơn vị hơn và dễ mang theo hơn.
Doc Brown

5

MVP chắc chắn hữu ích cho Android. Nó giúp tổ chức và đơn vị kiểm tra mã của bạn. Và phần tốt nhất là những người mới đọc mã của bạn sẽ có thể hiểu mã và sẽ bắt đầu đóng góp ngay khi họ biết những gì nên đi đâu. Đây là một liên kết rất hữu ích để hiểu MVP với các ví dụ .

Dưới đây là một lời giải thích ngắn gọn về cả ba thành phần của MVP

Lượt xem

Trong MVP của android, một chế độ xem chứa hai thứ Hoạt động - Chế độ xem tài nguyên android - Giao diện java Hoạt động thực hiện Chế độ xem và nó tự tiêm (giao diện Xem) trong trình bày để người thuyết trình có thể nói chuyện với hoạt động bằng giao diện xem. Ba khối đầu tiên của sơ đồ hiển thị giao tiếp giữa View và The Presenter.

Người trình bày

Người trình bày hoạt động như một lớp giữa giữa Chế độ xem và Dữ liệu / Mô hình. Lệnh (Hoạt động) của người trình bày để trình bày một cái gì đó và người trình bày sau đó lấy dữ liệu từ cơ sở dữ liệu / Mô hình và trả lại dạng dữ liệu có thể trình bày cho Chế độ xem. Xem sau đó chăm sóc hiển thị dữ liệu đó trên màn hình. Và hãy nhớ rằng Presenter là một lớp java đơn giản, nó không nên bao gồm bất kỳ thành phần Android nào nếu không nó sẽ làm cho việc kiểm tra đơn vị của người thuyết trình khó khăn.

Nếu bạn muốn sử dụng cơ sở dữ liệu trong người trình bày thì hãy tạo hoạt động tạo một thể hiện cơ sở dữ liệu và đưa nó vào trình bày. Điều này sẽ giúp bạn giả định cơ sở dữ liệu trong khi kiểm tra đơn vị và sẽ cho phép bạn kiểm tra logic nghiệp vụ.

Mô hình

Mô hình trong MVP không có gì ngoài nguồn dữ liệu của bạn. View không nói chuyện trực tiếp với dữ liệu thay vào đó, nó ra lệnh cho Người trình bày xử lý dữ liệu cho nó và cung cấp lại thông tin có thể được hiển thị mà không cần sửa đổi gì thêm.


1
Thông tin là hữu ích, cảm ơn bạn, nhưng nó được đưa ra một cách xấu. Bạn không chỉ trích dẫn một trang web, thậm chí của riêng bạn, mà còn cung cấp thông tin ở đây. Câu trả lời tham khảo không được phép. Sử dụng ý kiến ​​thay thế. Tôi không gắn cờ nó chỉ vì thông tin hữu ích trên trang web của bạn. Xin vui lòng, thay đổi nó thành một bình luận hoặc đưa vào câu trả lời một số thông tin quan trọng đang trả lời cho phần chính của câu hỏi. Sau đó, chắc chắn bạn sẽ nhận được không chỉ điểm cộng của tôi, mà ngay cả kiểm tra câu trả lời.
Gangnus

@Gangnus Tôi đã cung cấp thông tin cần thiết trong câu trả lời vì đặt tất cả nội dung sẽ khiến câu trả lời trở nên rất lớn.
Ajit Singh

1
Thực tế có hai loại MVP. Chế độ xem thụ động (những gì bạn mô tả ở đây) và Trình giám sát giám sát, cho phép cơ sở dữ liệu trực tiếp của chế độ xem cho mô hình (giống như MVVM và nhiều khung công tác web MVC).
RubberDuck
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.