# Thiết Kế UI Model Bất Biến

> Mô hình hóa screen bằng state bất biến rõ ràng, rồi tự tay sửa state contract

- URL: https://dantech.academy/courses/kotlin-accelerator/engineer-builder/02-compose-ui-from-state/lesson-01-design-immutable-ui-models
- Khóa học: [Mobile Action Pro](https://dantech.academy/courses/kotlin-accelerator.md)
- Module: Compose UI Theo State
- Thời lượng: 10 phút
- Độ khó: beginner
- Truy cập: Dành cho học viên
- English: https://dantech.academy/en/courses/kotlin-accelerator/engineer-builder/02-compose-ui-from-state/lesson-01-design-immutable-ui-models.md

## Mục tiêu

- Thiết kế UiState bất biến với data class, val và ImmutableList
- Mô hình hóa các screen mode bằng sealed UiState thay vì flags rời rạc
- Sửa trực tiếp state contract của Compose UI và cách validate  bằng unit test

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

1. Mục Tiêu Bài Học
2. Phần 1: Screen Là Tập Hợp Các State (Trạng thái)
3. Phần 2: Data Contract Không Phải UI Model
4. Phần 3: Bất Biến (Immutable) Là Chìa Khóa Của Composable
5. Phần 4: Đóng Các Screen Mode Bằng Sealed State
6. Phần 5: Vì Sao Flags Rời Rạc Là Red-flag
7. Phần 6: Drill 1, Đổi Số Lượng Skeleton Row
8. Phần 7: Drill 2, Thêm Một Sealed Variant
9. Phần 8: Cái Gì Thuộc Persistent UI State?
10. Code Reading Path
11. Checkpoint
12. Bad Smells

## 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/kotlin-accelerator/checkout)

---

- Bài trước: [Data Stack Đa Nền Tảng](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/01-shared-kmp-foundations/lesson-04-kmp-data-stack.md)
- Bài tiếp theo: [Quản lý User Intent Bằng Sealed Actions](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/02-compose-ui-from-state/lesson-02-model-user-intent-with-sealed-actions.md)
