Thách thức kỹ thuật
Giai đoạn tiếp theo của engine Học — ôn luyện phỏng vấn kỹ thuật — phụ thuộc vào một bộ dữ liệu JSON câu hỏi phỏng vấn có cấu trúc mà tôi chưa hoàn thiện. Đây là một phụ thuộc về nội dung, không phải một vấn đề kiến trúc: bộ lập lịch, mô hình dữ liệu cục bộ, và các màn hình Học mà tính năng này sẽ chạy trên đó đều đã được xây dựng và kiểm thử; điều còn thiếu là nội dung bộ câu hỏi thực tế. Ngoài ra, hai vấn đề tương tự lặp lại ở phần còn lại của ứng dụng: giữ an toàn cho liên kết tùy chọn giữa một Công việc và một Mục tiêu mà không dùng khóa ngoại trong cơ sở dữ liệu, và biến câu hỏi "công việc này có nên nhắc tôi ngay bây giờ không" thành một quy tắc duy nhất, có thể kiểm thử được, thay vì logic rải rác ở bất cứ đâu có thể làm thay đổi một công việc.
Cách tôi tiếp cận
Việc xác định có nên nhắc hẹn hay không là một hàm thuần túy duy nhất, nhận trạng thái hiện tại của một công việc và trả về liệu có nên tồn tại một lời nhắc ngay lúc này hay không — mọi luồng mã có thể làm thay đổi câu trả lời đó đều gọi cùng một hàm, nên chỉ có đúng một nơi chứa quy tắc này. Mối quan hệ Mục tiêu/Công việc là một tham chiếu mềm có chủ đích: xóa một Mục tiêu sẽ xóa liên kết trên các Công việc của nó trước, rồi mới xóa chính Mục tiêu, để một sự cố xảy ra giữa hai bước đó không bao giờ có thể để lại một tham chiếu mồ côi, mà không cần một giao dịch cơ sở dữ liệu để đảm bảo an toàn. Bộ lập lịch ôn tập của engine Học là một thuật toán lặp lại ngắt quãng nhỏ, tự chứa, hoạt động trên dữ liệu thuần túy, được tách riêng khỏi lớp repository và giao diện để có thể kiểm thử trực tiếp và tái sử dụng cho một danh mục nội dung mới — như câu hỏi phỏng vấn — khi nội dung đó tồn tại, mà không cần thay đổi logic lập lịch.

