Mô hình MVC trên Android


497

Có thể triển khai mô hình trình điều khiển của chế độ xem mô hình của Google trong Java cho Android không?

Hoặc nó đã được thực hiện thông qua các hoạt động? Hoặc có cách nào tốt hơn để triển khai mẫu MVC cho Android không?


64
Câu hỏi của bạn rất hay. Nhưng câu trả lời được đánh dấu là giải pháp là không chính xác theo ý kiến ​​của tôi. Nó có thể sai lầm nhiều người.
Saghar

4
Kiểm tra 2 bài viết của tôi bắt đầu từ đây Kiến trúc Android: MV?
Dori

1
Ngoài ra còn có một bộ quy tắc bổ sung cần tuân thủ để tuân thủ MVC hay là sự phát triển Android đã được điều chỉnh theo MVC vì Activity, XML, Tài nguyên?
Ngọn lửa của udun

3
@Dori, tôi sửa liên kết của bạn: Kiến trúc Android: MV?
Andreybeta

Bài viết này hoàn toàn khớp với những gì bạn đang tìm kiếm, MVC trong Android thông qua một ví dụ thực tế: digigene.com/arch architecture / android
Ali Nem

Câu trả lời:


239

Trong Android, bạn không có MVC, nhưng bạn có những điều sau đây:

  • Bạn xác định giao diện người dùng của mình trong các tệp XML khác nhau theo độ phân giải, phần cứng, v.v.
  • Bạn xác định tài nguyên của mình trong các tệp XML khác nhau theo ngôn ngữ, v.v.
  • Bạn mở rộng các nhóm như ListActivity , TabActivity và sử dụng tệp XML bằng các bộ lọc .
  • Bạn có thể tạo nhiều lớp như bạn muốn cho logic kinh doanh của bạn.
  • Rất nhiều Utils đã được viết cho bạn - DatabaseUtils, Html.

3
@JDPekham, tại sao bạn nói "Bạn không thể khởi tạo một hoạt động mà không nói chuyện với bố cục / chế độ xem của bạn"? Khởi tạo một hoạt động không yêu cầu nói chuyện với các chế độ xem, trên thực tế, việc nói chuyện với các quan điểm không có nghĩa là một phần của hoạt động khởi tạo Hoạt động. Bạn CÓ THỂ (nhưng không phải) gọi các phương thức Hoạt động khác nhau tương tác với quan điểm của bạn khi và nếu bạn thấy phù hợp. Câu hỏi thứ hai: Giả sử Activity hoạt động với vai trò "bộ điều khiển" (tôi tin rằng nhiều nhà phát triển Android thấy nó theo cách đó) tại sao không nói chuyện với quan điểm của bạn từ Activity?

8
Đối với bất kỳ ai nói rằng "Android là MVC", vui lòng thử Backbone.js (vâng, js phía máy khách) trong một tuần, sau đó quay lại và nói rằng "Android là MVC". Cuối cùng bạn sẽ hiểu câu hỏi và lý do tại sao chúng tôi tiếp tục hỏi :)
Mark Peterson

14
"Trong Android bạn không có MVC" ???? Trong Android, cũng như các ngôn ngữ khác, bạn có MVC nếu bạn muốn MVC.
Lorenzo Barbagli

1
@LorenzoBarbagli Ý anh là, Android không thực thi MVC trong các ứng dụng theo thiết kế (như iOS hiện). Bạn phải tự thực hiện một hương vị của MVC, MVP hoặc một cái gì đó khác nếu bạn muốn đạt được những gì MVC cung cấp - cụ thể là tách các mối quan tâm và một Mô hình dễ kiểm tra, dễ bị cô lập.
Piovezan

Không. Chắc chắn có MVC trong Android, nhưng rõ ràng hơn. Nó chỉ được thực hiện theo một cách khác theo cách Android cấu trúc mọi thứ.
6

229

