📄️ UDF, UI state và event delivery
Bài này đào sâu câu hỏi “state xuống, event lên” và tình huống “kết quả request đến lúc UI đang STOPPED”. Vấn đề không chỉ là chọn StateFlow hay SharedFlow: cần xác định nguồn dữ liệu, quyền sở hữu và điều kiện để coi một kết quả đã được xử lý.
📄️ Clean Architecture và dependency boundaries
Clean Architecture đặt dependency của source code hướng về policy/abstraction ổn định hơn. Trong Android, một thiết kế thường tách UI, logic nghiệp vụ và nguồn dữ liệu, nhưng không có yêu cầu mọi app phải có đúng ba Gradle module hoặc một UseCase cho mỗi hàm repository.
📄️ Modularization, DI và build performance
Tách module có thể cải thiện encapsulation, ownership, reuse và khả năng xử lý công việc độc lập. Nó cũng có chi phí configuration, plugin, code generation và dependency graph. Không có quy luật “càng nhiều module càng build nhanh”.
📄️ MVVM và MVI — state, reducer và concurrency
MVVM và MVI là những họ cách tổ chức presentation logic, có nhiều biến thể trong thực tế. ViewModel có thể expose immutable state và dùng reducer; một màn hình gọi là MVI vẫn có thể bị race condition hoặc mất event. Đánh giá implementation qua ownership, transition và failure semantics thay vì chỉ tên pattern.
📄️ MVVM và screen state có thể kiểm chứng
Trong mô hình MVVM thường dùng trên Android, UI render state và chuyển action tới ViewModel; ViewModel phối hợp dữ liệu để tạo screen state. MVVM không quy định mọi logic đều phải nằm trong ViewModel hoặc mọi UI chỉ được có một Flow. Quan trọng là source of truth và lifetime rõ ràng.