Bảng và kéo để gán
Đơn chưa gán, các tuyến trong ngày, và một ô thả tự vô hiệu hóa, mang theo đúng cái giới hạn nó sẽ phá làm chú thích.
Một bàn điều phối và một màn hình tài xế trên cùng một cơ sở dữ liệu trình duyệt. Sáu mươi đơn hàng trải ba ngày, tám tài xế, và một bộ quy tắc từ chối tuyến quá tải ngay tại chỗ thả, rồi từ chối lần nữa bên trong lệnh ghi.
Mở logistics.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.
Người điều phối có cả cái bảng: đơn chưa gán ở một bên, các tuyến trong ngày ở bên kia, kéo để gán, và thứ tự điểm dừng sắp xếp lại được. Tài xế chỉ có một tuyến cùng các điểm dừng trên đó, với lấy hàng, khởi hành, đến nơi, giao hàng và giao thất bại là những thao tác duy nhất. Quản trị viên có tài xế, phương tiện và hộp gửi đi, còn người xem thấy tất cả và không đổi được gì.
Các quy tắc nằm trong một thư mục TypeScript thuần, không có DOM, không có cơ sở dữ liệu và không có framework nào bên trong, và một bài kiểm thử đi khắp thư mục đó để giữ nguyên như vậy. Máy trạng thái của đơn hàng, bộ quy tắc tải trọng và bảng phân quyền đều là hàm, nên đúng phép kiểm tra làm mờ ô thả cũng là phép kiểm tra chạy bên trong lệnh ghi. Một thành phần giao diện quên hỏi cũng không thể tạo ra lỗi tải trọng hay lỗi phân quyền.
Một lần từ chối là một giá trị chứ không phải một ngoại lệ. Hàm bảo vệ trả về lý do nó từ chối, và lý do đó mang theo một khóa dịch, nên lời từ chối hiện ra thành một câu trong ngôn ngữ người đọc thay vì một thông báo lỗi chung chung. Trạng thái, mức ưu tiên và mã thất bại được lưu dưới dạng mã máy rồi mới dịch lúc vẽ ra màn hình, nên chuyển sang tiếng Việt cũng viết lại luôn các dòng nhật ký cũ.
Kéo một đơn hàng cồng kềnh vào tuyến xe máy. Ô thả tự vô hiệu hóa và nói rõ giới hạn nào bị phá, còn lần thử đó vẫn được ghi vào dòng thời gian kiểm toán.
60 đơn hàng trải ba ngày, 8 tài xế, 8 phương tiện và 18 tuyến, với một xe van đang nằm xưởng và một tài xế hết ca, được tạo sẵn ngay lần mở đầu tiên.
Đơn chưa gán, các tuyến trong ngày, và một ô thả tự vô hiệu hóa, mang theo đúng cái giới hạn nó sẽ phá làm chú thích.
Khối lượng, thể tích và số điểm dừng theo từng phương tiện, chặn ở giao diện và khẳng định lại ở tầng kho dữ liệu, nên không nửa nào là chốt chặn duy nhất.
Lấy hàng, khởi hành, đến nơi, rồi một chữ ký vẽ trên canvas, một tấm ảnh, hoặc một mã thất bại kèm ghi chú. Mỗi bước là một chuyển trạng thái hợp lệ, hoặc không có gì cả.
Mọi thay đổi đều ghi sự kiện và mục hộp gửi đi trong cùng một giao dịch, nên nhật ký không thể lệch khỏi dữ liệu mà nó mô tả.
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.
Sáu mươi đơn trải ba ngày, mỗi đơn có khung giờ lấy và khung giờ giao, khối lượng, thể tích và mức ưu tiên.
Đơn được kéo vào tuyến của một tài xế, và giới hạn khối lượng, thể tích, số điểm dừng của phương tiện quyết định ô thả nhận cái gì.
Người điều phối bàn giao tuyến. Từ đây tài xế là vai duy nhất di chuyển được một điểm dừng, và chỉ trên tuyến của chính mình.
Lấy hàng, khởi hành, đến nơi, giao hàng. Một bước nhảy mà máy trạng thái không cho phép sẽ bị từ chối kèm lý do đã dịch, chứ không bị bỏ qua lặng lẽ.
Một chữ ký trên canvas hoặc một tấm ảnh đóng lại điểm dừng. Một lần thất bại cũng đóng nó lại, kèm mã và ghi chú, vì một ngày không có gì hỏng thì không phải một ngày làm thật.
Thực thể, sự kiện kiểm toán và mục hộp gửi đi được ghi trong một giao dịch, và bộ đếm Lamport tăng ngay bên trong giao dịch đó, nên hai tab không thể sinh ra cùng một giá trị đồng hồ.
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.