Không có mẫu MVC duy nhất trên toàn cầu. MVC là một khái niệm chứ không phải là một khung lập trình vững chắc. Bạn có thể thực hiện MVC của riêng bạn trên bất kỳ nền tảng nào. Miễn là bạn tuân theo ý tưởng cơ bản sau, bạn đang triển khai MVC:

  • Mô hình: Kết xuất những gì
  • Xem: Cách kết xuất
  • Điều khiển: Sự kiện, đầu vào của người dùng

Cũng nghĩ về nó theo cách này: Khi bạn lập trình mô hình của mình, mô hình không cần phải lo lắng về kết xuất (hoặc mã cụ thể của nền tảng). Mô hình sẽ nói với quan điểm, tôi không quan tâm nếu kết xuất của bạn là Android hoặc iOS hoặc Windows Phone, đây là những gì tôi cần bạn kết xuất. Khung nhìn sẽ chỉ xử lý mã kết xuất dành riêng cho nền tảng.

Điều này đặc biệt hữu ích khi bạn sử dụng Mono để chia sẻ mô hình nhằm phát triển các ứng dụng đa nền tảng.


12
Trong khi đó là sự thật, và cũng được, đây là lý thuyết và mọi người là thực tế!
TWiStErRob

1
@TWiStErRob Nhưng các mẫu thiết kế là những ý tưởng trừu tượng, lý thuyết không chỉ có một cách để hiện thực hóa chúng. Về mặt lý thuyết, tôi không muốn hiểu MVC về lý thuyết, tôi chỉ muốn nó thực hiện âm thanh của tôi như thể nó có thể dẫn đến việc tôi sẽ đặt máy giặt trong nhà bếp vì máy giặt thực hiện kiểu Cleaner ™ và bếp cần điều đó.
Luke

1
Tôi nghĩ các ví dụ là vô giá vì chúng cho thấy những gì người khác đã đưa ra. Người ta có thể cải thiện chúng và học hỏi từ nỗ lực của họ. Không cần cho tất cả mọi người để phát minh lại bánh xe. Trong bối cảnh của Android và vòng đời phức tạp của nó, có những vấn đề không được giải quyết trong một mẫu thiết kế, nhưng mọi người sẽ phải đối mặt với chúng. Đây là những gì tôi có nghĩa là thực tế.
TWiStErRob

47

Các hành động, chế độ xem và hoạt động trên Android là cách thức hoạt động với giao diện người dùng Android và là một triển khai của mô hình mô hình xem viewmodel (MVVM) , có cấu trúc tương tự (trong cùng một gia đình) Bộ điều khiển.

Theo hiểu biết tốt nhất của tôi, không có cách nào để thoát ra khỏi mô hình này. Nó có thể được thực hiện, nhưng bạn có thể sẽ mất tất cả lợi ích mà mô hình hiện có có và phải viết lại lớp UI của riêng bạn để làm cho nó hoạt động.


29

Sau một số tìm kiếm, câu trả lời hợp lý nhất là như sau:

MVC đã được triển khai trong Android dưới dạng:

  1. Xem = bố cục, tài nguyên và các lớp tích hợp như Buttonxuất phát từ android.view.View.
  2. Bộ điều khiển = Hoạt động
  3. Model = các lớp thực hiện logic ứng dụng

(Điều này bằng cách này ngụ ý không có logic miền ứng dụng trong hoạt động.)

Điều hợp lý nhất cho một nhà phát triển nhỏ là tuân theo mô hình này và không cố gắng làm những gì Google quyết định không làm.

PS Lưu ý rằng Hoạt động đôi khi được khởi động lại, vì vậy không có chỗ cho dữ liệu mô hình (cách dễ nhất để gây khởi động lại là bỏ qua android:configChanges="keyboardHidden|orientation"XML và biến thiết bị của bạn).

BIÊN TẬP

Có thể chúng ta đang nói về MVC , nhưng sẽ nói như vậy là FMVC , Framework - Model - View - Controller . Các khung (hệ điều hành Android) áp đặt ý tưởng của chu kỳ tuổi thọ linh kiện và các sự kiện liên quan, và trong thực tế các điều khiển ( Activity/ Service/ BroadcastReceiver) là trước hết là trách nhiệm đối phó với những khung -imposed sự kiện (chẳng hạn như onCreate () ). Đầu vào của người dùng nên được xử lý riêng? Ngay cả nếu cần, bạn không thể tách nó ra, các sự kiện đầu vào của người dùng cũng đến từ Android.

