Frameworks máquina de estado para .NET
-
08-07-2019 - |
Pergunta
Nós temos um sistema no meu trabalho que é basicamente uma máquina de estado orientado por mensagem. Leva em uma variedade de tipos de mensagens, olha para cima algum contexto / estado com base na mensagem, em seguida, decide o que fazer, com base na mensagem e o estado atual. Normalmente, o resultado é uma mensagem a ser enviada para fora do sistema.
Existem bons open-source quadros para implementar uma máquina de estado em .NET? Eu olhei para a última versão do Windows Workflow, e parece que seria uma boa opção; No entanto, tenho algumas preocupações sobre o padrão persistência mecanismos (precisamos relatar fora os dados de transição de estado), a capacidade de teste, eo fato de que a equipe WF é re-arquitetar o quadro como nós falamos (supostamente).
Em vez de WF, eu estou pensando em tentar implementar um GoF padrão plain-old "Estado", e usando Spring.NET a fio tudo juntos. Existe alguma coisa lá fora que já faz isso, ou algo semelhante?
Solução
Dependendo de suas necessidades exatas que você pode encontrar o State Machine Compiler é suficiente para implementar o "Estado" GoF padronizar. Ele pode gerar C #, bem como pontos que pode ser transformado em vários formatos de imagem usando Graphviz . Eu usei-o em um projeto anterior e achei suficiente para gerar uma máquina de estado 'simples'. Eu espero que isso ajude.
Outras dicas
Dê uma olhada nState
https://github.com/benaston/NState
https://nuget.org/packages/NState/ .
Disclaimer: Eu mantê-lo
.Dois grandes máquinas de estado para .NET
- Stateless - Criar máquinas de estado e fluxos de trabalho baseados em máquinas de estado leve diretamente no código .NET
- Automatonymous - Uma biblioteca de máquina de estado para .Net - permite escrever máquinas de estado estilo fluente
Eu mantenho um projeto de código aberto que implementa (entre outras coisas) uma máquina de estado finito genérico para .NET. Ele é construído em cima QuickGraph , para que você obtenha muitos algoritmos gráfico de análise de graça. Consulte desta página para obter mais informações.
Você pode considerar a estado norte-Quadro em C # . Embora não seja open source, é relativamente barato para licenciar. É a única estrutura que eu conheço que permite a reutilização através da composição máquina de estado e herança. Em outras palavras, você pode herdar de uma máquina de estado base com apenas algumas linhas de código, e adicione estados, transições, ações, etc. Você também pode tomar uma classe de máquina de estado existente e "ligue-o a" outra máquina de estado. Você não vai acreditar como é muito mais fácil de implementar e trabalhar com máquinas de estado usando este quadro, em relação ao GOF ou outros padrões.
Tenha um olhar em StateBuilderDotNet , um gerador de código de máquina de estado que transforma uma descrição XML de uma máquina de estado em um versão estendida do padrão de estado C #. Ele suporta todos os semântica UML: máquina de estado pode ser hierárquica, concorrente e assíncrona. A ferramenta gráfica também está disponível para criar máquinas de estado.
Disclaimer: Eu sou o autor destes software
.Eu criei staty que é uma inteligente state-máquina para .NET. Escrito como biblioteca de classe C # portátil (PCL), staty vem como um estado-máquina orientada a eventos expressivo com recursos como
- anuência à segurança
- externos e INTERAL eventos
- classes separadas por estado
- ações de entrada e saída e
- a fluente sintaxe para configurar o estado da máquina.
É gratuito, de código aberto, disponível no NuGet e baseado em idéias por State Machine C ++ de David Lafreniere, que é o mais famoso state-máquina em C ++.