Sự khác biệt giữa MVI so với MVC và MVVM là gì


8

Có sự khác biệt nào giữa kiến ​​trúc Model-View-Intent "mới hơn" so với kiến ​​trúc "cũ" như MVC và MVVM không?

Vấn đề nào MVI giải quyết? Điểm tương đồng với MVC / MVVM là gì? Sự khác biệt là gì?

Có những câu hỏi tương tự đã có trên stackoverflow cho MVC / MVV / MVP nhưng cho đến nay vẫn chưa có câu trả lời nào giải thích cho MVI.

Sự khác biệt giữa MVC và MVVM là gì?

MVP và MVC là gì và sự khác biệt là gì?


Câu trả lời:


21

từ kinh nghiệm của tôi, từng mẫu kiến ​​trúc của những cái đó đã được phát minh để giải quyết vấn đề cụ thể mà cái trước đó đã bỏ qua hoặc chưa được quan sát.

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

Bộ điều khiển xem mô hình

trong các ứng dụng UI, trách nhiệm hiển thị dữ liệu lên màn hình hoặc logic nghiệp vụ và liên kết chúng với nhau lúc đầu không rõ ràng. Vì vậy, MVC đã xác định trách nhiệm đó đối với ba thành phần, mỗi thành phần có một mục đích và hình ảnh mô tả mối quan hệ giữa ba thành phần đó.

Chế độ xem - là thành phần UI có tất cả các thuộc tính như màu sắc, hình dạng, công cụ để lắng nghe các sự kiện nhấp chuột, v.v.

Mô hình - là thành phần xác định logic nghiệp vụ mà bạn muốn chế độ xem hiển thị và hành xử tương ứng.

Bộ điều khiển - là người thay đổi mô hình, vì vậy nếu chế độ xem có tên để lưu, thì View chuyển nó cho bộ điều khiển sau đó bộ điều khiển thao tác mô hình với các hành động đúng.

MVP - Người dẫn chương trình xem mô hình

vấn đề với MVC là có sự kết hợp tuyệt vời giữa ba thành phần, nếu bạn muốn thay đổi các cuộc gọi xem, nó sẽ yêu cầu bạn cập nhật bộ điều khiển và Model. và điều đó rõ ràng từ bức tranh MVC, mối quan hệ giữa ba thành phần rất ràng buộc, bạn không thể thay thế một trong những thành phần này mà không có thành phần kia. Vì vậy, MVP đã cung cấp một giải pháp rõ ràng hơn cho vấn đề trước đó bằng cách tách Mô hình và Chế độ xem, giữ các tương tác giữa chúng thông qua Người thuyết trình, Người trình bày là người trung gian mà mỗi chế độ xem và mô hình gọi. Vì vậy, nếu bạn muốn lưu danh sách các bộ phim yêu thích, hành động Xem nghe người dùng (*), sau đó gọi hàm người thuyết trình cập nhật mô hình, sau đó mô hình báo cho Người thuyết trình xem điều đó có thành công hay không và Người thuyết trình nói với Chế độ xem để hiển thị đúng thông điệp.

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

MVVM - Chế độ xem mô hình ViewModel

với sự gia tăng của mô hình phản ứng, rõ ràng là chúng ta có thể cung cấp nhiều mối quan tâm riêng biệt hơn trong Ứng dụng UI bằng cách chỉ quan sát các thay đổi và hành xử trên nó. vì vậy, ví dụ có một nhấp chuột trong chế độ xem cần gọi api để nhận các chương trình truyền hình mới nhất.

lần nhấp này sẽ được quan sát tại ViewModel, ViewModel tương tác với mô hình để lấy dữ liệu và cuối cùng ViewModel đăng những dữ liệu đó lên chế độ xem bằng cách sử dụng trình quan sát khác ..

vì vậy, trong ngắn hạn, View quan sát ViewModel để nhận các bản cập nhật UI và ViewModel quan sát View để gọi hành động đúng với Model. Mẫu quan sát đã chứng minh giá trị của mình trong việc tách logic, vì vậy ở đây bạn đi một Mẫu mới.

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


Vì vậy, sau khi nói về các mẫu kiến ​​trúc phổ biến nhất, mỗi người đã cố gắng tách mã UI khỏi mã doanh nghiệp. nhưng các mẫu trước đó không ràng buộc cập nhật UI với các trạng thái khác nhau cùng một lúc.

nếu bạn gặp sự cố liên quan đến tải đang xuất hiện cùng với thông báo lỗi, bạn sẽ hiểu tôi đang nói về vấn đề gì, vì vậy để duy trì trạng thái UI, bạn phải nỗ lực thêm để xem những gì bạn đã viết sai gây ra loại vấn đề.