Dù sao, càng ít mã không dành riêng cho Android mà bạn đặt vào Activity/ Service/ BroadcastReceiverthì càng tốt.


3
Hoạt động có quyền truy cập trực tiếp vào UI, trong khi đó, trong bộ điều khiển MVC không nên biết về chế độ xem (chỉ ngược lại).
Konrad Morawski

2
@KonradMorawski Hmmm .... Một Xem biết về hiển thị mọi thứ về điều khiển ? Một đứa trẻ của, nói, Buttonbiết về Bộ điều khiển ? Có vẻ hợp lý hơn khi Lượt xem chỉ biết về việc hiển thị mọi thứ. Và có tính đến việc Model chỉ biết về bản chất của dữ liệu, đây là lý do cần Bộ điều khiển : cần phải biết cả về Mô hìnhChế độ xem .
18446744073709551615

4
Rõ ràng là View cần biết về bộ điều khiển để ủy thác các sự kiện cho bộ điều khiển. Bộ điều khiển theo mô hình đó và thông báo cho View xem kết quả là gì (để nó có thể hiển thị nó). Bộ điều khiển không làm tăng chế độ xem (trong khi Activity hoạt động), cũng không nên biết một điều gì về các nút, hộp văn bản, danh sách, v.v. (trong khi Activity biết).
Konrad Morawski

1
Tôi nghĩ rằng Servicenó cũng nằm dưới chiếc ô điều khiển
CL22

1
Bao giờ nghe nói về các nhà quan sát? Sự phân tách tốt nhất mà Iv tìm thấy cho đến nay là khi 1. trình điều khiển chỉ có phiên bản mô hình, 2. mô hình không có trình điều khiển hoặc chế độ xem nhưng chế độ xem có thể đăng ký làm người quan sát mô hình (vì vậy người mẫu biết về chế độ xem nhưng anh ta không biết đó là ai và anh ta không biết không quan tâm) - khi mô hình được thực hiện với việc tải dữ liệu, anh ta thông báo cho tất cả các nhà quan sát (thường là 1) và 3. chế độ xem chỉ có thể hiện mô hình để kéo dữ liệu ra khỏi nó. Cách này chỉ có 2 phụ thuộc cho tất cả khung MVC. Tôi nghĩ 2 là tối thiểu nên nó phải là bố cục tốt nhất.
Srneczek

18

Không có mẫu MVC nào bạn có thể tuân theo. MVC chỉ nêu rõ ít nhiều rằng bạn không nên trộn lẫn dữ liệu và chế độ xem, do đó, ví dụ: các khung nhìn chịu trách nhiệm giữ dữ liệu hoặc các lớp đang xử lý dữ liệu đang ảnh hưởng trực tiếp đến chế độ xem.

Nhưng tuy nhiên, cách Android xử lý các lớp và tài nguyên, đôi khi bạn thậm chí buộc phải tuân theo mô hình MVC. Theo tôi, phức tạp hơn là các hoạt động đôi khi chịu trách nhiệm về quan điểm, nhưng vẫn hoạt động như một bộ điều khiển cùng một lúc.

Nếu bạn xác định các chế độ xem và bố cục của mình trong các tệp XML, hãy tải tài nguyên của bạn từ thư mục res và nếu bạn tránh ít nhiều để trộn lẫn những thứ này trong mã của mình, thì dù sao bạn cũng đang theo mô hình MVC.


14

Bạn có thể triển khai MVC trong Android, nhưng nó không được "hỗ trợ nguyên bản" và mất một số nỗ lực.

Điều đó nói rằng, cá nhân tôi có xu hướng hướng tới MVP như một mô hình kiến ​​trúc sạch hơn nhiều để phát triển Android. Và bằng cách nói MVP tôi có ý này:

