State Machine Framework - что использовали?
От: Shmj Ниоткуда  
Дата: 16.11.21 05:48
Оценка:
В продолжение темы: https://rsdn.org/forum/dotnet/8132845.flat
Автор: Shmj
Дата: 15.11.21


Наиболее популярен вроде: https://github.com/dotnet-state-machine/stateless

Интересует мнение кто что использовал и приходилось ли использовать вообще.
Re: State Machine Framework - что использовали?
От: gyraboo  
Дата: 16.11.21 06:02
Оценка:
Здравствуйте, Shmj, Вы писали:

S>В продолжение темы: https://rsdn.org/forum/dotnet/8132845.flat
Автор: Shmj
Дата: 15.11.21


S>Наиболее популярен вроде: https://github.com/dotnet-state-machine/stateless


S>Интересует мнение кто что использовал и приходилось ли использовать вообще.


Использовал аналогичный в спринге. Машина состояний — штука незаменимая в ряде случаев.
Re: Machinery
От: Qbit86 Кипр
Дата: 16.11.21 06:05
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Интересует мнение кто что использовал и приходилось ли использовать вообще.


Использовал паттерн State: https://nuget.org/packages/Machinery/
Глаза у меня добрые, но рубашка — смирительная!
Re: State Machine Framework - что использовали?
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.11.21 01:43
Оценка:
Здравствуйте, Shmj, Вы писали:

S>Интересует мнение кто что использовал и приходилось ли использовать вообще.


Зависит от сложности задачи. Можно и на коленке простенький классик написать и использовать. В Нитре для парсига символов была на коленке написана своя реализаци.
https://github.com/rsdn/nitra/tree/master/Nitra/Nitra.Grammar/Model/FSM

Как видишь кода не так чтобы очень много.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: State Machine Framework - что использовали?
От: Danchik Украина  
Дата: 17.11.21 18:39
Оценка:
Здравствуйте, Shmj, Вы писали:

S>В продолжение темы: https://rsdn.org/forum/dotnet/8132845.flat
Автор: Shmj
Дата: 15.11.21


S>Наиболее популярен вроде: https://github.com/dotnet-state-machine/stateless


S>Интересует мнение кто что использовал и приходилось ли использовать вообще.


Выглядит добротно. Пробуй.
Re: State Machine Framework - что использовали?
От: hardcase Пират http://nemerle.org
Дата: 19.11.21 11:09
Оценка: 1 (1)
Здравствуйте, Shmj, Вы писали:

S>Наиболее популярен вроде: https://github.com/dotnet-state-machine/stateless


Мне он показался чрезмерно переусложнённым, к тому же его подход приводит к жуткой непонятной лапше. Я сделал свой компактный автомат на объектах с ключевой идеей: состояние есть объект, переходами являются ссылки между ними в виде свойств, этот граф можно распечатать в Dot нотацию и получить визуализацию.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Переходы
От: Qbit86 Кипр
Дата: 19.11.21 12:34
Оценка:
Здравствуйте, hardcase, Вы писали:

H>состояние есть объект, переходами являются ссылки между ними в виде свойств, этот граф можно распечатать в Dot нотацию и получить визуализацию.


Означает ли это, что экземпляры состояний и весь граф фиксированы заранее на всё время жизни автомата?
Что если у состояния должно быть своё заранее не фиксированное состояние?
Например:
internal sealed class MovingState : IState<...>
{
    private readonly Vector2 _velocity;

    internal MovingState(Vector2 velocity) => _velocity = velocity;

    ...
}


Отличие машины состояний от конечного автомата в том, что в машине число состояний потенциально бесконечное. Скажем MovingState — это бесконечное семейство состояний, параметризующихся значением velocity. На этот параметр влияют входные события/триггеры автомата, и сам этот параметр влияет на целевые состояния при переходах по входным событиям/триггерам. Кроме этого на целевые состояния при переходах влияет неявное и переменчивое состояние внешнего мира.
Глаза у меня добрые, но рубашка — смирительная!
Re[3]: Переходы
От: hardcase Пират http://nemerle.org
Дата: 19.11.21 15:50
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Означает ли это, что экземпляры состояний и весь граф фиксированы заранее на всё время жизни автомата?

Q>Что если у состояния должно быть своё заранее не фиксированное состояние?

В моей задаче граф в целом известен заранее: это некоторый workflow с диалогами через который проходит пользователь, на некоторых этапах происходит взаимодействие с сервисами в интернете. Показ диалога — объект-состояние, ответ пользователя приведёт к следующему переходу, запрос в интернет — тоже объект-состояние, ответ сервиса приведёт к другому переходу. При переходах можно следующему объекту передавать данные, если это требуется.
/* иЗвиНите зА неРовнЫй поЧерК */
Отредактировано 19.11.2021 15:52 hardcase . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.