1. fsm là gì
fsm được biểu diễn dưới dạng đồ thị có hướng.
Ví dụ: Máy trạng thái hiển thị trạng thái của bài viết trên trang tin tức
- bản nháp,đang xem xét,đã xuất bản là trạng thái của bài báo
- xem xét, phê duyệt, từ chối, hủy xuất bản là các sự kiện. Các sự kiện này được kích hoạt khi nhận được thông tin đầu vào, chẳng hạn như một lượt nhấp vào nút, …những sự kiện này gây ra quá trình chuyển đổi trạng thái (chẳng hạn như từ bản nháp -> đang xem xét), được gọi là quá trình chuyển đổi
- Máy chỉ ở một trạng thái tại một thời điểm
- Ở mỗi trạng thái, chỉ có thể chuyển đổi các trạng thái được phép
- Từ trạng thái hiện tại, bạn có thể biết trạng thái tiếp theo mà máy có thể trải qua
- fsm mô tả các trạng thái, sự kiện và chuyển tiếp giữa các trạng thái, vì vậy fsm có thể được sử dụng để quản lý trạng thái đối tượng hoặc quy trình làm việc.
- Ví dụ: quản lý trạng thái đơn hàng, quản lý trạng thái vé, quản lý trạng thái vai trò trong trò chơi,…
- Chỉ chuyển đổi từ bản nháp sang bản xem xét
- Không thể chuyển bản nháp thành bản xuất bản
- Mã dài, khó mở rộng, dễ bị lỗi
- Nếu bạn thêm nhiều trạng thái vào một bài đăng, bạn phải cập nhật tất cả các hàm update_status
- Nếu có nhiều cách để chuyển đổi giữa các trạng thái, hãy cập nhật tất cả
- Làm thế nào để bạn biết từ trạng thái hiện tại sang trạng thái khác?
- Cách đảm bảo luồng dữ liệu/logic đang chạy đúng
- Việc triển khai fsm không quá phức tạp mà lại có thể tái sử dụng nhiều lần
- Việc thêm các trạng thái hoặc chuyển tiếp mới không yêu cầu thay đổi mã nhiều
- Quá trình và sự kiện được hiển thị rõ ràng trên cấu hình trạng thái
- Tìm hiểu thêm về fsm tại Brilliant
- Máy trạng thái hữu hạn trong phát triển web
- Thư viện fsm cho mô hình ecto ecto_state_machine
- Quy trình làm việc của máy trạng thái trượt: Các mẫu và kỹ thuật bí truyền
Tính năng
Trong các mô hình sử dụng dfs máy trạng thái xác định.
2. Ứng dụng fsm trong lập trình
Trong ví dụ trên, mỗi bài đăng chỉ có thể có một trạng thái tại một thời điểm và chỉ có thể chuyển từ 1 trạng thái sang một số trạng thái được xác định trước:
2.1 Khi không sử dụng fsm
Khi không dùng fsm, code sẽ phải dùng rất nhiều điều kiện if … other … or case (switch … case … in other language)
Câu hỏi:
2.2 Sử dụng fsm
Trong ví dụ này, chúng tôi sử dụng thư viện as_fsm để hỗ trợ triển khai máy trạng thái trên ngôn ngữ tiên dược