nhập mô tả hình ảnh ở đây

Tôi cũng đã đăng một câu trả lời chi tiết hơn ở đây .

Sau khi chơi với các cách tiếp cận khác nhau để triển khai MVC / MVP trong Android, tôi đã tìm ra một mẫu kiến ​​trúc hợp lý, mà tôi đã mô tả trong bài đăng này: MVP và MVC Architectural Forms trong Android .


14

Tài nguyên tốt nhất tôi tìm thấy để triển khai MVC trên Android là bài đăng này :

Tôi đã làm theo thiết kế tương tự cho một trong những dự án của tôi và nó hoạt động rất tốt. Tôi là người mới bắt đầu trên Android, vì vậy tôi không thể nói rằng đây là giải pháp tốt nhất.

Tôi đã thực hiện một sửa đổi: Tôi đã khởi tạo mô hình và bộ điều khiển cho từng hoạt động trong lớp ứng dụng để chúng không được tạo lại khi chế độ chân dung ngang thay đổi.


8
sẽ là tuyệt vời để có được một bản tóm tắt trong trường hợp bài viết bị xóa một ngày.
pqsk

12

Tôi đồng ý với JDPeckham và tôi tin rằng chỉ riêng XML là không đủ để triển khai phần UI của ứng dụng.

Tuy nhiên, nếu bạn coi Activity là một phần của khung nhìn thì việc triển khai MVC khá đơn giản. Bạn có thể ghi đè Ứng dụng (như được trả về bởi getApplication () trong Hoạt động) và ở đây bạn có thể tạo một bộ điều khiển tồn tại trong suốt vòng đời của ứng dụng.

(Ngoài ra, bạn có thể sử dụng mẫu singleton theo đề xuất của tài liệu Ứng dụng)


12

MVC- Architecture trên Android Tốt hơn để theo dõi bất kỳ MVP nào thay vì MVC trong Android. Nhưng vẫn theo câu trả lời cho câu hỏi này có thể là giải pháp

Nhập mô tả hình ảnh ở đây

Mô tả và Hướng dẫn

     Controller -
        Activity can play the role.
        Use an application class to write the
        global methods and define, and avoid
        static variables in the controller label
    Model -
        Entity like - user, Product, and Customer class.
    View -
        XML layout files.
    ViewModel -
        Class with like CartItem and owner
        models with multiple class properties
    Service -
        DataService- All the tables which have logic
        to get the data to bind the models - UserTable,
        CustomerTable
        NetworkService - Service logic binds the
        logic with network call - Login Service
Helpers -
        StringHelper, ValidationHelper static
        methods for helping format and validation code.
SharedView - fragmets or shared views from the code
        can be separated here

AppConstant -
        Use the Values folder XML files
        for constant app level

CHÚ THÍCH 1:

Bây giờ đây là mảnh ma thuật bạn có thể làm. Khi bạn đã phân loại đoạn mã, hãy viết một lớp giao diện cơ sở như, IEntity và IService. Khai báo các phương thức phổ biến. Bây giờ hãy tạo lớp trừu tượng BaseService và khai báo tập phương thức của riêng bạn và tách mã.

CHÚ THÍCH 2: Nếu hoạt động của bạn đang trình bày nhiều mô hình thì thay vì viết mã / logic trong hoạt động, tốt hơn là chia các khung nhìn thành các đoạn. Vậy thì tốt hơn. Vì vậy, trong tương lai nếu cần thêm mô hình nào để hiển thị trong chế độ xem, hãy thêm một đoạn nữa.

CHÚ THÍCH 3: Tách mã là rất quan trọng. Mỗi thành phần trong kiến ​​trúc nên độc lập không có logic phụ thuộc. Nếu tình cờ nếu bạn có một cái gì đó phụ thuộc logic, thì hãy viết một lớp logic ánh xạ ở giữa. Điều này sẽ giúp bạn trong tương lai.


11

