1. Tìm phát âm về FSM

FSM(Finite state machine) - Máy tâm lý hữu hạn là 1 trong mô hình tân oán học trình diễn tinh thần của hệ, trong những số đó số tâm trạng là hữu hạn. Từ mỗi tâm lý, trang bị rất có thể biến đổi sang 1 số trạng thái cố định và thắt chặt không giống, dựa vào những sự kiện, đầu vào.

Bạn đang xem: Fsm là gì

Fsm được màn trình diễn như 1 thứ thị được bố trí theo hướng.

Xem thêm: Để Miễn Nhiễm Đòn Phá Thiên Của Jinsoyun Phải Làm Gì? #1 : Blade And Soul

Ví dụ:

Máy tâm lý thể thực trạng thái của 1 bài bác báo bên trên site tin tức tức

*

draft, in Đánh Giá published là những trạng thái của bài bác viếtnhận xét, approve sầu, reject, unpublish là các sự kiện( sự kiện ). Các sự kiện này tạo ra lúc dấn các input nhỏng click lên button, … Các sự kiện này gây ra bài toán gửi trạng thái (ví dụ trường đoản cú Draft -> In review), Hotline là quá trình đổi khác (transition)

Đặc điểm

Trong quy mô áp dụng DFS trang bị tinh thần đối kháng định.

Xem thêm: Chi Tiết Ngự Hồn Âm Dương Sư Ngự Hồn /Danh Sách, Danh Sách Ngự Hồn Âm Dương Sư Soul List Onmyoji

Tại từng thời điểm sản phẩm công nghệ chỉ ở một tâm trạng duy nhấtTại mỗi tinh thần, chỉ có thể chuyển hẳn sang đầy đủ trạng thái được mang đến phépTừ tâm lý hiện giờ, rất có thể hiểu rằng hầu như tâm trạng sau đó mà sản phẩm công nghệ hoàn toàn có thể gửi qua

2. Ứng dụng của FSM trong lập trình

FSM biểu hiện các trạng thái, sự khiếu nại với quy trình biến đổi giữa những tâm trạng, buộc phải FSM có thể được sử dụng để thống trị tâm trạng của object, hoặc workflow.

Ví dụ: Quản lý tâm trạng deals, thống trị trạng thái của ticket, quản lý tâm lý của nhân đồ vào game, ...

Trong ví dụ bên trên, mỗi nội dung bài viết, chỉ có thể bao gồm một tinh thần trên một thời điểm, cùng từ 1 tâm trạng chỉ hoàn toàn có thể thay đổi qua một trong những tâm trạng được lý lẽ trước:

Từ draft chỉ rất có thể chuyển hẳn qua in reviewTừ draft tất yêu chuyển sang published

2.1 Lúc ko dùng FSM

khi không thực hiện FSM thì code sẽ đề nghị dùng tới tương đối nhiều ĐK if … else… hoặc case (switch ... case … trong những ngữ điệu khác)

defmodule Post bởi vì defstruct content: "sample content", status: "draft" def all_status, do: <"draft", "in_review", "published"> def update_status(%status: "draft" = post, status) vị if status == "in_review" bởi vì IO.put("Update post status to lớn in_review") Map.put(post, :status, "in_review") else IO.put("Cannot update lớn #status from draft") post kết thúc kết thúc def update_status(%status: "in_review" = post, status) vị case status bởi "draft" -> IO.put("Reject the post") Map.put(post, :status, "draft") "published" IO.put("Publish the post") Map.put(post, :status, "published") true -> IO.put("Cannot update lớn #status from in_review") post over end def update_status(%status: "published" = post, status) vì if status == "draft" bởi IO.put("Unpublish the post") Map.put(post, :status, "draft") else IO.put("Cannot update to #status from published") post over endend*Vấn đề: *

Code nhiều năm, khó không ngừng mở rộng, dễ xảy ra lỗi

Nếu thêm nhiều tinh thần không giống đến post, yêu cầu update toàn thể những hàm update_status

Nếu có nhiều biện pháp chuyển đổi giữa các trạng thái, đề nghị update toàn bộ

Làm sao biết từ bỏ tinh thần bây giờ hoàn toàn có thể chuyển sang tâm trạng nào khác?

Làm sao đảm bảo an toàn luồng dữ liệu/ logic chạy đúng

2.2 Sử dụng FSM

Trong ví dụ này sử dụng thỏng viện as_fsm cung cấp câu hỏi implement đồ vật tâm lý trên ngữ điệu elixir

defmodule Post vày # define state, sự kiện & transition use AsFsm, states: <:draft, :in_reviews, :published>, events: < review: < name: "In review", from: <:draft>, to: :in_reviews, on_transition: fn(post, params) -> # thực tế việc gán tâm lý new được auto thực hiện vì thỏng viện # code này chỉ để mục tiêu mang đến dễ hiểu post = Map.put(post, :status, :in_review) :ok, post over >, approve: < name: "Approve", from: <:in_review>, to: :published on_transition: fn(post, params) -> post = Map.put(post, :status, :published) :ok, post kết thúc >, reject: < name: "Reject", from: <:in_review>, to: :draft, on_transition: fn(post, params) -> post = Map.put(post, :status, :draft) :ok, post over >, unpublish: < name: "Unpublish", from: <:published>, to: :draft, on_transition: fn(post, params) -> post = Map.put(post, :status, :draft) :ok, post end > > defstruct content: "sample content", status: "draft"end# Điện thoại tư vấn thực hiện iex > post = %Postcontent: "kiểm tra content", status: "draft"iex > post = Post.review(post)# hoaciex > post = Post.trigger(post, :review)Việc implement FSM cũng không quá phức hợp nhưng rất có thể tái áp dụng được rất nhiều lầnViệc thêm mới những tâm lý (state) hoặc công việc sự chuyển tiếp giữa (transition) ko đề nghị chuyển đổi quá nhiều codenhững luồng xử lý, event được bộc lộ rõ bên trên cấu hình trạng thái

3. Tsay mê khảo