App offline-first cho phép dùng chức năng cốt lõi không cần mạng: đọc/ghi vào kho cục bộ trước, rồi đồng bộ với server khi có kết nối. Local là nguồn UI đọc ra; mạng chỉ để đồng bộ.
Thành phần:
- Nguồn dữ liệu cục bộ (SQLite/Room/Realm) làm single source of truth cho UI.
- Repository điều phối giữa local và network.
Ghi khi offline:
- Queue/outbox: xếp thao tác ghi lại, gửi khi online (dùng WorkManager/background sync).
- Cập nhật UI lạc quan (optimistic) ngay, hoàn tác nếu server từ chối.
Đồng bộ & xung đột:
- Kéo (pull) theo yêu cầu, đẩy (push) chủ động, hoặc lai (hybrid).
- Xung đột: chiến lược last-write-wins theo timestamp, hoặc merge theo field, hoặc để người dùng chọn; đánh version/updatedAt để phát hiện lệch.
Hay hỏi: vì sao cần idempotency khi retry ghi, và cách tránh mất dữ liệu khi cùng lúc sửa hai nơi.