Bộ máy phát hiện xung đột
Đúng một biểu thức nửa mở trên số phút nguyên với thời gian đệm đã gộp sẵn, chạy ở bản xem trước khi kéo và chạy lại bên trong lệnh ghi.
Mười lăm ngày lịch của một tiệm làm tóc với sáu nhân viên, nơi bộ máy phát hiện xung đột chính là sản phẩm còn mọi thứ khác chỉ là lớp vỏ quanh nó. Thời gian là số phút nguyên chứ không phải đối tượng ngày tháng, nên hai lịch hẹn chạm nhau đúng mười giờ là hợp lệ, còn chồng nhau một phút thì không.
Mở booking.taiphamsolutions.com trong tab mới. Không cần tài khoản, không cần đăng ký, và mọi thao tác của bạn đều không rời khỏi trình duyệt. Ứng dụng demo chỉ có bản tiếng Anh.
Cái bảng là một ngày gồm các cột nhân viên, trên đó vẽ lịch hẹn, giờ nghỉ và ngày nghỉ. Cả ba có cùng một hình dáng, cố ý như vậy, để bộ máy chỉ có đúng một nhánh xử lý và không thể đối xử với một trong ba khác đi. Kéo một lịch hẹn thì bóng mờ đỏ lên ngay khi nó sắp va vào thứ khác, kèm tên khối đang chặn và số phút chồng lấn đếm chính xác.
Ba quyết định gánh cả sản phẩm. Thời gian là số phút nguyên tính từ mốc epoch chứ không phải một đối tượng ngày tháng, nên một điểm kết thúc bằng đúng điểm bắt đầu là chính xác và việc bám lưới không thể trôi đi. Thời gian đệm được gộp vào khoảng thời gian trước khi đem ra so sánh, rồi đúng một biểu thức nửa mở trả lời, chặt ở cả hai đầu và có chốt chặn cho khoảng rỗng. Và lệnh chặn cứng được thực thi bên trong giao dịch cơ sở dữ liệu chứ không phải ở bản xem trước, vì giữa lúc kiểm tra và lúc ghi, một tab khác đã lấy mất chỗ.
Bốn vai quyết định ai được làm gì. Nhân viên chỉ đụng được vào cột của mình, quản lý hoặc quản trị viên có thể bỏ qua một cảnh báo mềm như chạm trần giờ làm, và không một ai được vượt qua một xung đột cứng. Một nút ép đặt sẽ khiến mọi bảo đảm khác trên bảng thành có điều kiện, nên không có nút đó.
Mở bảng biên và xem cả 37 trường hợp chạy trực tiếp trong trình duyệt của bạn. Chúng chạy trên đúng bộ máy mà cái bảng đang dùng, nên không thể lệch khỏi nó.
Sáu nhân viên, tám dịch vụ mang theo thời gian chuẩn bị và dọn dẹp riêng, ba phòng, 24 khách hàng, và mười lăm ngày ca làm cùng lịch hẹn quanh hôm nay.
Đúng một biểu thức nửa mở trên số phút nguyên với thời gian đệm đã gộp sẵn, chạy ở bản xem trước khi kéo và chạy lại bên trong lệnh ghi.
Cả 37 trường hợp biên chạy trực tiếp trong trình duyệt của bạn trên đúng bộ máy mà cái bảng đang chạy, mỗi trường hợp kèm một dòng thời gian thu nhỏ nói rõ nó chứng minh điều gì.
Sáu lịch hẹn được đánh dấu trên bảng hôm nay: hai cái chạm nhau đúng phút, một cái bắt đầu ngay khi giờ dọn dẹp kết thúc, một lịch đã hủy nằm dưới một lịch còn sống, một giờ nghỉ, nửa ngày nghỉ phép, và một lần trùng lịch mà bộ máy sẽ không bao giờ tạo ra.
Nhân viên bị giới hạn trong cột của mình, cảnh báo mềm mà quản lý có thể bỏ qua, và một xung đột cứng không vai nào vượt được.
Mọi bước dưới đây đều diễn ra bên trong bản demo. Không có điểm nào mà công việc rời khỏi trình duyệt rồi quay lại.
Nhân viên, dịch vụ và giờ. Dịch vụ mang theo thời gian chuẩn bị và dọn dẹp của riêng nó, và từ đây chúng là một phần của khoảng thời gian.
Bóng mờ khi kéo đỏ lên ngay khi khoảng thời gian đã gộp chồng lên một khoảng khác, và bảng bên cạnh nêu tên khối chặn cùng số phút.
Khi xác nhận, giao dịch đọc lại toàn bộ hiện trạng rồi chạy đúng cái hàm mà bản xem trước đã chạy, vì một bản xem trước không thể thực thi bất cứ điều gì.
Cho hai tab tranh cùng một khung giờ thì tab thua bị từ chối vì thua giao dịch, chứ không phải vì chậm hơn.
Mọi lần thử đều đi tới giao dịch, nên nhật ký giữ cả những lần bị từ chối lẫn những lần đặt được, và đó mới là các dòng đáng có.
Hủy một lịch hẹn đang chồng lên lịch khác vẫn được cho phép, vì một bộ máy không bao giờ được chặn đúng cái hành động gỡ được xung đột.
Không có máy chủ nào phía sau, và chính điều đó quyết định cả hai cột. Cột trái là những phần mà ràng buộc ấy khiến chúng đáng được làm cho tử tế. Cột phải là những phần nó loại trừ.
Phần mô tả này thuyết phục hơn cả bản thân ứng dụng, nên nó nằm ngay trên trang thay vì trong một kho mã không ai mở được.
Một bản demo tồn tại để chứng minh điều gì đó trong danh sách dịch vụ, chứ không phải để tự nó gây ấn tượng. Đây là những dịch vụ mà bản demo này chứng minh.
Mỗi bản là một loại bài toán khác nhau, và tất cả đều nằm trong menu Bản demo ở đầu trang.
Bản này được làm dưới một ràng buộc mà không ai tự chọn. Bản của bạn sẽ có máy chủ, tài khoản thật, và cả những phần thực sự khó trong nghiệp vụ. Hãy cho chúng tôi biết phần mềm cần làm được gì, chúng tôi sẽ nói cần những gì để làm ra nó.
Cứ mang tới bài toán còn ngổn ngang. Đó là kiểu trao đổi chúng tôi thích nhất.