• Home
  • |
  • Hướng dẫn mô hình MVVM trong ios kỳ 1: Tổng quan

Tháng Mười 2, 2019

Hướng dẫn mô hình MVVM trong ios kỳ 1: Tổng quan

Xem tổng quan và nội dung của series tại đây.

Hello, xin chào và chào mừng các bạn đã quay trở lại blog của mình nhé! 😄

Nếu là một lập trình viên ios hẳn nhiên bạn đã từng nghe hoặc biết đến mô hình MVVM. Vậy thì:

  • Mô hình MVVM là gì?
  • Nguyên lý hoạt động của mô hình MVVM như thế nào?
  • Làm thế nào để sử dụng mô hình MVVM đúng cách?

Bài viết hôm nay sẽ trả lời bạn những câu hỏi này.

Lưu ý: Bài viết này mình chỉ giải thích về mặt lý thuyết. Sang bài viết tiếp theo mình sẽ demo code sau nhé. Và mình sẽ chỉ nói những phần trọng tâm chính mà mình hiểu và ứng dụng thường xuyên nhất, giúp các bạn tiết kiệm thời gian để tìm hiểu nhất.

MVVM là gì?

MVVM là một mô hình kiến trúc cho các dự án phần mềm giống như MVC, VIPER, MVP, …

MVVM được sử dụng phổ biến vì những lợi ích sau so với MVC:

  • Giúp phân tách giữa logic và view một cách rõ ràng và rạch ròi.
  • Hỗ trợ unit test hiệu quả.
  • Hỗ trợ tốt cho dự án hỗ trợ nhiều loại thiết bị và kích thước khác nhau.

Nguyên lý cơ bản của MVVM

MVVM là cách viết tắt của 3 từ Model-View-ViewModel

Mô hình này có 3 thành phần chính:

  • Model: Đại diện cho phần dữ liệu về đối tượng nghiệp vụ. Bạn có thể tưởng tượng 1 ứng dụng nhắc việc đơn giản sẽ có các đối tượng như công việc, người dùng. Khi đó thì công việc, người dùng chính là Model.
  • View: Hiển thị nội dung được vẽ trên màn hình thiết bị, tiếp nhận các sự kiện input từ user.
  • ViewModel: Phần logic trung gian giữa Model và View. Ví dụ một view hiển thị icon loading, thì trạng thái ẩn hay hiện icon loading sẽ do ViewModel quản lý. View chỉ việc lấy thông tin trạng thái này và hiển thị theo thôi.

Mối quan hệ giữa các thành phần trong mô hình MVVM

Bạn có xem phim Peppa Pig không nhỉ? Nếu bạn chưa biết thì Peppa Pig là những nhân vật trong bộ phim hoạt hình cùng tên đang nổi tiếng chiếu trên TV ở nhiều nước trên thế giới. Một số cầu thủ bóng đá thậm chí còn săm mình hình Peppa Pig.

Để biết thêm bạn có thể xem tại đây để biết Peppa Pig hot cỡ nào nhé.

OK lan man vậy đủ rồi 😃. Giờ thì bạn hãy tưởng tượng ra heo mẹ và heo con như sau:

  • Heo mẹ có thể yêu cầu, ra lệnh (action) cho heo con làm việc này việc kia.
  • Heo con bị bệnh, bị đói sẽ khóc lóc, la làng gì đó và có thể quan sát được (observable) đối với heo mẹ. Heo mẹ luôn quan sát các tín hiệu từ heo con và thay đổi nét mặt từ đang vui chuyển sang buồn tương ứng chẳng hạn. Tuy nhiên heo con không biết gì về heo mẹ cả.

Giờ bạn hãy suy nghĩ tương tự. Lần này là giữa heo mẹ và heo bố:

Sau đó bạn hãy tưởng tượng rằng heo bố là View / ViewController, heo mẹ là ViewModel, heo con là Model. Ráp vào chúng ta sẽ có mô hình MVVM:

Khá đơn giản đúng không nào các bạn? Mà nếu không thì mong các bạn comment góp ý nhé 😃. Mình sẽ chỉnh sửa lại cách giải thích để có thể đơn giản và dễ hiểu hơn nữa.

Như vậy mối quan hệ của mô hình MVVM được diễn đạt như sau:

  • Model được nắm giữ bởi ModelView, hay có thể nói ModelView biết mọi thứ về Model.
  • ModelView được nắm giữ bởi View, hay có thể nói View biết mọi thứ về ModelView.

Ở chiều ngược lại, mối quan hệ được thể hiện dưới dạng observable như sau:

  • Model observable đối với ModelView thông qua data binding hoặc notification. Model không biết gì về ModelView.
  • ModelView observable đối với View thông qua data binding hoặc notification. ModelView không biết gì về View.

Đặc biệt chúng ta cần lưu ý như sau:

  • Model không biết gì về ModelView.
  • ModelView không biết gì về View.

Chỉ có người này này biết và theo dõi người kia, người kia thì không biết gì cả.

Bạn hãy ghi nhớ kỹ câu này, đây chính là khẩu quyết bí yếu nhất khi hiện thực mô hình MVVM.

Nếu làm sai tức bạn đang làm một mô hình khác, không phải MVVM.

Bản thân cá nhân mình khi làm cũng luôn nhẩm đi nhẩm lại câu này và nhờ vậy giải quyết được nhiều vấn đề khó khăn khi thiết kế module. 😃

Tổng kết

Qua bài viết trên chúng ta đã đi qua những khái niệm và nguyên lý hoạt động cơ bản của mô hình MVVM trong iOS.

Điểm mạnh của mô hình MVVM nằm ở chỗ nó phân tách logic giữa View và Model thành ra một lớp riêng là ViewModel. Nó giúp cho code được tách bạch và rõ ràng hơn. Đặc biệt nếu sử dụng kết hợp cùng với Dependency Injection thì mô hình này hỗ trợ unit test rất tốt.

Ở bài viết sau mình sẽ hướng dẫn thực hiện một ví dụ thực tế khi ứng dụng mô hình này.

Mong các bạn chú ý và theo dõi nhé.

Cám ơn các bạn và hẹn gặp lại ở bài viết tiếp theo nhé 😄.

Related Posts

Custom text input trong Eureka

Custom picker row trong Eureka

Hướng dẫn cài đặt React Native đơn giản bao chạy được tháng 01/2020

Hướng dẫn mô hình MVVM trong ios kỳ 4: Dependency Injection và Unit Test ViewController

Hiển Phạm


Mình là một lập trình viên ios. Khi rảnh rỗi mình thích chơi game, đọc sách và tìm hiểu nhiều hơn về kỹ thuật lập trình.

Your Signature

Leave a Reply


Your email address will not be published. Required fields are marked

{"email":"Email address invalid","url":"Website address invalid","required":"Required field missing"}