Tạo giao diện người dùng Android bằng cách sử dụng bố cục, tài nguyên, hoạt động và ý định là một triển khai của mẫu MVC. Vui lòng xem liên kết sau để biết thêm về điều này - http://www.cs.otago.ac.nz/cosc346/labs/COSC346-lab2.2up.pdf

gương cho pdf


7
liên kết bị hỏng thưa ngài
Rat-a-tat-a-tat Ratatouille

2
Có vẻ như tệp COSC346-lab2.2up.pdf này không bao gồm đầy đủ chi tiết.
James

9

Mẫu MVC của Android được (loại) được triển khai với các lớp Adaptor của họ . Họ thay thế một bộ điều khiển bằng một "bộ chuyển đổi." Mô tả cho các trạng thái bộ chuyển đổi:

Một đối tượng Adaptor đóng vai trò là cầu nối giữa Adaptor và dữ liệu cơ bản cho chế độ xem đó.

Tôi chỉ xem xét ứng dụng Android này đọc từ cơ sở dữ liệu, vì vậy tôi không biết nó hoạt động tốt như thế nào. Tuy nhiên, có vẻ như kiến ​​trúc Model-View-Delegate của Qt, mà họ tuyên bố là một bước tiến từ một mô hình MVC truyền thống. Ít nhất là trên PC, mẫu của Qt hoạt động khá tốt.


9

Mặc dù bài đăng này có vẻ đã cũ nhưng tôi muốn thêm hai phần sau để thông báo về sự phát triển gần đây trong lĩnh vực này cho Android:

ràng buộc android - Cung cấp một khung công tác cho phép liên kết các widget của chế độ xem Android với mô hình dữ liệu. Nó giúp triển khai các mẫu MVC hoặc MVVM trong các ứng dụng Android.

roboguice - RoboGuice đưa sự phỏng đoán ra khỏi sự phát triển. Tiêm View, Tài nguyên, Dịch vụ hệ thống hoặc bất kỳ đối tượng nào khác và để RoboGuice chăm sóc các chi tiết.


9

Trình điều khiển xem mô hình (MVC)

nhập mô tả hình ảnh ở đây


Sự miêu tả:

  • Khi chúng ta phải thực hiện các dự án lớn trong phát triển phần mềm, MVC thường được sử dụng vì đó là cách tổ chức các dự án phổ biến.
  • Các nhà phát triển mới có thể nhanh chóng thích nghi với dự án
  • Giúp phát triển các dự án lớn và đa nền tảng quá.

Mẫu MVC về cơ bản là thế này:

  • Model: Hiển thị gì. Đây có thể là nguồn dữ liệu (Ví dụ: Máy chủ, Dữ liệu thô trong ứng dụng)
  • Xem: Cách hiển thị. Đây có thể là xml. Do đó, nó hoạt động như một bộ lọc trình bày. Một khung nhìn được gắn vào mô hình của nó (hoặc một phần mô hình) và lấy dữ liệu cần thiết cho bài thuyết trình.
  • Trình điều khiển: Xử lý các sự kiện như đầu vào của người dùng. Đây là hoạt động

Tính năng quan trọng của MVC: Chúng tôi có thể sửa đổi Mô hình hoặc Chế độ xem hoặc Trình điều khiển vẫn không ảnh hưởng đến các mô hình khác

  • Nói rằng chúng tôi thay đổi màu sắc trong chế độ xem, kích thước của chế độ xem hoặc vị trí của chế độ xem. Làm như vậy nó sẽ không ảnh hưởng đến mô hình hoặc bộ điều khiển
  • Giả sử chúng tôi thay đổi mô hình (thay vì dữ liệu được tìm nạp từ máy chủ tìm nạp dữ liệu từ tài sản) nhưng nó sẽ không ảnh hưởng đến chế độ xem và bộ điều khiển
  • Giả sử chúng tôi thay đổi Bộ điều khiển (Logic trong hoạt động) nó sẽ không ảnh hưởng đến mô hình và chế độ xem

2
Tôi chỉ từng sử dụng bộ điều khiển như một ống dẫn để xem thông tin chuyển tiếp xem / mô hình. Tôi tò mò về cách bạn có mô hình và xem tiếp xúc trực tiếp với nhau. Bạn có một nguồn hoặc ví dụ về việc thực hiện này?
Jacksonkr

