Thách thức kỹ thuật
Hai điểm nổi bật. Thứ nhất, CIPPO tự xây dựng cơ chế dependency injection thủ công (không dùng Hilt/Dagger/Koin) — một class factory duy nhất khởi tạo 196 ViewModel, và việc mở rộng nó an toàn khi thêm tính năng mới đòi hỏi hiểu và duy trì đúng cách làm đó thay vì đi vòng qua nó. Thứ hai, ứng dụng kết hợp một REST API (Retrofit) với nhiều dịch vụ Firebase (Realtime Database, Firestore, Auth, Storage, Messaging) trên một tập tính năng lớn và liên tục phát triển, việc giữ dữ liệu nhất quán trên backend kết hợp này khi xây dựng tính năng mới là một mối quan tâm thường trực.
Cách tôi tiếp cận
Với dependency injection, các tính năng mới được kết nối vào pattern factory thủ công hiện có một cách nhất quán, thay vì đưa thêm một cách tiếp cận DI thứ hai không tương thích vào một ứng dụng đã lớn. Với backend kết hợp, các tính năng được xây dựng để đi qua các lớp trừu tượng nguồn dữ liệu sẵn có của ứng dụng (REST hay Firebase tuỳ tính năng), để phần còn lại của ứng dụng không cần biết tính năng đó dùng backend nào bên dưới.


