9/10/2007 17:54 El Bruno

[DSL] Como consumir un DSL a traves de codigo (extremo ... extremo)

 

Buenas

no es muy usual, pero tal vez en algún momento necesites consumir el contenido de un diagrama creado con Domain Specific Language Tools. Como comenté alguna vez, un diagrama está compuesto de 2 archivos;

  • un archivo xml con el contenido del mismo
  • un archivo xml con la información de visualizacion del diagrama

Como ambos archivos son representaciones xml, se pueden interpretar utilizando diversas tecnologías:

Esta última opción es la más interesante ya que permite aprovechar toda la potencia de un modelo de clases ya adaptado a un diagrama específico. Pero el problema que se presenta es que la creación de estos componentes no es una tarea trivial y mucho menos intuitiva.

Es por eso que las siguientes líneas pueden servirnos de utilidad:

1 using Microsoft.VisualStudio.Modeling.Diagrams; 2 using Microsoft.VisualStudio.Modeling; 3 using System.IO; 4 using System.Xml; 5 6 public <Dsl>RootClassName LoadModel(String fileName) 7 { 8 <Dsl>RootClassName ret = null; 9 Store store = new Store(); 10 store.LoadDomainModels( 11 typeof(CoreDesignSurfaceDomainModel), 12 typeof(<Dsl>DomainModel)); 13 14 Transaction t = store.TransactionManager.BeginTransaction("Loading Dsl Model"); 15 ret = <Dsl>SerializationHelper.Instance.LoadModel(store, fileName, null, null); 16 t.Commit(); 17 18 return ret; 19 }

En el ejemplo anterior lo unico que debemos tener en cuenta que el elemento <Dsl> representa el nombre de nuestro proyecto DSL para que lo reemplacemos por la referencia correspondiente.

Por ejemplo si lo aplicamos al ejemplo de DSL que he madurado en los últimos posts el código quedaría:

/// <summary> /// Loads the model. /// </summary> /// <param name="dslPath">The DSL path.</param> /// <returns></returns> public static ExampleModel LoadModel(string dslPath) { ExampleModel ret = null; DslModeling.Store store = new DslModeling.Store(); store.LoadDomainModels( typeof(DslDiagrams.CoreDesignSurfaceDomainModel), typeof(Dsl15DomainModel)); DslModeling.Transaction t = store.TransactionManager.BeginTransaction("Loading Dsl Model"); ret = Dsl15SerializationHelper.Instance.LoadModel(store, dslPath, null, null); t.Commit(); return ret; }

y para crear un modelo a partir del Helper el codigo sería mas simple aún:

public void TestLoadModel() { string dslPath = "modelo.dsl"; ExampleModel model = Dsl15.DSLHelper.LoadModel(dslPath); }

 

Saludos @ La Finca

El Bruno

Crossposting from ElBruno.com
Archivado en: ,,
Comparte este post:

# re: [DSL] Como consumir un DSL a traves de codigo (extremo ... extremo)

Wednesday, October 10, 2007 7:12 AM by Lucas Ontivero

Excelente ElBruno, esta serie está realmente fantástica!. Ahora, una consulta, en tiempos recientes solo he visto 2 DSLs, uno era un diseñador de clases que te permitía relacionar las propiedades con campos de la DB y te generaba el código y otra era una DTE que también te generaba el código. No se si es porque esos son los ejemplos de dsls que provee microsoft o que, pero no he visto hecho nada muy novedoso con estos. Tenes idea de algúna DSL para encarar algún problema específico un poco mas

creativos que los que te comenté y que se esté usando realmente?

Saludos.

# re: [DSL] Como consumir un DSL a traves de codigo (extremo ... extremo)

Wednesday, October 10, 2007 11:20 AM by El Bruno

Lucas gracias !!

pues el "diseñador de clases" y el DTE pueden ser los que vienen de ejemplo con VS (son 4 templates) ... y es cierto no mucha gente se anima con las DSLs. Creo que principalmente es por una cuestion de esfuerzo, ya que la inversion para lograr un buen resultado es considerable y no creo que mucha gente este dispuesta a realizarla. Ademas debes sumarle un cambio de chip en la forma de pensar, ya que modelando ganas mucho en lo referido a tiempo, pero al ser 100% orientado a un negocio, tal vez pierdas un poco de flexibilidad.

Si buscas implantaciones de DSLs, puedes comenzar por una q sera un clasico Ado.Net Entity Framework, ademas darle una vuelta a la pagina de Clarius Consulting (www.clariusconsulting.net) y porque no ver un DSL q genera el WIX para las instalaciones y deploy (www.codeplex.com/dsl4wix) ... lamentablemente un NDA no me deja comentar nada de lo q estoy haciendo en Avanade ... pero en diciembre saldra a la luz !!!

Saludos

# [DSL] Consumiendo un DSL desde codigo en el contexto de tu DSL actual

Sunday, February 03, 2008 11:23 PM by El Bruno

Buenas, cómo bien lo dice el título del post; este es un escenario casi imposible, pero probable ( y

# [DSL] Consumiendo un DSL desde codigo en el contexto de tu DSL actual

Sunday, February 03, 2008 11:23 PM by El Bruno

Buenas, cómo bien lo dice el título del post; este es un escenario casi imposible, pero probable ( y

# re: [DSL] Como consumir un DSL a traves de codigo (extremo ... extremo)

Wednesday, August 24, 2011 4:26 PM by lighting manufacturers in the UK

Muchas gracias por publicar esto , ¡¯ s justo lo que estaba investigando para el bing . I ? D tanto relativamente escuchar las opiniones de una persona , un poco de una página web de la Organización de internet , que ? S por eso que , como los blogs de manera tan significativa . Muchas gracias !