Pregunta

Para un pequeño proyecto nocturno, me gustaría escribir un componente de validación que podría usarse en la aplicación .NET para realizar la validación habitual y tediosa de objetos, parámetros de entrada y condiciones de publicación.

Mi primera idea fue volcar toda esta lógica de configuración de validación en un archivo de configuración XML y proporcionar una interfaz líquida para las personas que desearían tenerla en el código.

Debido a que me gustaría entregar algo que sea realmente utilizable, pensé en proporcionar un DSL (lenguaje específico de dominio) especializado. La pregunta es ¿qué herramientas debo usar para hacer esto?

Pensé en analizarlo a mano usando expresiones regulares. Pero personalmente me gustaría tener algo más ... utilizable.

Entonces, ¿qué sugerirías?

¿Fue útil?

Solución

Si está buscando específicamente un DSL, eche un vistazo al proyecto ANTLR . Lo hemos usado en mi empresa con bastante éxito en el pasado.

Otros consejos

Parece que estás hablando de implementar una de las características de .Net 4.0, contratos de código .

Entonces supongo que mi herramienta recomendada sería VS.Net 2010.

Lo que ocurre con los DSL es que rara vez son efectivos de forma aislada. Para ser útil para escribir software real, realmente necesita poder incrustar el DSL dentro de un idioma host. Compare, por ejemplo, la forma en que funciona Linq versus solo SQL directo. Otro buen ejemplo es la función literal XML en VB. Ambos le permiten escribir código real, en un PL de propósito general e intercalarlo con un código DSL declarativo más simple.

El resultado es algo mucho más poderoso que SQL independiente o un simple editor XML.

La desventaja de esto, desafortunadamente, es que ni C # ni VB ofrecen características de meta programación, por lo que la única forma de hacerlo para los desarrolladores .net principales es construir su propio lenguaje. Si esto es algo que está haciendo solo por diversión, es posible que pueda modificar el compilador mono C # para agregar las características que le interesan al lenguaje. Otra alternativa podría ser probar Ruby. Tiene una sintaxis flexible que te permite salir con mucha locura. Personalmente, sin embargo, preferiría el enfoque pirateado de C #.

Es posible que desee consultar Creación de idiomas específicos de dominio en Boo (Boo es un lenguaje CLR, los conceptos deben trasladarse a C #). Un proyecto de ejemplo es Simple State Machine .

Eche un vistazo a Oslo de Microsoft, no estoy seguro de si lo hace lo que quieras, pero sé que puedes construir analizadores DSL y especificar gramáticas y hacer que genere bibliotecas de clases que puedan analizar datos basados ??en la gramática.

Más detalles de la "M" el idioma y cómo usarlo están aquí

¿Por qué ir tan lejos? Comience usando genéricos y una interfaz fluida. Comience de manera simple y trabaje en la producción. Si la fricción es demasiado alta al tratar con una interfaz fluida, entonces mire usando un DSL.

Puede probar DSL Tools para Visual Studio.

Debería consultar el proyecto Irony en http://irony.codeplex.com/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top