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