7

Tôi nghĩ rằng lời giải thích đơn giản hữu ích nhất là ở đây: http://www.cs.otago.ac.nz/cosc346/labs/COSC346-lab2.2up.pdf

Từ mọi thứ khác tôi đã thấy và đọc ở đây, việc thực hiện tất cả những điều này làm cho nó khó hơn và không phù hợp với các phần khác của Android.

Có một hoạt động triển khai các trình nghe khác đã là cách tiêu chuẩn của Android. Cách vô hại nhất là thêm Trình quan sát Java như các trang trình bày mô tả và nhóm onClick và các loại hành động khác vào các hàm vẫn còn trong Hoạt động.

Cách Android là Activity hoạt động cả hai. Chiến đấu với nó không thực sự làm cho việc mở rộng hoặc thực hiện mã hóa trong tương lai dễ dàng hơn.

Tôi đồng ý với bài thứ 2 . Đó là loại đã được thực hiện, không phải là cách mọi người đã quen. Cho dù nó có trong cùng một tệp hay không, đã có sự phân tách. Không cần phải tạo thêm sự tách biệt để làm cho nó phù hợp với các ngôn ngữ và hệ điều hành khác.


6
Liên kết bạn cung cấp bị hỏng.
mmBs

6

Thật đáng ngạc nhiên khi thấy rằng không có bài viết nào ở đây trả lời câu hỏi. Chúng quá chung chung, mơ hồ, không chính xác hoặc không đề cập đến việc triển khai trong Android.

Trong MVC, lớp View chỉ biết cách hiển thị giao diện người dùng (UI). Nếu bất kỳ dữ liệu nào là cần thiết cho việc này, nó sẽ lấy nó từ lớp Model . Nhưng Chế độ xem KHÔNG trực tiếp yêu cầu mô hình tìm dữ liệu, nó thực hiện thông qua Bộ điều khiển . Vì vậy, Bộ điều khiển  gọi Mô hình để cung cấp dữ liệu cần thiết cho Chế độ xem . Khi dữ liệu đã sẵn sàng, Bộ điều khiển thông báo cho Chế độ xem rằng dữ liệu đã sẵn sàng để được lấy từ Mô hình . Bây giờ, View có thể lấy dữ liệu từ Model .

Luồng này có thể được tóm tắt như sau:

nhập mô tả hình ảnh ở đây

Điều đáng chú ý là Chế độ xem có thể biết về tính khả dụng của dữ liệu trong  Mô hình  thông qua Bộ điều khiển - còn được gọi là  thụ động MVC - hoặc bằng cách quan sát dữ liệu trong Mô hình bằng cách đăng ký có thể quan sát được với nó, đó là Active MVC .

Về phần triển khai, một trong những điều đầu tiên xuất hiện là thành phần Android nào nên được sử dụng cho Chế độ xem ? Activity  hay Fragment ?

Câu trả lời là nó không quan trọng và cả hai đều có thể được sử dụng. Các Xem sẽ có thể trình bày các giao diện người dùng (UI) trên thiết bị và đáp ứng với sự tương tác của người dùng với giao diện người dùng. Cả Activity  vàFragment   cung cấp các phương pháp cần thiết cho việc này.

Trong ứng dụng ví dụ được sử dụng trong bài viết này, tôi đã sử dụng Activity cho lớp View , nhưng Fragment  cũng có thể được sử dụng.

Ứng dụng mẫu hoàn chỉnh có thể được tìm thấy trong nhánh 'mvc' của repo GitHub của tôi ở đây .

Tôi cũng đã giải quyết những ưu và nhược điểm của kiến ​​trúc MVC trong Android thông qua một ví dụ ở đây .

Đối với những người quan tâm, tôi đã bắt đầu một loạt bài viết về kiến ​​trúc ứng dụng Android ở đây, trong đó tôi so sánh các kiến ​​trúc khác nhau, ví dụ như MVC, MVP, MVVM, để phát triển ứng dụng Android thông qua một ứng dụng hoàn chỉnh.


