Tôi đã dành vài tuần xây dựng hệ thống đặt phòng. Xác thực ✅. Phân quyền ✅.
Chính sách kinh doanh ✅. Các quy tắc đặt phòng phức tạp ✅. Tôi tự hào về điều này.
Rồi tôi nhận được bình luận code (code review) đầu tiên từ mentor của mình.
Tôi đã dành vài tuần xây dựng hệ thống đặt phòng. Xác thực ✅. Phân quyền ✅.
Chính sách kinh doanh ✅. Các quy tắc đặt phòng phức tạp ✅. Tôi tự hào về điều này.
Rồi tôi nhận được bình luận code (code review) đầu tiên từ mentor của mình.
Giải pháp mentor của tôi đề xuất: Pessimistic Locking.
@RepositorypublicinterfaceRoomRepositoryextendsJpaRepository<Room, Long> {
@Lock(LockModeType.PESSIMISTIC_WRITE)@Query("SELECT r FROM Room r WHERE r.id = :roomId")
Optional<Room> findByIdWithLock(@Param("roomId") Long roomId);
}
Nó hoạt động như thế nào:
Khi Người dùng A truy vấn phòng, cơ sở dữ liệu khóa nó
Truy vấn của Người dùng B phải chờ đợi
Người dùng A hoàn thành đặt phòng → giải phóng khóa
Truy vấn của Người dùng B tiếp tục → thấy phòng đã được đặt
Một số bài học đến ngay lập tức. "Ôi, tôi nên xác thực dữ liệu đầu vào."
Cái này đến muộn. Thông qua code review. Thông qua một câu hỏi tôi không thể trả lời.
Nhưng bây giờ nó ở đây, tôi không thể không thấy nó. Mỗi khi tôi viết code chạm vào tài nguyên dùng chung, tôi nghĩ: "Điều gì sẽ xảy ra nếu hai người dùng làm điều này cùng một lúc?"
Đó là dấu hiệu bài học đó dính vào tôi.
Ngày 18 trong 90 ngày. Học được rằng nền tảng quan trọng hơn tính năng. 🚀