Dự án Bunpo Go có cấu trúc Firestore khá phức tạp với nhiều subcollection lồng vào nhau, việc thêm một dữ liệu mới bằng cách thủ công trên Firebase Console sẽ rất bất tiện.
Ứng dụng này sẽ đóng vai trò hỗ trợ cho quá trình đó, người dùng chỉ việc nhập các trường thông tin cho các bài tập, đáp án, từ vựng tham khảo, còn các tác vụ điều phối và đẩy dữ liệu lên Firestore sẽ được thực thi tự động qua layer xử lý dữ liệu của ứng dụng.
Giống như dự án gốc, ứng dụng này cũng áp dụng các công nghệ sau để tăng cường khả năng bảo trì và tính mở rộng:
1. Kiến trúc: Ứng dụng tuân thủ mô hình MVVM (Model-View-ViewModel) kết hợp với cấu trúc Clean Architecture.
2. Công nghệ:
- Jetpack Compose: Toàn bộ UI được viết bằng Compose UI, tận dụng
StateFlowvàcollectAsStateWithLifecycleđể tối ưu hóa vòng đời render. - Hilt (Dependency Injection): Thực hiện dependency injection xuyên suốt các tầng, từ Database, API cho đến ViewModel, giúp code dễ dàng Unit Test và giảm độ phụ thuộc.
- Firebase services:
- Firebase Auth: Quản lý định danh người dùng.
- Cloud Firestore: Lưu trữ dữ liệu ngữ pháp theo thời gian thực, hỗ trợ cấu trúc dữ liệu NoSQL linh hoạt.
- Dynamic Form: Giao diện động cho phép người dùng thêm/bớt các trường dữ liệu (Questions, References) linh hoạt. Trạng thái của form được quản lý bằng
SnapshotStateListđể tối ưu hóa việc recomposition khi danh sách thay đổi. - Firestore Write Batch: Sử dụng cơ chế Write Batch cho phép gộp tối đa 500 thao tác ghi (set, update, delete) vào một lần gửi duy nhất, đảm bảo dữ liệu được cập nhật theo nguyên tắc "tất cả hoặc không" (Atomic operations).