# Domain vs Data: Đâu Là Nơi Đặt Logic?

> Vì sao phần dữ liệu của 1 tính năng cần tới 4 file ở 2 module khác nhau?

- URL: https://dantech.academy/courses/kotlin-accelerator/engineer-builder/04-clean-architecture-integration/lesson-02-separate-repository-contracts-and-data-implementations
- Khóa học: [Mobile Action Pro](https://dantech.academy/courses/kotlin-accelerator.md)
- Module: Clean Architecture Và Integration
- Thời lượng: 12 phút
- Độ khó: intermediate
- Truy cập: Dành cho học viên
- English: https://dantech.academy/en/courses/kotlin-accelerator/engineer-builder/04-clean-architecture-integration/lesson-02-separate-repository-contracts-and-data-implementations.md

## Mục tiêu

- Chọn giữa repository, service và manager theo vai trò thật
- Hệ quả nếu gom tất cả vào 1 file
- Đọc DomainResult, DomainFailure và biết lỗi được phân loại một lần ở :data

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

1. Mục Tiêu Bài Học
2. Phần 1: Giới Thiệu Module Dependencies
3. Phần 2: Lỗi Được Phân Loại Ở :data, Một Lần
4. Phần 3: Abstraction Chỉ Public Những Thứ Thiết Yếu
5. Phần 4: Tại Sao Là Repository, Service Hay Manager?
6. Phần 5: Contract Đi Theo Consumer
7. Lộ Trình Đọc Code
8. Bad Smells
9. Điều Cần Nhớ

## 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: [Use Case: Đơn Vị Nghiệp Vụ Của App](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/04-clean-architecture-integration/lesson-01-read-domain-use-cases.md)
- Bài tiếp theo: [Clean Architecture Của Cú Tap Sign-In](https://dantech.academy/courses/kotlin-accelerator/engineer-builder/04-clean-architecture-integration/lesson-03-trace-supabase-auth-flow.md)