MVI - Ý định người mẫu

MVI dựa trên một ý tưởng cũ gọi là máy trạng thái hữu hạn , bất kỳ hệ thống hoặc thành phần nào cũng có thể dự đoán được, tập hợp các trạng thái là một máy trạng thái hữu hạn. trong MVI, bất kỳ cập nhật nào về UI đều được xác định bởi trạng thái mới, bạn có thể thấy điều này là quá sức, nhưng hãy tưởng tượng rằng bạn có một ảnh chụp màn hình cho mỗi lần thay đổi UI, đó là trạng thái. bạn có thể gỡ lỗi, kiểm tra, tái tạo các vấn đề trạng thái ngay bây giờ.

Làm thế nào để đạt được điều này, đó là MVI trong thực tế. bất kỳ tương tác người dùng nào với UI, được xác định trong MVI bởi Intent , Intent là những gì người dùng cần từ hành động này, nó có thể là một bộ phim, làm mới màn hình, thậm chí có thể mở màn hình, trong trường hợp đó là Intent một ý định ban đầu để hiển thị màn hình với tất cả dữ liệu cần thiết.

Thành phần nào khiến những Ý định đó hành động theo chúng, đó là những gì bạn xác định .. bạn có thể sử dụng Người thuyết trình hoặc ViewModel, không thành vấn đề, MVI là một cách thực hành hơn là sử dụng thành phần trung gian mới.

Tôi sẽ tiếp tục với ViewModel, ViewModel sẽ nhận được những ý định đó, quyết định nên gọi usecase nào (Hành vi mẫu).

tất cả các giai đoạn chuyển qua chức năng mùa hè trong ViewModel, quyết định trạng thái nào cần được phản ánh cho Chế độ xem, nó cũng cung cấp cho bạn trạng thái trước đó, do đó bạn có trạng thái trước và trạng thái mới để cập nhật màn hình, làm giảm cập nhật kết xuất và View chỉ nhận các gợi ý mới để tự cập nhật.

và cuối cùng MVI là dòng chảy đơn hướng, nó bắt đầu bằng Chế độ xem và kết thúc bằng Chế độ xem.

... Xem -> ViewModel / Người trình bày -> Mẫu -> Xem -> ...

MVI khác biệt trong cách quản lý nhà nước, đó là sự kết hợp của một số ý tưởng để xây dựng ứng dụng ổn định hơn và có thể kiểm tra.


4

Một sự cố thực sự tuyệt vời là ở đây: https://academy.realm.io/posts/mvc-vs-mvp-vs-mvvm-vs-mvi-mobilization-moskala/ . Về cốt lõi, MVI đang lấy ý tưởng của MVVM (trạng thái UI không trạng thái), các mô hình và logic kinh doanh riêng biệt và đặt khung phản ứng lên trên nó. Tạo ra các luồng sự kiện thay vì các hành động rời rạc, làm cho các phần tử tiếp nhận trở thành người tiêu dùng của các luồng được chuyển đổi thay vì các phần tử trình bày và biến trạng thái thành một thứ chỉ đọc, dùng một lần được thực hiện theo cách có cấu trúc rõ ràng.

Điều này đòi hỏi bạn phải có một cách tiếp cận chức năng để viết ứng dụng của mình, đặc biệt là phần UI / View của mọi thứ. Trạng thái không được sửa đổi, trạng thái mới được tính từ một ý định và một loạt các trường hợp sử dụng. Điều này được giải thích khá tốt ở đây: https://proandroiddev.com/mvi-a-new-member-of-the-mv-band-6f7f0d23bc8a .

Nó nhằm giải quyết sự phức tạp ngày càng tăng của các ứng dụng UI hiện đại, những người có số lượng trạng thái phía máy khách không tầm thường cần được quản lý rõ ràng. Như hầu hết các lập trình viên có kinh nghiệm đều biết, những thất bại phức tạp nhất đến từ trạng thái đang được sửa đổi một cách bất ngờ. Thao tác trạng thái này có thể dẫn đến trạng thái "không hợp lệ" mà ứng dụng của bạn không thể xử lý, đây thực sự là một ứng dụng bị lỗi. MVI giải quyết vấn đề này bằng cách thực hiện chuyển đổi trạng thái rõ ràng và được cấu trúc cẩn thận để hệ thống của chúng không bao giờ đến trạng thái không hợp lệ và trạng thái luôn dễ hiểu.

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.