Akka cung cấp hai cách chồng chéo nhau để quản lý các trạng thái diễn viên, Finite State Machines và unbecome/become. Lợi ích/nhược điểm của họ là gì? Khi nào một trong số họ nên được chọn ở bên kia?FSM vs trở thành/không chắc chắn trong Akka
Trả lời
FSM
là một DSL cho phép bạn xây dựng tinh vi hơn, có thể đọc được máy trạng thái hơn sẽ có thể sử dụng API diễn viên chính. Bạn có khả năng có thể hiển thị mã FSM cho một người kinh doanh và họ có thể xác thực các quy tắc kinh doanh.
DSL FSM
DSL cho phép bạn kết hợp mọi thứ với nhau một cách rõ ràng hơn. Ví dụ: transitions cho phép bạn tính toán logic sẽ phải được nhân đôi trên các hành vi của diễn viên become
. Ngoài ra, bạn có thể đăng ký các diễn viên khác để được thông báo về các quá trình chuyển đổi giúp tách và thử nghiệm.
Đồng thời bộ hẹn giờ được tích hợp độc đáo vào DSL và những thứ như hủy được xử lý sạch sẽ. Việc mã hóa các thông báo hết thời gian bằng cách sử dụng bộ lập lịch có một số lượng nhỏ.
Mặt bên xuống là FSM
là đó là DSL và cú pháp mới cho các thành viên khác trong nhóm tiêu hóa. Phía lên là nó là một DSL và một mức trừu tượng cao hơn nhiều. Tôi nghĩ ngưỡng của Agilesteel ở 2 bang là tốt nhất. Nhưng khi bạn vượt qua 2 trạng thái, lợi ích của FSM
thực sự hấp dẫn.
Chắc chắn đọc the FSM docs và accompanying examples tương phản become
và FSM
.
Một lưu ý: "popping" một hành vi sử dụng unbecome
- hành vi mặc định là không sử dụng xếp chồng hành vi. Nó chỉ có liên quan trong một số ít trường hợp sử dụng (ví dụ, thường không phải máy nhà nước).
Trở thành/Không phân biệt rất nhẹ trái ngược với FSM. Vì vậy, trừ khi bạn có nhiều hơn 2 trạng thái (on/off chẳng hạn) và/hoặc các chính sách thay đổi trạng thái phức tạp, tôi sẽ không chuyển đổi trở thành/Unbecome thành FSM đầy đủ. Khác sau đó, tôi nghĩ rằng có sự khác biệt chỉ nhỏ ... Giống như ví dụ FSMs cung cấp cho bạn một đẹp được xây dựng trong timer DSL:
setTimer("TimerName", msg, 5 seconds, repeat = true)
// ...
cancelTimer("TimerName")
Hoặc ví dụ tôi không chắc chắn nếu nó có thể trong một FSM để " quay trở lại "về trạng thái trước đó, chỉ có" tiến lên ", vì bạn phải xác định rõ ràng trạng thái nào cần đến. Trong khi đó, unbecome
sẽ cung cấp cho bạn chính xác điều đó.