Конечные автоматы и стейт-машины

Конечный автомат простыми словами: когда россыпь флагов и if пора заменить явными состояниями, как это сделать в Java и когда своей машины мало и нужен BPM-движок.

Раздел — про то, как навести порядок в объектах, которые проходят через набор состояний: заказ, платёж, заявка, задача. Когда состояний становится много, россыпь boolean-флагов и if начинает путаться и разрешать невозможные комбинации. Конечный автомат делает состояние явным, а недопустимые переходы — невозможными. Четыре статьи идут от концепции к практике: сначала что это такое и когда пора, потом как реализовать в Java или в Go, и наконец — когда своей стейт-машины мало и нужен BPM-движок.

  1. Конечные автоматы и стейт-машины: что это и когда нужны — состояния, переходы, события, guard'ы; флаги против автомата; когда хватит if, а когда нужен автомат.
  2. Как реализовать стейт-машину в Java — enum со switch, таблица переходов, State-паттерн, Spring Statemachine; хранение состояния и защита от гонок.
  3. Как реализовать стейт-машину в Go — именованный тип со switch, таблица переходов на map, состояние как тип, библиотеки stateless и looplab/fsm; гонки через version и FOR UPDATE.
  4. BPM и оркестрация процессов: Camunda и аналоги — BPM-движок и BPMN, Camunda, Temporal, Zeebe, Flowable, AWS Step Functions; связь с saga; когда движок вместо кода.