상태 및 상태 머신


상태 머신을 사용하여 동작 및 상태 전환 정의 — 데이트 앱으로 설명

(2020 년 12 월 20 일)

상태 란?

정보 기술 및 컴퓨터 과학에서 시스템은 상태 저장 이전 이벤트 또는 사용자 상호 작용을 기억하도록 설계된 경우 기억 된 정보를 시스템의 상태 라고합니다. .

시스템의 상태는 종종 사용자가 수행하는 행동의 집합으로 정의됩니다. 주는 특정 주에서의 특정 행동이 유효한지 여부를보다 체계적으로 확인하는 방법이기 때문에 중요합니다.

신호등 상태

신호등을 예로 고려하세요. 녹색이면 운전자와 승객은 다음에 빨간색이 아닌 노란색으로 표시 될 것으로 예상합니다. 노란색으로 바뀌면 녹색이 아닌 빨간색을 기대합니다. 따라서 여기의 상태는 간단합니다.

Green -> Yellow -> Red
^ |
|\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_|

화살표 (일명 상태 전환 허용)를 따라 가면 신호등이 잘 작동합니다.

데이트 앱의 경기 상태

이제 더 복잡한 예로 데이트 앱을 예로 들어 보겠습니다. 사람들이 온라인에서 매치할 수있는 앱을 만들고 있다고 가정 해 보겠습니다. 알고리즘이 준비되었고 사용자의 앱에 나타나는 일치의 논리를 작성해야한다고 가정 해 보겠습니다.

엔티티를 정의하겠습니다. match 먼저 두 사람 간의 일치를 나타냅니다. 경기를 디자인하려면 고려해야 할 몇 가지 상태가 있습니다.

일치하지 않는 무작위 사람이 나타나는 것과 같은 예기치 않은 행동을 사람들이 보지 않도록 상태가 필요합니다. 화면에 인사가 표시됩니다.

사진 : Yogas Design on Unsplash

내 생각 과정 :

  1. 먼저, 일치 항목은 생성되어야 , 즉 특정 알고리즘 집합이 경기 준비가 된 두 사람을 선택합니다. 물론 알고리즘은 둘 다 일치하는지, 서로의 선호도에 맞는지, 금지되지 않았는지 등을 미리 확인해야합니다.
  2. 그러면이 일치는 보류 (다른 사람의 스 와이프 대기 중) 또는 실패 첫 번째 사용자의 작업에 따라. 사용자가 오른쪽으로 스 와이프하면 (데이트 앱 용어로 좋아요를 의미) 상태가 생성됨 에서 보류 중 . 사용자가 왼쪽으로 스 와이프하면 ( 당신이 마음에 들지 않습니다를 의미) 상태가 실패 로 변경됩니다.
  3. 그런 다음 두 사람이 서로를 좋아하면 대기 중 에서 일치됨 .
  4. 일치하는 사람이 일치를 “일치 해제”하여 상태를 unmatched .
  5. 모든 상태 변경 사항을 다룬 것 같습니다. 하지만이게 다야? 흠… 돌아가서 다시 스 와이프 할 수있는 되감기라는 유료 기능이 없나요? 어떻게해야하나요?

모든 변경 사항이 포함되었는지 어떻게 확인할 수 있나요? 그렇다면 어떻게 프로그래밍합니까?

상태 머신이란 무엇입니까?

확정 된 수명 주기로 엔티티의 동작을 모델링하는 방법론

상태 지향 시스템을 구축 할 때 상태 머신은 복잡한 전환과 트리거를 더 잘 파악하는 데 유용합니다.

유한 상태 머신 (FSM)

It 유한 한 수의 상태 em 중 하나 일 수있는 추상 기계 입니다. > 언제든지. FSM은 일부 입력 에 대한 응답으로 한 상태에서 다른 상태로 변경할 수 있습니다. 한 상태에서 다른 상태로의 변경을 전환 이라고합니다. FSM은 상태 목록, 초기 상태 및 각 전환을 트리거하는 입력으로 정의됩니다.

데이트 앱 예제를 계속 진행하겠습니다. 일치 iv 뒤에있는 논리에서 상태 다이어그램 을 만드는 경우 id = “6d3c38c74f”>

는 다음과 같습니다.

* 일치하는 고객 또는 데이트 앱 (플랫폼 빌더 / 회사) 중 하나와 같이 관련된 사용자마다 다른 방법을 취할 수 있습니다.

일치의 수명주기 내에서 모든 동작을 모델링하는 한정된 수의 상태가 있습니다. 상태 머신을 구축하려면 라인을 따라 엔티티가 다양한 동작에 어떻게 반응하는지 확인하면됩니다.

상태 머신을 사용해야하는 이유는 무엇입니까?

이제 알았습니다. 상태 다이어그램이 정말 유용하지만 코드를 작성할 때 상태 머신을 사용해야하는 이유는 무엇입니까?

같은 예에서 간단한 코드를 살펴 보겠습니다. 상태 시스템이 관련되기 전 .

상태 시스템을 사용하기 전에

if/else 문.

상태 머신 사용 후

ChangeState 메소드가 StateTransition 유형을 사용하여 상태 전환을 처리하도록합니다. 이제 다른 모든 방법은 일치를 처리하는 논리에 초점을 맞출 수 있습니다.

어떻게 더 할 수 있습니까?

몇 가지만 말씀 드리겠습니다.

  • 지금은 “Rewind”메서드가 프런트 엔드 인터페이스를 호출하기에 충분하다고 가정합니다. 메소드를 다루는 더 섬세한 방법은 일치가 기록되었는지 확인하고 만약 그렇다면 그것이 좋아하는지 싫어하는지 확인한 다음 사용할 명령을 결정하는 것입니다. UI가 판단하도록하는 대신 (그리고 잘못 될 위험이 있음) MatchEntity 클래스에서 처리하는 것이 좋습니다.
  • 상태가 전환되는 경우 너무 복잡해지면 현재 상태 및 명령 축이있는 행렬을 사용해보십시오. 행렬의 데이터는 업데이트 된 상태 일 수 있습니다. 이렇게하면 코드를 더 쉽게 읽을 수 있습니다.

요약

왜 상태 머신을 사용합니까? 상태 변경 이벤트 (일명 엔티티의 중요한 동작)를 고려하기 때문에 시스템을 더 잘 모델링합니다. 대부분의 다른 모든 것은 기본적인 CRUD 방법으로 해결할 수 있습니다. 또한 코드를 더 읽기 쉽고 유지 관리 할 수 ​​있습니다.

API를 빌드 할 때 제품 관리자가 요청한 것만 기반으로 설계하지 마십시오. 중요한 동작 및 전환 (상태)을 염두에두고 엔티티에 대한 API (최소한 최소 API)를 설계합니다.

참조

Richard Clayton-Use State Machines!

Finite State Machines (FSM 또는이 게시물의 맥락에서 간단히 “State Machines”)는…

rclayton을 모델링하는 방법입니다. silvrback.com

유한 상태 머신

유한 상태 머신 (FSM) 또는 유한 상태 오토 마톤 (FSA, 복수형 : automata), 유한 오토 마톤 또는 단순히 상태…

en.wikipedia.org

C #의 간단한 상태 머신 예제?

방금 제공 : https://code.google.com/p/ysharp/source/browse/#svn\%2Ftrunk\%2FStateMachinesPoC Here “s one …

stackoverflow.com