1. Giới thiệu chung

Trong phát triển phần mềm, việc tổ chức mã theo mô hình kiến trúc rõ ràng là rất quan trọng để dễ dàng bảo trì, mở rộng và kiểm thử. Hai mô hình phổ biến trong phát triển ứng dụng là:

  • MVC (Model – View – Controller)

  • MVP (Model – View – Presenter)

Cả hai mô hình này đều hướng đến mục tiêu phân tách rõ ràng logic nghiệp vụ với giao diện người dùng, giúp giảm sự phụ thuộc giữa các thành phần.


2. Mô hình MVC (Model – View – Controller)

Cấu trúc

  • Model: Chứa dữ liệu, logic nghiệp vụ và các thao tác với dữ liệu (ví dụ: truy vấn cơ sở dữ liệu).

  • View: Chịu trách nhiệm hiển thị giao diện người dùng.

  • Controller: Nhận sự kiện từ View, xử lý và cập nhật Model hoặc điều hướng lại View.

Luồng hoạt động

  1. Người dùng tương tác với View (giao diện).

  2. View gửi yêu cầu đến Controller.

  3. Controller xử lý logic và cập nhật Model.

  4. Model thay đổi sẽ tự động thông báo lại cho View để cập nhật giao diện.

Ưu điểm

  • Phân tách rõ ràng giữa giao diện và logic.

  • Dễ bảo trì, dễ kiểm thử.

Nhược điểm

  • Khi ứng dụng phức tạp, Controller có thể trở nên quá tải (God Object).

  • Sự liên kết giữa các thành phần đôi khi vẫn chặt chẽ.


3. Mô hình MVP (Model – View – Presenter)

Cấu trúc

  • Model: Giống như MVC, chịu trách nhiệm xử lý dữ liệu.

  • View: Là giao diện người dùng, nhưng không trực tiếp xử lý dữ liệu, chỉ hiển thị và gửi sự kiện.

  • Presenter: Là cầu nối giữa Model và View. Nó nhận sự kiện từ View, tương tác với Model và trả kết quả lại cho View.

Luồng hoạt động

  1. Người dùng tương tác với View.

  2. View gọi phương thức trong Presenter.

  3. Presenter xử lý logic, làm việc với Model.

  4. Sau khi xử lý xong, Presenter gửi dữ liệu lại cho View.

Ưu điểm

  • View hoàn toàn bị động và dễ kiểm thử.

  • Presenter không phụ thuộc vào framework UI cụ thể, tăng tính tái sử dụng.

Nhược điểm

  • Cần viết nhiều mã hơn so với MVC.

  • Khi dự án quá lớn, Presenter có thể cũng trở nên phức tạp.


4. So sánh MVC và MVP

Tiêu chí MVC MVP
Cầu nối chính Controller Presenter
View chủ động hay bị động Chủ động Bị động
Dễ kiểm thử Trung bình Cao
Mức tách biệt Không cao bằng MVP Rất cao
Phức tạp Đơn giản hơn MVP Phức tạp hơn MVC

5. Ứng dụng trong Flutter

Flutter không hỗ trợ mô hình MVC hoặc MVP một cách chính thức, nhưng có thể tự tổ chức theo các mô hình này bằng cách chia nhỏ các phần:

  • Model: Dữ liệu, class, service (API, database).

  • View: Widget UI.

  • Controller/Presenter: Có thể là các lớp trung gian (provider, controller) dùng để xử lý logic.

Trong thực tế, Flutter thường sử dụng các mô hình nâng cao như:

  • MVVM (Model-View-ViewModel) kết hợp với Provider, Riverpod.

  • Clean Architecture để tách layer rõ ràng hơn.

About the Author

Tấn Phước

View all author's posts

Leave a Comment

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

Bài viết khác

Kanban

1. Kanban là gì? Kanban là một phương pháp quản lý công việc trực quan, giúp bạn theo dõi tiến độ từng nhiệm vụ. Kanban bắt nguồn từ Nhật Bản, ban đầu được Toyota dùng để quản lý dây chuyền sản xuất, nhưng ngày nay được áp dụng rộng rãi trong các lĩnh vực như […]

Scum

1. Scrum là gì? Scrum là một khung làm việc (framework) giúp các nhóm làm việc cùng nhau để phát triển sản phẩm một cách linh hoạt và hiệu quả. Nó thuộc phương pháp Agile – đề cao sự thích nghi, cộng tác và cải tiến liên tục trong quá trình làm việc. 2. Các […]

So sánh Realm, Hive, Sqflite, và Drift

So sánh Tiêu chí Realm Hive Sqflite Drift Mức độ phổ biến Tăng nhanh (Meta hỗ trợ) Rất phổ biến Rất phổ biến Trung bình (cộng đồng ổn định) Dễ sử dụng, dễ tích hợp Trung bình (cần setup Realm SDK) ★ Rất dễ (NoSQL, không cần SQL) Trung bình (phải viết SQL tay) Trung […]

Testing

I. Testing là gì? Testing (kiểm thử phần mềm) là quá trình đánh giá một hệ thống phần mềm để xác định xem sản phẩm có đáp ứng các yêu cầu được đặt ra hay không, và nhằm phát hiện lỗi nếu có. Testing là một phần quan trọng trong vòng đời phát triển phần […]

Application security

Ứng dụng bảo mật là gì? Application Security (Bảo mật ứng dụng) là quá trình bảo vệ ứng dụng khỏi các lỗ hổng và tấn công từ các mối đe dọa bên ngoài. Quá trình này bao gồm các biện pháp bảo vệ trong suốt vòng đời phát triển phần mềm (SDLC): từ thiết kế, […]

Flutter ChangeNotifier / Provider

ChangeNotifier là gì? ChangeNotifier là một class có sẵn trong Flutter, dùng để thông báo cho các widget khi dữ liệu thay đổi.Nó thường được dùng để tạo ra một “model” – nơi lưu trữ state (trạng thái), sau đó khi dữ liệu thay đổi thì gọi notifyListeners() , tất cả các widget đang “lắng nghe” […]