Tôi đã tham gia một khóa kiến ​​trúc trong đó người hướng dẫn nói rằng các hoạt động và các đoạn không nên được sử dụng làm các khung nhìn và trên thực tế nên là các bộ điều khiển và các khung nhìn nên là các tệp riêng biệt. Bạn có ý kiến ​​hay lý do tại sao điều này không nên?
brandonx

Tôi không nghĩ rằng người hướng dẫn là chính xác về điều đó. Chọn hoạt động hoặc đoạn làm bộ điều khiển có nghĩa là chuyển ngữ cảnh đến bộ điều khiển. Mặt khác, khung nhìn cũng cần bối cảnh để vẽ lên màn hình. Bằng cách này, tức là chuyển ngữ cảnh tới bộ điều khiển, khiến ứng dụng dễ bị rò rỉ bộ nhớ và tôi tin rằng bộ điều khiển không nên mang trạng thái.
Ali Nem

5

Mệt mỏi vì thảm họa MVx trên Android Gần đây tôi đã tạo một thư viện nhỏ cung cấp luồng dữ liệu đơn hướng và tương tự như khái niệm về MVC: https://github.com/zserge/anvil

Về cơ bản, bạn có một thành phần (hoạt động, đoạn và nhóm xem). Bên trong bạn xác định cấu trúc và phong cách của lớp xem. Ngoài ra, bạn xác định cách dữ liệu nên được ràng buộc với các khung nhìn. Cuối cùng, bạn có thể ràng buộc người nghe ở cùng một nơi.

Sau đó, khi dữ liệu của bạn được thay đổi - phương thức "render ()" toàn cầu sẽ được gọi và chế độ xem của bạn sẽ được cập nhật thông minh với dữ liệu gần đây nhất.

Đây là một ví dụ về thành phần có mọi thứ bên trong để thu gọn mã (tất nhiên Model và Trình điều khiển có thể dễ dàng tách rời). Ở đây "Count" là một mô hình, phương thức view () là một khung nhìn và "v -> Count ++" là một bộ điều khiển lắng nghe các nút bấm và cập nhật mô hình.

