Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Владислав Шакиров «Stateless: управляем состоянием объектов»

DotNetRu
October 17, 2019

Владислав Шакиров «Stateless: управляем состоянием объектов»

В докладе описана библиотека Stateless, которая управляет состоянием объекта на основе диаграммы конечного автомата. Рассмотрим практику динамического создания диаграммы состояний объекта из любого источника. А так же посмотрим на пример из нашего проекта и какие бенефиты мы получили.

DotNetRu

October 17, 2019
Tweet

More Decks by DotNetRu

Other Decks in Technology

Transcript

  1. Обо мне Владислав Шакиров Разработчик 2 Разработчик в Райффайзенбанк. Разрабатываю

    на .Net уже около 5 лет. Занимаюсь разработкой Backend и Desktop-приложений, а так же стараюсь делать архитектуру приложений проще и понятнее ☺
  2. ▪ Что же такое конечный автомат? ▪ Обзор библиотеки Stateless

    ▪ Пример реализации и билдер автомата План доклада 3
  3. Что такое конечный автомат 1 Коне́чный автома́т — абстрактный автомат,

    число возможных внутренних состояний которого конечно. Диаграмма состояний (или иногда граф переходов) — графическое представление множества состояний и функции переходов. Представляет собой размеченный ориентированный граф, вершины которого — состояния КА, дуги — переходы из одного состояния в другое. Таблица переходов — табличное представление функции. Обычно в такой таблице каждой строке соответствует одно состояние, а столбцу — один допустимый входной символ. В ячейке на пересечении строки и столбца записывается состояние, в которое должен перейти автомат, если в данном состоянии он считал данный входной символ.
  4. 10

  5. Возможные решения 15 ▪ Оставить как есть ▪ Написать свой

    конечный автомат, потому что - фатальный недостаток ▪ Использовать уже готовое решение
  6. Stateless • Актуальная версия 4.2.1 • .Net Standard 1.0 •

    .Net Framework 4.5 • https://github.com/dotnet-state-machine/stateless
  7. И еще немного фич в Stateless 19 • Substate •

    Триггер с параметром • Re-entry
  8. Язык DOT 20 var umlDot = UmlDotGraph.Format(_stateMachine.GetInfo()); digraph { node

    [shape=Mrecord] rankdir="LR" OnOne [label="OnOne|entry / Function"]; OnTwo [label="OnTwo|entry / Function"]; OnThree [label="OnThree|entry / Function"]; OnOne -> OnTwo [style="solid", label="2"]; OnOne -> OnThree [style="solid", label="3"]; OnTwo -> OnOne [style="solid", label="1"]; OnTwo -> OnThree [style="solid", label="3"]; OnThree -> OnOne [style="solid", label="1"]; }
  9. Stateless Decorator 21 S – Состояния T – Триггеры О

    – тип декорируемого объекта
  10. И еще немного архитектуры. Таблицы переходов. 22 StateTable<S,T> -S StartState

    -Transactions[] -Actions[] Transaction<S,T> -S State -S DestinationState -T Trigger StateAction<S,T> -S State -string ActionName -enum ActionType