# MVVM: Model, View, ViewModel in Flutter

> Ba giới hạn của setState khi app vượt một màn hình, trách nhiệm của Model, ViewModel, View, và tầng domain không import Flutter.

- URL: https://dantech.academy/courses/flutter-mobile-101/03-mvvm/lesson-01-why-mvvm-and-three-layers
- Khóa học: [Flutter Mobile 101](https://dantech.academy/courses/flutter-mobile-101.md)
- Module: MVVM
- Thời lượng: 18 phút
- Độ khó: beginner
- Truy cập: Dành cho học viên

## Mục tiêu

- Chỉ ra được ba vấn đề cụ thể mà setState gây ra khi app lớn hơn một màn hình
- Phân biệt trách nhiệm của Model, ViewModel và View, và quy tắc phụ thuộc một chiều
- Chứng minh bằng một lệnh chạy được rằng tầng domain không phụ thuộc Flutter

## Nội dung bài học

1. Một Yêu Cầu Nhỏ Làm Vỡ Mọi Thứ
2. Ba Vấn Đề, Gọi Đúng Tên
3. Ba Tầng
4. Bằng Chứng: Domain Không Biết Flutter Tồn Tại
5. Cây Thư Mục Của Repo
6. MVVM So Với Những Tên Bạn Nghe Ở Nơi Khác

## Học cùng AI agent

Toàn bộ bài học dành cho học viên của khóa. Học viên mở bài trên web và bấm nút **Markdown** để copy toàn bài, rồi dán vào Claude, ChatGPT, Cursor hoặc agent bạn đang dùng. Nhanh hơn: tạo token ở `/profile/ai-agents` và agent đọc bài trực tiếp qua MCP.

- [Đăng ký khóa học](https://dantech.academy/flutter-mobile-101/checkout)

---

- Bài trước: [State lifecycle và AnimationController](https://dantech.academy/courses/flutter-mobile-101/02-widget-essentials/lesson-08-state-lifecycle-and-animation.md)
- Bài tiếp theo: [Immutable model và sealed class](https://dantech.academy/courses/flutter-mobile-101/03-mvvm/lesson-02-model-and-ui-state.md)