public MyView extends RenderableView {
  public MyView(Context c) {
      super(c);
  }

  private int count = 0;

  public void view() {
    frameLayout(() -> {              // Define your view hierarchy
      size(FILL, WRAP);
      button(() -> {
          textColor(Color.RED);      // Define view style
          text("Clicked " + count);  // Bind data
          onClick(v -> count++);     // Bind listeners
      });
    });
  }

Với mô hình và bộ điều khiển riêng biệt, nó sẽ trông như sau:

button(() -> {
   textColor(Color.RED);
   text("Clicked " + mModel.getClickCount());
   onClick(mController::onButtonClicked);
});

Ở đây trên mỗi nút bấm, số sẽ được tăng lên, sau đó "render ()" sẽ được gọi và văn bản nút sẽ được cập nhật.

Cú pháp trở nên dễ chịu hơn nếu bạn sử dụng Kotlin: http://zserge.com/blog/anvil-kotlin.html . Ngoài ra, có cú pháp thay thế cho Java mà không có lambdas.

Bản thân thư viện rất nhẹ, không phụ thuộc, không sử dụng phản xạ, v.v.

(Tuyên bố miễn trừ trách nhiệm: Tôi là tác giả của thư viện này)


4

Theo lời giải thích mà nhóm Xamarin đã giải thích (trên iOS MVC "Tôi biết điều đó có vẻ kỳ lạ, nhưng đợi một chút"):

  • Mô hình (dữ liệu hoặc logic ứng dụng),
  • Chế độ xem (giao diện người dùng) và
  • Bộ điều khiển (mã phía sau).

Tôi có thể nói điều này:

Mô hình trên Android chỉ đơn giản là đối tượng có thể phân phối. Khung nhìn là bố cục XML và bộ điều khiển là (hoạt động + đoạn của nó).

* Đây chỉ là ý kiến ​​của tôi, không phải từ bất kỳ tài nguyên hoặc một cuốn sách.


4

Không có kiến ​​trúc MVC được triển khai, nhưng tồn tại một tập hợp các thư viện / ví dụ để triển khai kiến ​​trúc MVP (model model view view người trình bày).

Vui lòng kiểm tra các liên kết sau:

Google đã thêm một ví dụ về MVP kiến ​​trúc Android:


3

Tôi đã thấy rằng nhiều người đang nói rằng MVC đã được triển khai trong Android, nhưng điều đó không đúng. Android không theo MVC theo mặc định.

Bởi vì tôi không bao giờ Google sẽ áp đặt mạnh mẽ các hạn chế của việc triển khai MVC như iPhone, nhưng tùy thuộc vào các nhà phát triển tạo ra hoặc kỹ thuật họ muốn trong dự án của họ, trong các ứng dụng nhỏ hoặc đơn giản, không cần sử dụng MVC, nhưng là ứng dụng phát triển và trở nên phức tạp và yêu cầu sửa đổi mã của nó trong những năm sau đó, sau đó xuất hiện nhu cầu về mô hình MVC trong Android.

Nó cung cấp một cách dễ dàng để sửa đổi mã và cũng giúp giảm các vấn đề. Nếu bạn muốn triển khai MVC trên Android, hãy theo liên kết dưới đây và tận hưởng triển khai MVC trong dự án của bạn.

http://www.therealjoshua.com/2011/11/android-arch architecture-part-1-intro /

Nhưng ngày nay tôi nghĩ MVP cùng với Android Architectural Pattern là một trong những lựa chọn tốt nhất mà các nhà phát triển nên sử dụng cho một ứng dụng Android sạch và mạnh mẽ.


1
Đã đồng ý. Android có đủ linh hoạt để treo mình. Hoạt động đó của bạn có thể nhanh chóng phát triển khổng lồ và phức tạp vì nó xử lý cả ba khía cạnh của MVC.
Scott Biggie

2

Khi chúng tôi áp dụng MVC, MVVM hoặc Mô hình trình bày cho ứng dụng Android, điều chúng tôi thực sự muốn là có một dự án có cấu trúc rõ ràng và quan trọng hơn là dễ dàng hơn cho các bài kiểm tra đơn vị.

Hiện tại, không có khung của bên thứ ba, bạn thường có rất nhiều mã (như addXXListener (), findViewById (), v.v.), không thêm bất kỳ giá trị doanh nghiệp nào.

Hơn thế nữa, bạn phải chạy thử nghiệm đơn vị Android thay vì thử nghiệm JUnit thông thường, mất nhiều thời gian để chạy và khiến thử nghiệm đơn vị hơi không thực tế. Vì những lý do này, vài năm trước chúng tôi đã bắt đầu một dự án nguồn mở, RoboBinding - Khung mô hình trình bày ràng buộc dữ liệu cho nền tảng Android.

RoboBinding giúp bạn viết mã UI dễ đọc, kiểm tra và bảo trì hơn. RoboBinding loại bỏ sự cần thiết của mã không cần thiết như addXXListener hoặc như vậy , và chuyển logic UI sang Mô hình trình bày, là POJO và có thể được kiểm tra thông qua các bài kiểm tra JUnit thông thường . Bản thân RoboBinding đi kèm với hơn 300 bài kiểm tra JUnit để đảm bảo chất lượng của nó.


1

Theo hiểu biết của tôi, cách Android xử lý mẫu MVC giống như:

Bạn có một Activity, đóng vai trò là bộ điều khiển. Bạn có một lớp có trách nhiệm lấy dữ liệu - mô hình và sau đó bạn có lớp View là dạng xem.

Khi nói về quan điểm, hầu hết mọi người chỉ nghĩ về phần hình ảnh được xác định trong xml. Chúng ta đừng quên rằng View cũng có một phần chương trình với các hàm tạo, phương thức và vv của nó, được định nghĩa trong lớp java.

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.