template strategy patterns pattern observer net method dofactory .net design-patterns frameworks state-machine

strategy - State Machine Frameworks para.NET



template method dofactory (7)

Dependiendo de sus requisitos exactos, puede encontrar que State Machine Compiler es suficiente para implementar el patrón de "Estado" de GoF. Puede generar C # así como puntos que se pueden transformar en varios formatos de imagen usando Graphviz . Lo usé en un proyecto anterior y lo encontré suficiente para generar una máquina de estados "simple". Espero que esto ayude.

Tenemos un sistema en mi trabajo que es básicamente una máquina de estado basada en mensajes. Toma una variedad de tipos de mensajes, busca algún contexto / estado basado en el mensaje, luego decide qué hacer, basado en el mensaje y el estado actual. Normalmente el resultado es un mensaje que se envía fuera del sistema.

¿Existen buenos marcos de código abierto para implementar una máquina de estado en .NET? He examinado la última versión de Windows Workflow, y parece que sería una buena opción; sin embargo, tengo algunas dudas sobre los mecanismos de persistencia predeterminados (debemos informar los datos de transición del estado), la capacidad de prueba y el hecho de que el equipo de WF está rediseñando el marco mientras hablamos (supuestamente).

En lugar de WF, estoy pensando en intentar implementar un patrón de "Estado" GoF simple y antiguo, y usar Spring.NET para conectar todo. ¿Hay algo por ahí que ya haga esto, o algo similar?


Dos grandes máquinas de estado para .NET

  • Stateless estado: Stateless máquinas de estado y flujos de trabajo ligeros basados ​​en máquinas de estado directamente en código .NET
  • Automatonymous - Una biblioteca de máquinas de estado para .Net - le permite escribir máquinas de estados de estilo fluido


Eche un vistazo a StateBuilderDotNet , un generador de código de máquina de estado que transforma una descripción XML de una máquina de estado en una versión extendida del patrón de estado C #. Es compatible con todas las semánticas de UML: la máquina de estado puede ser jerárquica, concurrente y asíncrona. También está disponible una herramienta gráfica para crear máquinas de estados.

Descargo de responsabilidad: Soy el autor de estos programas.


He creado Staty que es una máquina de estado inteligente para .NET. Escrita como biblioteca de clases portátil C # (PCL), Staty se presenta como una máquina de estados dirigida por eventos expresivos con características como

  • seguridad de concurrencia
  • eventos externos e interales
  • clases separadas por estado
  • acciones de entrada y salida y
  • una sintaxis fluida para configurar la máquina de estados.

Es gratis, de código abierto, disponible en NuGet y basado en ideas de C ++ State Machine de David Lafreniere , que es la máquina de estado más famosa de C ++.


Mantengo un proyecto de código abierto que implementa (entre otras cosas) una máquina genérica de estados finitos para .NET. Está construido sobre QuickGraph , por lo que obtiene muchos algoritmos de análisis de gráficos de forma gratuita. Vea esta página para más información.


Podría considerar el Marco del Estado del Norte en C # . Aunque no es de código abierto, su licencia es relativamente económica. Es el único marco que conozco que permite la reutilización a través de la composición y herencia de la máquina de estados. En otras palabras, puede heredar de una máquina de estado base con solo unas pocas líneas de código y agregar estados, transiciones, acciones, etc. También puede tomar una clase de máquina de estado existente y "conectarla" a otra máquina de estado. No va a creer lo fácil que es implementar y trabajar con máquinas de estado utilizando este marco, en relación con GOF u otros patrones.