Swift: Những lợi ích của MVVM (Model - View - ViewModel)

Hầu hết ứng dụng iOS đều được viết dựa trên MVC pattern (Model-View-Controller). Ưu điểm của MVC là đơn giản và dễ dàng sử dụng. Nhưng đôi khi sử dụng MVC trong một số trường hợp thì nó cũng gặp nhiều vấn đề, chưa hoàn hảo lắm nên MVVM là một sự thay đổi hấp dẫn.

Better Separation of Concerns - Chia nhỏ liên kết

Trong project làm bằng MVC pattern, bạn sẽ phải quyết định viết đoạn code ở chỗ nào. Nên viết ở Model, View và thường xuyên để hết ở Controller. Điều này gây ra vấn để là làm cho controller quá lớn đối với các màng hình phước tạp và rất khó để test và quản lý. Đối với MVVM thì làm việc này tốt hơn và việc add thêm một lớp layer ViewModel ở giữa. ViewModel sẽ chuyển đổi thông tin từ lớp model và truyền cho thông tin cho view cần dùng. Controller sẽ không còn chịu trách nhiệm về phần này nửa.

Improved Testability

View Controller gần như không có cách gì test được bởi vì nó liên quan tới lớp layer View. Bằng việc chuyển sang sài ViewModel, testing trở nên dễ dàng hơn, Bởi vì ViewModel không có liên kết với object chưa nó, nên rất đơn giản để viết Unit Test cho ViewModel. Và tất nhiên, Controller sẽ không còn phụ thuộc vào Model nửa. Nên viết Test sẽ dễ dàng hơn bao giờ hết.

Transparent Communication

Sơ đồ làm phân luồng của MVVM được chia thành 4 lớp:

Khi làm việc với MVVM thì cần phải hiểu 6 rule, coi 6 rule như một hướng dẫn sử dụng cũng được.

Rule 1

View không được biết thông tin gì về Controller chứa nó. Nó chỉ hiểu thông tin vừa đủ để hiện thị thông tin mà controller đưa cho nó thôi.

Rule 2

Controller không được biết gì về Model. Đấy là nguyên nhân tạo ra MVVM từ MVC

Rule 3

Model không được biết về View Model chưa nó.

Rule 4

ViewModel là nơi chứa model. Còn đối với MVC thì Controller làm việc này.

Rule 5

Controller chứa view.

Rule 6

Và cuối cùng, Controller chứa ViewModel. Controller sẽ tháo tác với một hoặc nhiều ViewModel

Conclude

Trong phần này, chúng ta mới hiểu khái niệm đơn giản về MVVM, nhưng làm sao để áp dụng MVVM vào Project, và quan trọng nhất là viết Unit Test cho MVVM thì cần những yếu tố nào. Mình sẽ tiếp tục hướng dẫn trong phần tiếp theo.