Domitienda. Hosting ASP .NET 3.5 / SQL SERVER 2005
  buscar 
novedades
Recibe las ultimas noticias y los mejores articulos en tu email
Secciones
 • .NET Framework
 • ADO .NET
 • Ajax
 • Asp .NET
 • Biztalk
 • C#
 • Commerce Server
 • Exchange
 • IIS
 • Metodologías
 • J#
 • Office
 • Reporting Services
 • Seguridad
 • SEO
 • Servicios Web
 • Sharepoint
 • Silverlight
 • SQL Server
 • Visual Basic .NET
 • Visual C++ .NET
 • Visual Studio
 • WCF
 • Windows
 • Workflow Foundation
 • WPF
 • XAML
 • XML
 • Dynamics
 • Noticias
 • Articulos
 • Tutoriales
 • Eventos
 • Cursos
 • Ofertas Empleo
 • RSS
Contacto
¿Quieres saber quien es el creador de Clikear?

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

[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


lo + cool
Tutoriales
XMLTutorial de XML
Compartir
¿Qué es esto?

delicious digg technorati yahoomeneame