<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>The Metalevel &#187; Architecture</title>
	<atom:link href="http://pjmolina.com/metalevel/category/architecture/feed/" rel="self" type="application/rss+xml" />
	<link>http://pjmolina.com/metalevel</link>
	<description>Abstraction based levitation</description>
	<lastBuildDate>Mon, 30 Apr 2012 06:55:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Radarc 3.0 Released!</title>
		<link>http://pjmolina.com/metalevel/2012/03/radarc-3-0-released/</link>
		<comments>http://pjmolina.com/metalevel/2012/03/radarc-3-0-released/#comments</comments>
		<pubDate>Wed, 21 Mar 2012 18:45:15 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[mde]]></category>
		<category><![CDATA[mdsd]]></category>
		<category><![CDATA[Radarc]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=790</guid>
		<description><![CDATA[The arrival to my new job in Sevilla has coincided with the preparations and launch of a new product. We at Icinetic, are releasing Radarc 3.0. Radarc is a very easy to use code generator highly integrated with Visual Studio and targeting .NET technologies. Radarc has the ability produce multiple architectures using the same base models [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="aligncenter" title="Radarc 3.0" src="http://cdn.shopify.com/s/files/1/0114/1512/t/1/assets/logo.png" alt="" width="319" height="77" /></p>
<p style="text-align: left;">The arrival to my <a title="Hola Sevilla" href="http://pjmolina.com/metalevel/2012/01/hola-sevilla/">new job in Sevilla</a> has coincided with the preparations and launch of a new product. We at <a title="Icinetic" href="http://icinetic.com/Home/tabid/39/language/en-US/Default.aspx">Icinetic</a>, are releasing <strong><a title="Radarc 3.0" href="http://www.radarc.net/">Radarc 3.0</a></strong>. Radarc is a very easy to use code generator highly integrated with Visual Studio and targeting .NET technologies.</p>
<p>Radarc has the ability produce multiple architectures using the same base models and keeping in-sync generated artifacts when model element changes. Architectures and DSLs for defining the models are packaged in so called <em>&#8220;Formulas&#8221;</em>.</p>
<p>Currently, the following formulas are available for download and it is free for non-commercial usage:</p>
<ul>
<li>ASP.NET Web Forms + Entity Framework</li>
<li>ASP.NET MVC 3.0 + Entity Framework</li>
<li>ASP.NET MVC 3.0 + Entity Framework + Azure Storage &amp; deployment</li>
<li>Windows Phone 7</li>
</ul>
<div>Radarc creates a complete prototyping application in seconds following the cycle: change the model, touch no line of code, build and run. Prototyping an application is a question of minutes, and obtain a first scaffolding of your application. Moreover, custom code can be inserted in specially designed locations that will be preserved in every regeneration lap.</div>
<p>Radarc 3.0 is available with three licensing models and its free for non-commercial usage.</p>
<p>Other technologies are available on demand, such as:</p>
<ul>
<li>.NET 4.0 Domain Driven Design N-Layered Architecture</li>
<li>NHibernate &amp; more to come&#8230;</li>
</ul>
<div>Some cases of usage:</div>
<div>
<ul>
<li>If you work in a .NET development shop, feel free to <a title="Radarc 3.0" href="http://www.radarc.net/">give it a try</a> and give us some feedback.</li>
<li>On the other hand, if you want to <strong>start learning</strong> one of the previous technologies or architectures, you can use also Radarc to <strong>generate a reference sample application</strong> and start exploring the code.</li>
<li>If you are a experienced software architect and needs to evaluate SW architectures to <strong>benchmark</strong> them before choosing a winner arch for your project, think about the cheap possibility of generate the same application in two technologies and test how well performs for your specfic problem.</li>
</ul>
</div>
<div></div>
<div>These days, I am learning a lot about the state of art here at Icinetic and I hope to start contributing to the bits very, very soon.</div>
<div></div>
<div>Bonus extra: a <a title="Radarc 3.0 demo en &quot;12 Horas con Visual Studio 2010&quot;" href="http://bit.ly/radarcVS12">20 minutes demo video</a> (in Spanish) generating three architectures is available.</div>
<div></div>
<div>Next week we will be attending <a title="Code Generation 2012" href="codegeneration.net/cg2012/index.php">Code Generation 2012</a>. If you are interested, join us and see a live demo or download it and give it a try!</div>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2012/03/radarc-3-0-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hello World with Essential, the video</title>
		<link>http://pjmolina.com/metalevel/2010/07/hello-world-with-essential/</link>
		<comments>http://pjmolina.com/metalevel/2010/07/hello-world-with-essential/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 15:19:47 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Essential]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[mde]]></category>
		<category><![CDATA[mdsd]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=612</guid>
		<description><![CDATA[The Hello World sample is a nice starting point to show the syntax and capabilities of every new language. This test is also useful for code generators and Domain Specific Languages (DSLs) also as a proof of concept. Following this honorable tradition, I have created a video showing the capabilities of Essential: the tool I [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignright" style="margin-left: 10px;" title="Essential Logo" src="/img/LogoEssential300px.png" alt="Essential Logo" width="180" height="99" /></p>
<p>The <a title="Hello World" href="http://en.wikipedia.org/wiki/Hello_world_program" target="_blank">Hello World sample</a> is a nice starting point to show the syntax and capabilities of every new language. This test is also useful for code generators and Domain Specific Languages (DSLs) also as a proof of concept.</p>
<p>Following this honorable tradition, I have created a video showing the capabilities of <strong><a title="Essential" href="http://pjmolina.com/metalevel/essential/">Essential</a></strong>: the tool I am working on for doing agile Model Driven Development.</p>
<p>In this 10 minutes video you will get a general idea of the DSL the language provides to create:</p>
<ul>
<li>metamodels</li>
<li>models</li>
<li>templates</li>
<li>and control transformations</li>
</ul>
<p>In order to see the details, jump to Vimeo, activate the High Definition mode (HD) and set full screen (sorry embebed version is not good enough).</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="500" height="281" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=13587681&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="500" height="281" src="http://vimeo.com/moogaloop.swf?clip_id=13587681&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=00ADEF&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><a href="http://vimeo.com/13587681">Essential IDE &#8211; Hello World sample</a> from <a href="http://vimeo.com/user3817869">Pedro J. Molina</a> on <a href="http://vimeo.com">Vimeo</a>.</p>
<p>More info about it and 12 usage scenarios in the last Code Generation 2010 presentation about <a title="Tailored Code Generators" href="http://pjmolina.com/metalevel/2010/06/tailored-code-generators-at-cg2010/">Tailored Code Generators</a>.</p>
<p>Share your impressions!</p>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2010/07/hello-world-with-essential/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Presenting on Semana Informatica 2010</title>
		<link>http://pjmolina.com/metalevel/2010/04/presenting-on-semana-informatica-2010/</link>
		<comments>http://pjmolina.com/metalevel/2010/04/presenting-on-semana-informatica-2010/#comments</comments>
		<pubDate>Wed, 07 Apr 2010 20:20:49 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[talk]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=539</guid>
		<description><![CDATA[On April 27, my colleague Nicolas Cornaglia and I will be presenting a talk with some live demos in Valencia, Spain representing our company Capgemini, in the scope of the event Semana Informatica 2010. The title of the talk will be: Productivity through frameworks and MDD. The session will be delivered in Spanish. Full agenda (PDF version) [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.semanainformatica.com"><img class="alignright" style="margin-left: 5px; border: 0px initial initial;" title="Enlace a semanainformatica.com" src="http://www.semanainformatica.com/images/stories/promociones/banner1-2010.gif" border="0" alt="Enlace a semanainformatica.com" width="240" height="80" /></a></p>
<p>On April 27, my colleague <a title="niko's mini factory" href="http://nikofactory.blogspot.com/" target="_blank">Nicolas Cornaglia</a> and I will be presenting a talk with some live demos in Valencia, Spain representing our company <a title="Capgemini España" href="http://www.es.capgemini.com" target="_blank">Capgemini</a>, in the scope of the event <strong><a title="Semana Informatica 2010" href="http://www.semanainformatica.com/" target="_blank">Semana Informatica 2010</a></strong>.</p>
<p>The title of the talk will be: <strong>Productivity through frameworks and MDD</strong>.</p>
<p>The session will be delivered in Spanish. Full <a title="Agenda" href="http://www.semanainformatica.com/edicion-2010/programa.html" target="_blank">agenda</a> (<a title="Program PDF version" href="http://www.semanainformatica.com/images/stories/documentacion/triptico/programa%20semanainformatica%202010.pdf" target="_blank">PDF version</a>) and <a title="Session details" href="http://www.semanainformatica.com/edicion-2010/programa/155-seminario-capgemini.html" target="_blank">session details</a>.</p>
<p><strong>Abstract:</strong></p>
<p>Business applications for Enterprise Software usually follows a fixed set of standards (global or in-house) to help in keeping the maintenance cost as lower as possible (reducing TCO). In this context, homogeneity and regulation compliance is frequently a must.</p>
<p>The main issue in our presentation will be to show how an approach based in a good framework, modeling tools and code generation techniques can be <strong>the right tools</strong> to achieve a <em>high degree of standarization, quality, productivity and flexibility </em>to evolve the <strong>Enterprise Architecture</strong>. Such flexibility is key to provide a better <em>Time to Market</em> when a business process change or a technical requirement suddenly emerges.</p>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2010/04/presenting-on-semana-informatica-2010/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Balancing Variability &amp; Commonality</title>
		<link>http://pjmolina.com/metalevel/2010/03/balancing-variability-commonality/</link>
		<comments>http://pjmolina.com/metalevel/2010/03/balancing-variability-commonality/#comments</comments>
		<pubDate>Mon, 29 Mar 2010 21:53:45 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[commonality]]></category>
		<category><![CDATA[metamodeling]]></category>
		<category><![CDATA[variability]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=532</guid>
		<description><![CDATA[When creating a DSL (Domain Specific Language) one of the most important choices is to decide about what items in your domain are going to be considered variable, changeable and which ones are going to be considered fixed, carved in stone. The former need to be specified in your DSL, in your design or may [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.flickr.com/photos/pinksherbet/233228813/sizes/l/"><img class="aligncenter" title="Free Child Walking on White Round Spheres Balance CC via Pink Sherbet at Pink Sherbet." src="http://farm1.static.flickr.com/93/233228813_ae74d9ec1d.jpg" alt="" width="500" height="229" /></a></p>
<p>When creating a DSL (Domain Specific Language) one of the most important choices is to decide about what items in your domain are going to be considered variable, changeable and which ones are going to be considered fixed, carved in stone.</p>
<p>The former need to be specified in your DSL, in your design or may be coded. The latter are considered immutable and will remain static for all your derived applications for ages.</p>
<p>Considering that everything is static it is obviously useless. On the contrary, considering every aspect variable drives to another no-end getting nothing tangible again as a result. Therefore, in the middle we will have to search for the virtue.</p>
<p>The main issue here is to study a domain and ponder between variable parts and fixed parts. It is not a trivial thing to do from the very beginning. Experience in DSL construction and specially, experience in the domain helps to train your smell, but there are not clear rules for it, nevertheless.</p>
<p>It is not only about knowing your requirements. It is about trying to predict how your requirements will change across time and what types of requirements have more likelihood and tendency to change.</p>
<h2>Adding variability</h2>
<p>A variable part could be, for example, the background color of your application. If so, you need to add syntax and semantics to your DSL to capture such property. Let’s say you can express somewhere in your specification:  <code>{ background-color = peach; }</code></p>
<p>We can select the peach color for app1, and may be ivory for app2.</p>
<p>However, nothing is for free and this freedom comes with the followings possible drawbacks:</p>
<ul>
<li>You need to increase the size of your language (DSL), editors, model checkers, compilers and code generation or interpreters.</li>
<li>Users have to provide a value for such property unless you have also provided a sensible default value in case of missing information.</li>
<li>Homogeneity across applications vanishes with respect to background-color. Now it’s a user choice (the one in control of the modeling tool).</li>
<li>Specs are more complex.</li>
</ul>
<h2>Adding commonality</h2>
<p>On the other hand, if you consider the background of your application should be always the same because you are following, for example, a user interface style guide then, the background color is a fixed issue. Its value is provided by design by a style guide, by an architect, or design choice and the user modeling has no control over it.</p>
<p>In this scenario, the DSL is smaller. No need to specify the background color, it is implicit, it is no included in the model/specification.</p>
<p>With this kind of choice, we are betting for standardization. A shared library, a runtime framework or an interpreter will take care of supplying the right color in the right moment.</p>
<ul>
<li>Users can not change the background color, specs are smaller.</li>
<li>Standardization is improved across applications.</li>
<li>User has no control on the feature.</li>
</ul>
<h2>But, what is the right choice?</h2>
<p>It depends. There is no right choice with the information given till the moment. To answer the question we need to consider if the background color is a fundamental feature in our domain and it is needed to be different from application to application or may be, on the contrary, the color should be used in an homogeneous way following a predefined style guide.</p>
<p>Again, the domain imposes the rules to follow. Studding the domain and its variability is crucial to create a consistent DSLs focused in gathering the key features of the domain in a model: <strong>the important and variable ones</strong>. The important and fixed ones must be also identified but they shouldn’t be included into the model, but into the framework or the runtime.</p>
<h2>Standards, policy assurance, compliance</h2>
<p>Everything related to standard procedures, compliance and in-house stile guidelines are first-class candidates for standardization. If done in that way, your developers will not have to remember all that weird standard and compliance rules when developing a specific artifact.</p>
<p>A code generator will provide the right value for them. It will do it silently, without errors neither oversights. All the boring code dedicated to plumbing applications like: naming guidelines, service publication, serialization, persistence, adapters, proxies, skeletons, stubs, DAO code are driven by strict standards and best practices and are natural candidates for strong automation by code generators.</p>
<p>Moreover, if the regulation or the standard changes, the change will have impact in the following assets:</p>
<ul>
<li>a single change to a framework will be enough</li>
<li>or a change to a code generator and then forcing a regeneration process and redeploy.</li>
</ul>
<p>In both cases, it is cheaper that manually reviewing a set of in-production applications.</p>
<p>For example, think about replacing your data-layer access code from a DAO pattern and SQL to an ORM based approach like Hibernate.</p>
<h2>Business Know-How</h2>
<p>The core of the business Know-How is the important and the variable parts we are interested in to be collected in a specification. Such features need to be modeled, and if possible, abstracted from the technology that will implement it.</p>
<p>If we do it in this way, the model can survive the current technology.</p>
<p>Why we could be interested in do it in such a way?</p>
<p><strong>Just because technology evolves like fashion.</strong> Today everyone likes red T-shirts, tomorrow blue jeans will be sublime! Basic, Cobol, C, Java, C#, Ruby… what is the next language to use in 5 years time?</p>
<p>Use your best bet, whatever platform better fulfills your requirements, but I it could be nice to see the business process surviving the technology. <img src='http://pjmolina.com/metalevel/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />   We don’t know in which direction, but technology will evolve, and will change for sure.</p>
<h2>Maintaining a language or a DSL</h2>
<p>When a DSL or a language needs a review you will be probably considering adding new features to the language.</p>
<p>Each new feature will increase the variability and increase the complexity of the language. Before deciding to add a new modeling feature make a cost/benefits analysis and double check that the valued added by the improvement is greater than the cost of implementing it.</p>
<p>I like to follow the golden rule proposed by <a title="Gordon S. Novak" href="http://userweb.cs.utexas.edu/users/novak/" target="_blank">Gordon S. Novak</a><strong> </strong>about automatic programming:</p>
<blockquote><p><em>“Automatic Programming is defined as the synthesis of a program from a specification. If automatic programming is to be useful, the specification must be smaller and easier to write than the program would be if written in a conventional programming language.”</em></p></blockquote>
<h2>Conclusion</h2>
<p>Whenever is possible:</p>
<ul>
<li><strong>Business Know-How</strong> should be captured by models, specs, DSLs.</li>
<li><strong>Technical Know-How</strong> should be captured by code generators, model interpreters, best practices and patterns.</li>
</ul>
<p>So, at the end of the day I like the following pair of quotes to sum up about what to include in a model:</p>
<ul>
<li>The Spanish writer <a title="Baltasar Gracián" href="http://en.wikipedia.org/wiki/Baltasar_Graci%C3%A1n" target="_blank">Baltasar Gracián</a> in the XVII century said <em>“Lo bueno si breve, dos veces bueno.”</em> (a literal translation from Spanish could be: <em>“Good things if brief, twice good.”</em>)</li>
<li>On the other side, <a title="Albert Einstein" href="http://en.wikipedia.org/wiki/Albert_Einstein" target="_blank">Albert Einstein</a> (XX century) counterpoints <em>“Things should be as simple as possible, but not simpler.”</em></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2010/03/balancing-variability-commonality/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Countdown for CG2010</title>
		<link>http://pjmolina.com/metalevel/2010/03/countdown-for-cg2010/</link>
		<comments>http://pjmolina.com/metalevel/2010/03/countdown-for-cg2010/#comments</comments>
		<pubDate>Sat, 13 Mar 2010 21:07:24 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[conference]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=524</guid>
		<description><![CDATA[The Programme for Code Generation 2010 has been published. This year Mark has invited me to give an introductory session to Model Driven Software Development (MDSD) oriented to begginers. Also, I will discuss in a second session about creating tailored code generators. See you in Cambridge in June!]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://www.codegeneration.net/cg2010/index.php"><img class="aligncenter" title="CG2010 Logo" src="http://www.codegeneration.net/cg2010/images/CG2010logo250x64.gif" alt="" width="250" height="64" /></a></p>
<p style="text-align: left;">The Programme for <a title="Code Generation 2010 Programme" href="http://www.codegeneration.net/cg2010/programme.php" target="_blank">Code Generation 2010</a> has been published.</p>
<p>This year <a title="Mark Dalgarno" href="http://blog.software-acumen.com/2010/03/13/cg2010-program-launched/" target="_blank">Mark</a> has invited me to give an introductory session to <a href="http://www.codegeneration.net/cg2010/sessioninfo.php?session=101" target="_blank">Model Driven Software Development</a> (MDSD) oriented to begginers.</p>
<p>Also, I will discuss in a second session about <a title="Tailored code generatiors" href="http://www.codegeneration.net/cg2010/sessioninfo.php?session=15" target="_blank">creating tailored code generators</a>.</p>
<p>See you in <a title="CG2010" href="http://www.codegeneration.net/cg2010/index.php" target="_blank">Cambridge</a> in June!</p>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2010/03/countdown-for-cg2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Forward engineering with MDD: A proof of concept</title>
		<link>http://pjmolina.com/metalevel/2009/12/forward-engineering-with-mdd-a-proof-of-concept/</link>
		<comments>http://pjmolina.com/metalevel/2009/12/forward-engineering-with-mdd-a-proof-of-concept/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 00:11:03 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=382</guid>
		<description><![CDATA[Hello everybody! I want to share with you a set of videos to show what I understand when talking about Forward Engineering applied to MDD. First of all, a legal disclaimer: my apologies for the quality of the videos and for my rusty English: I am starting to play with video editing tools and recording [...]]]></description>
			<content:encoded><![CDATA[<p>Hello everybody!</p>
<p>I want to share with you a set of videos to show what I understand when talking about <strong>Forward Engineering</strong> applied to <strong>MDD</strong>.</p>
<p>First of all, a legal disclaimer: <em>my apologies for the quality of the videos and for my rusty English: I am starting to play with video editing tools and recording software so I expect to improve my recording and editing skills on the way. Anyway, I found (I hope) they have enough quality to explain the main ideas. So seeing it is totally up to you! You have been warned!  <img src='http://pjmolina.com/metalevel/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </em></p>
<p><em>Also note: see the videos in High Quality mode (HQ) in Youtube. Otherwise, details of the samples probably will not be visible.</em></p>
<p>In a <a title="Scaling MDD for production" href="http://pjmolina.com/metalevel/2009/06/scaling-mdd-for-production/" target="_blank">previous post</a> I introduced a sample of the code that can be generated from a very basic conceptual model. I have created three videos to show you the main steps involved.</p>
<ol>
<li><strong>Modeling (<a title="Forward engineering with MDD: 1/3 Modeling" href="http://www.youtube.com/watch?v=T8seerYgHwc&amp;fmt=6" target="_blank">Video 1/3</a></strong><strong>)</strong>. The first video uses a minimalistic class model created inside Visual Studio 2005 with Microsoft DSL Tools. The sample creates a basic blog structure in less than 5 minutes. Note that in the specification there are no technological choices (neither the types are bind to a concrete language representation).
</li>
<li><strong>Code Generation (<a title="Forward engineering with MDD: 2/3 Code generation" href="http://www.youtube.com/watch?v=ZhUeYXsR7G8&amp;fmt=6" target="_blank">Video 2/3</a>)</strong>. A quick step: Selecting a code generation (selecting a target architecture), fixing the design choices offered by the code generation and pressing the red button: Generate! A full .NET Solution is generated in less than 5 seconds ready to compile.
</li>
<li><strong>A quick code review of the generated code (<a title="Forward engineering with MDD: 3/3 A quick review to the generated code" href="http://www.youtube.com/watch?v=o-md-41irDA&amp;fmt=6" target="_blank">Video 3/3</a>)</strong>. Finally, I am sure you have curiosity to take a look to the output code, don’t you? This third video shows a walkthrough to show:
<ul>
<li>DB Scripts (table creation, foreign keys,  drop scripts)</li>
<li>Database creation</li>
<li>Logic layer: POCOs (Plain Old CLR objects), NHibernate mappings and a Business Service Layer with fully functional CRUD operations.</li>
</ul>
</li>
</ol>
<p>So this is it. It is a proof of concept of how fast and direct MDD tools can be starting from a minimalistic model.</p>
<p>When talking about using or buying modeling &amp; code generation products my advice is:</p>
<ul>
<li>Don’t use models just for documentation. They will be outdated soon or later. On the contrary, a living (generating) model is always in sync with its target application.</li>
<li>Don’t resign yourself to just using code generation of skeletons. As you just have seen the current technology allows you to generate much more.</li>
<li>Don’t be content if anyone try to sell you a model too close or tied in any way to a given target language. Today we have just generated C#, but tomorrow may be we prefer Ruby? Python?</li>
<li>Don’t resign yourself to use a tool married with a specific database. You know, technology changes faster that we usually expect.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2009/12/forward-engineering-with-mdd-a-proof-of-concept/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>SOA and MDD with Oslo</title>
		<link>http://pjmolina.com/metalevel/2009/11/soa-and-mdd-with-oslo/</link>
		<comments>http://pjmolina.com/metalevel/2009/11/soa-and-mdd-with-oslo/#comments</comments>
		<pubDate>Sat, 21 Nov 2009 11:49:24 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[MDD]]></category>
		<category><![CDATA[Oslo]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[MD SOA]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=330</guid>
		<description><![CDATA[In the issue #21 of the Microsoft Architecture Journal, Cesar de la Torre talks about implementing SOA using an MDD aproach supported with Oslo: Model Driven SOA with Oslo. In the economic crisis scenario, some voices argues about the death of SOA (more, more and more) just even before few organizations has already started to [...]]]></description>
			<content:encoded><![CDATA[<p>In the issue <a title="Issue #21, Microsoft Architecture Journal" href="http://msdn.microsoft.com/en-us/architecture/aa699437.aspx" target="_blank">#21</a> of the <a title="Microsoft Architecture Journal" href="http://msdn.microsoft.com/en-us/architecture/bb410935.aspx" target="_blank">Microsoft Architecture Journal</a>, <a title="Cesar de la Torre blog" href="http://blogs.msdn.com/cesardelatorre/default.aspx" target="_blank"><strong>Cesar de la Torre</strong></a> talks about implementing SOA using an MDD aproach supported with Oslo: <a title="Model Driven SOA with Oslo" href="http://msdn.microsoft.com/en-us/architecture/aa699436.aspx" target="_blank">Model Driven SOA with Oslo</a>.</p>
<p>In the economic crisis scenario, some voices argues about the <a title="SOA is dead" href="http://apsblog.burtongroup.com/2009/01/soa-is-dead-long-live-services.html" target="_blank">death of SOA</a> (<a title="InfoQ on SOA death" href="http://www.infoq.com/news/2009/01/is-soa-dead" target="_blank">more</a>, <a title="Kurt Cagle" href="http://broadcast.oreilly.com/2009/01/soa-is-dead-its-about-time.html" target="_blank">more</a> and <a title="Debate on SOA death" href="http://blogs.zdnet.com/service-oriented/?p=2023" target="_blank">more</a>) just even before few organizations has already started to adopt it.</p>
<p>However, the SOA approach has <a title="Defining SOA as an architectural style, IBM" href="http://www.ibm.com/developerworks/architecture/library/ar-soastyle/" target="_blank">valuable principles</a> for Enterprise Software organization for the long term maintenance, integration and minimizing the <a title="Total Cost of Ownership" href="http://en.wikipedia.org/wiki/Total_cost_of_ownership" target="_blank">TCO</a>.</p>
<p>Johan den Haan has a nice post about it: <a title="SOA is dead; long live Model-Driven SOA" href="http://www.theenterprisearchitect.eu/archive/2009/01/26/soa-is-dead-long-live-model-driven-soa" target="_blank">SOA is dead; long live Model-Driven SOA</a>.</p>
<p>As a supporter of MDD, <strong>I agree</strong> with Cesar and Johan, <strong>MD SOA</strong> could be a way to deliver the good principles behing SOA.</p>
<p>SOA is always a tough topic to explain for first time visitors. To help to introduce it I will link a superb presentation about it: <a title="Meet Mike..." href="http://www.slideshare.net/ehildebrandt/meet-mike-presentation" target="_blank">Meet mike&#8230;</a> (credits for <a title="Eduard Hildebrandt" href="http://www.slideshare.net/ehildebrandt" target="_blank">Eduard Hildebrandt</a>).</p>
<div class="wp-caption aligncenter" style="width: 471px"><img class="  " title="MDD with Oslo" src="http://i.msdn.microsoft.com/aa699437.a2f5(en-us,MSDN.10).png" alt="MDD with Oslo" width="461" height="300" /><p class="wp-caption-text">MDD with Oslo</p></div>
<p>On the other hand, as Cesar pointed, Microsoft Oslo project has/had (after the rebranding) potential to be a good platform for domain modelling with textual DSL (<em>MGrammar</em>) and visual DSL (<em>Quadrant</em>).</p>
<p>As commented in the previous posts, it&#8217;s a pity that for the moment modeling efforts at Microsoft has been focused too much into one particular tree &#8220;the SQL Server scope&#8221; and loose the full forest vision.</p>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2009/11/soa-and-mdd-with-oslo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Choosing a Template Engine for code generation</title>
		<link>http://pjmolina.com/metalevel/2009/06/choosing-a-template-engine-for-code-generation/</link>
		<comments>http://pjmolina.com/metalevel/2009/06/choosing-a-template-engine-for-code-generation/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 22:19:04 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[stringtemplate]]></category>
		<category><![CDATA[template engine]]></category>
		<category><![CDATA[text template]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=118</guid>
		<description><![CDATA[Selecting a good Template Engine is an important issue when dealing with code generation. Since 1998 I&#8217;ve been testing almost lots of them and forming an opinion about it at the same time the technology evolved. Been at CG2009 and attending the session of Kathleen Dollard on Template Specialization brought to my mind all the [...]]]></description>
			<content:encoded><![CDATA[<p>Selecting a good Template Engine is an important issue when dealing with code generation.</p>
<p>Since 1998 I&#8217;ve been testing almost lots of them and forming an opinion about it at the same time the technology evolved. Been at CG2009 and attending the session of <a title="Kathleen Dollard's blog" href="http://msmvps.com/blogs/Kathleen/">Kathleen Dollard</a> on <a title="Template Speciallization" href="http://www.codegeneration.net/cg2009/sessioninfo.php?session=34">Template Specialization</a> brought to my mind all the times I wasn&#8217;t satisfied with my current template engine and changed to try for a new one.</p>
<p>Doing commercial code generators, I&#8217;ve been tested lost of techniques: direct string concatenation, XSLT, direct code generation (or what Kathleen calls <em>brute force</em> code gen), ASP, JSP based approaches, developing custom template engines (two of them), taking a look to Code Smith, T4 and others, using NVelocity and finally arriving till StringTemplate (for the moment).<br />
<span id="more-118"></span></p>
<h3>The essence of a Code Generation</h3>
<p>Code generation is most of the time producing output source code as text files.<br />
In the text-based generation process, the <strong>model</strong> is used as <em>metadata</em> by a the <strong>control</strong> (a transformation program or control rules) to fulfill a text <strong>template</strong> (basically a text form with named holes).</p>
<p>Models, transformation algorithms and templates are core assets to be reused and recombined in different ways across the MDD discipline. So, selecting a good technology to mix all them&#8217;up in the proper way is essential for success.</p>
<p>When writing templates for code generation (M2T) or (M2M model to model) you need to have at least three languages in mind at the same time: the input language (or model), the transformation language by itself and the output language. </p>
<p>Usually in and out models/langs are complex enough so it would be interesting to have the easiest of use transformation tools we found and at the same time powerful enough to make the job.</p>
<p>Pros and cons for each template engine approach can only be stated respect to some requirements. Different requirements imply different selection criteria. So let&#8217;s start expliciting my requirements for a text template engine.</p>
<h3>My requirements</h3>
<ol>
<li><strong>Direct recognition of the final output. </strong>Easy to read and understand. A template represent a piece of output of the target language.</li>
<li><strong>Easy to maintain</strong>. Templates are created to be changed. And when needed, the change should be done in a quick and agile way.</li>
<li><strong>Reusable</strong>. Templates should be reusable in different contexts.</li>
<li><strong>Minimalistic</strong>. Due to requirement (1) &amp; (2) a template language must resemble the final output with the minimal necessary distracting extra lexicon not belonging to the output language.</li>
<li><strong>Composable</strong>. A template must for sure be callable from other templates.</li>
<li><strong>Separation of Concerns</strong>. Separate the control (the transformation) from the template. MVC Pattern.</li>
<li><strong>Idempotent</strong>. A template execution must be repeatable whenever is needed. Reapplying the template should generate always the same output, no matter how many times you call it.  Therefore, it should to contain <em>lateral effects</em>: not more than the line timestamp of when the generation process took place if needed.</li>
</ol>
<p>Now, we can review the main pros &amp; cons of the technologies involved respect to these requirements:</p>
<h3>Direct string concatenation (aka Brute Force approach)</h3>
<p>This is one of the first techniques we all tried for first time. It&#8217;s easy and direct. You start choosing your favorite language like C# and start doing things like this one:</p>
<p>Output code:</p>
<pre name="code" class="brush: sql">        select Id, Name, Surname
        from Customer
        where Country LIKE @vCountry</pre>
<p>Generator:</p>
<pre name="code" class="brush: csharp">        string sql;
        string sqlRes;
        sql += " select Id, Name, Surname";
        sql += " from " + tableName;
        sql += " where Country LIKE @vCountry";
        sqlRes = String.Format(sql);</pre>
<p>If you are a bit more sophisticated (or geek enough!!) and concerned about the performance, you will change string concatenation for a buffer based approach like this one:</p>
<pre name="code" class="brush: csharp">        System.Text.StringBuilder sql = new System.Text.StringBuilder();
        sql.Append(" select Id, Name, Surname");
        sql.AppendFormat(" from {0}", tableName);
        sql.Append(" where Country LIKE @vCountry");
        string sqlRes = String.Format(sql.ToString());</pre>
<p>But at the end of the day you will still not fulfilling the majority of the requirements. It&#8217;s not easy to maintain such template: mainly because we are mixing the transformation language (C#) with the output one (SQL in this case).</p>
<p>As an extreme case of this to illustrate how much the thing can get worse, I remember myself concatenating strings in 1999 inside C++ to generate ColdFusion code, this CF output code was, at the same time, generating Javascript on the fly, and this one, finally generating some kind of Dynamic HTML for a web application. It&#8217;s weird, isn&#8217;t it?</p>
<p>Character escaping like \&#8221; for adding a quote in the right place or thinking twice if a semicolon is needed or not was a totally nightmare in addition of trying to have in mind the syntax of 4 languages at the same time.</p>
<h3>XSLT</h3>
<p>Xml Stylesheets Transformations is a W3C standard proposed for translating XML to different text outputs like XML again, HTML, text, code, etc.</p>
<p>The idea originally was quite good, XML needs to be transformed quite frequently to adapt to special needs. And making a XML transformation based on XML languages makes sense because you were using apparently the same XML base language.</p>
<p>However, if you ever used XSLT you will find that is poorly user-friendly, it has a very bad legibility and, therefore, it ends in an unmaintainability hell. A week later than you coded the template, you will start to have problems in remember what these templates were trying to solve.</p>
<p>A sample:</p>
<pre name="code" class="brush: xslt">
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:for-each select="tables/table">
            select Id, Name, Surname
            from <xsl:value-of select="tableName"/>
            where Country LIKE @vCountry
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>
</pre>
<p>So, if you are in a proffessional context, you need easy maintainability and XSLT shouldn&#8217;t be your first choice (nor also the second unless you can generate the XSLT itseft).</p>
<p>It is also a paradox to see how XML was designed to be user readable, however XSLT it isn&#8217;t once you start to create non trivial samples.</p>
<p>XSLT was not bad for doing <em>simple</em> formatting on the XML. For example, generating HTML from XML with XSLT is ok as far as you don&#8217;t try to change the structure of the input tree too much (the output must be following the same tree structure or be a subtree of it).</p>
<p>Any way, mixing the XML syntax of XSLT and the output like HTML makes the whole much more cryptic.</p>
<h3>CodeDom</h3>
<p>CodeDom is a powerful (but not nice) API allowing anyone inside a .NET program to generate .NET code in any .NET language. The price to pay is that CodeDom flights at a very, very low level altitude respect to compilers and the underground MSIL instructions.</p>
<p>Code is quite complex even for trivial constructions. On the other hands provides language independence, allowing you to generate C#, VB.NET or any other .NET language as soon a CodeDom serializer is implemented.</p>
<p>Visual Studio uses CodeDom intensively to do things such as generating code for controls whenever you drag &#038; drop a control on the designer surfaces. And it does it in the language you are working with.</p>
<p>If you don&#8217;t need to generate code in such context, avoid the usage of CodeDom.</p>
<p>A hardcore version of CodeDom is to use the Emit() functions to create tangible MSIL (like bytecode in Java) on the fly. But this is more a hacking technique or a final compiler than a real need for our usual needs.</p>
<h3>ASP, JSP syntax-like (Code Smith and others)</h3>
<p>ASP based languages mixes XML tags with code inserted in between.</p>
<p>Having the opportunity to add code inside the template, gives you the &#8220;bad&#8221; chance to mix presentation (the template) and the control (the code you apply to drive the transformation).</p>
<p>It&#8217;s interesting to see how the Web developer of the Java community moved apart from this kind of practices and started to use the MVC pattern (Model View Controller) providing an strict separation as they did with the Struts framework. Ruby guys did the same with Ruby on Rails. And finally ASP.NET is doing the same with the <a href="http://www.asp.net/mvc/" title="ASP.NET MVC framework">MVC framework for .NET</a>.</p>
<p>So, if web developers notice that having templates and control code mixed at the same file it not desirable for maintainability and reuse, why us, the code generators designer and developers, are not seeing it in general?</p>
<h3>NVelocity</h3>
<p><a href="http://nvelocity.sourceforge.net/" title="NVelocity">NVelocity</a> is the .NET port of the <a href="http://velocity.apache.org/" title="Apache Velocity Project">Apache Velocity Project</a>. I used it for two years because it has a good features for splitting the templates in manageable chunks and call to subtemplates whenever it is needed. The control was starting to be limited to keep the control as simple as possible: I liked the approach and used it extensibly, but still having too much open control.</p>
<h3>Xpand</h3>
<p>On the Java side of the world, Eclipse guys have another approach called <a href="http://www.eclipse.org/modeling/m2t/?project=xpand" title="Xpand">Xpand</a>. </p>
<p>OpenArchitectuWare and other projects use it extensively and has well supported on Eclipse with color syntax and code completion features.</p>
<p>To be honest I don&#8217;t tested it yet, but I promise to do it soon. Therefore, I will not comment more on it before trying it.</p>
<h3>T4</h3>
<p>With the apparition of Microsoft DSL Tools, the <a href="http://msdn.microsoft.com/en-us/vstudio/cc308634.aspx" title="Microsoft T4">T4</a> template engine came into scene.<br />
T4 generally runs inside Visual Studio (can be executed from the command line also) and each *.tt file can be generating one dependent code file.</p>
<p>The first thing I don&#8217;t like is the <em>one to one</em> mapping. Usually I need to apply my code generation in a <em>one to many</em> files operation to process collections of them. It&#8217;s true that there are workarounds allowing you to generate multiples files from a T4 template. But it is more a hack that a built-in feature of the engine.</p>
<p>As a derivate of the ASP syntax, control and template are mixed. Templates are compiled before executed. This should be great for the responsiveness of code generation time. However, generation time usually takes longer inside Visual Studio that applying other technologies based in interpretation: I do not know why, may be the bottleneck is in an external dependency in the generation process, such us loading the input models.</p>
<p>On the pros side, the templates have intelisense support and syntax coloring inside Visual Studio to make it easy the editing experience.</p>
<p>Of course T4 was designed to be a convenient way of extension for adding code generation to a Visual Studio project. However, it also encompasses some design choices not necessarily optimal for other usages. This is mainly my case: I&#8217;am not saying T4 is a useless. Just it is simply is not well suited for my needs as stated in my previous requirements.</p>
<h3>StringTemplate</h3>
<p>Finally, I&#8217;ve been using the great Terence Parr&#8217;s ANTLR parser for a long time. And it was only a question of time to try his companion template engine: String Template.</p>
<p>I like Terence Parr&#8217;s <a href="http://www.stringtemplate.org/">StringTemplate</a> approach because this enforces a strict <strong>Separation of Concerns</strong> when doing code generation: separating the template (a text form with holes and nothing else), from the model, and from the transformation itself (control code to apply the template).</p>
<p>For years I&#8217;ve been looking for something so well aligned with my ideas, so finally I felt that I found it.</p>
<p>Terence has a nice article to read to understand the point of view: <a href="http://www.cs.usfca.edu/~parrt/papers/mvc.templates.pdf" title="Enforcing Strict Model View  separation in Template Engines">Enforcing Strict Model View  separation in Template Engines</a>.</p>
<p>A StringTemplate sample:</p>
<pre name="code" class="brush: sql">
group sql-gen;

genSelect(tbl)::=<<
select $tbl.Fields:genColumn(); sepatator=", "$
from table $tbl.Name$
>>

genColumn()::=<<
[$it.Name$]
>>
</pre>
<p>In StringTemplate each template can receive parameters. A template can call a subtemplate, and express nice things to take care of the formatting like separators or automatic indentation. Iterations are expressed in the following way <em>$collectionExpression:templateToApply()$</em>. But nothing more: there is not more content for control. <strong>$it$</strong> stands for the model item been iterated (implicit <strong>this</strong> reference if you want).</p>
<p>The template is reusable. It will work whenever you pass an object containing a property called <strong>Name</strong> and having a collection of objects convertible to string called <strong>Fields</strong>. These are all the requisites the template is imposing to the input model.</p>
<p>During the CG2009 conference and also during CG2008 we always discuss with our Microsoft colleagues why we are using DSL Tools but skipping the usage of T4 templates?  I promised myself to write a blog-post like this one to try to explain my reasons.</p>
<h3>To sum up</h3>
<p>From an MDD point of view, text engine templates constitute a well defined domain. Having a precise DSL language to deal with the domain makes perfect sense in this context. Therefore, the language must be designed to express what is expected to do in the best way without introducing any further unneeded fanfare.</p>
<p>And you? What do you think about it? What is your experience in the usage of template engines?</p>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2009/06/choosing-a-template-engine-for-code-generation/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Scaling MDD for production</title>
		<link>http://pjmolina.com/metalevel/2009/06/scaling-mdd-for-production/</link>
		<comments>http://pjmolina.com/metalevel/2009/06/scaling-mdd-for-production/#comments</comments>
		<pubDate>Fri, 19 Jun 2009 19:46:32 +0000</pubDate>
		<dc:creator>Pedro J. Molina</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Code Generation]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[MDD]]></category>
		<category><![CDATA[Oslo]]></category>
		<category><![CDATA[CG2009]]></category>
		<category><![CDATA[scale]]></category>

		<guid isPermaLink="false">http://pjmolina.com/metalevel/?p=80</guid>
		<description><![CDATA[This was my contribution for the Code Generation 2009 conference. The central idea of my speech was devoted to achieve scalability in MDD tools &#38; methods for industrial application of the MDD technology. I was so glad to see that Markus Völter and Steven Kelly also just 30 minutes before my talk, were addressing the same key issues [...]]]></description>
			<content:encoded><![CDATA[<p>This was my contribution for the <a title="Code Generation 2009" href="http://www.codegeneration.net/cg2009/" target="_blank">Code Generation 2009</a> conference.</p>
<p>The central idea of my speech was devoted to achieve scalability in MDD tools &amp; methods for industrial application of the MDD technology.</p>
<p>I was so glad to see that <a title="Markus Vöelter" href="http://voelterblog.blogspot.com/" target="_blank">Markus Völter</a> and <a title="Steven Kelly's blog" href="http://www.metacase.com/blogs/stevek/blogView" target="_blank">Steven Kelly</a> also just 30 minutes before my talk, were addressing the same key issues in their inspiring keynote: <em>scalability, partitioning, modularization of DSL</em>. This fact reinforce me in the idea that we are really growing as a community (CG) with common problems and aligned in the solutions improving the tools &amp; techniques more and more every year.</p>
<p><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" title="Scaling MDD for production: enabling SoC at model time" href="http://www.slideshare.net/pjmolina/cg09-soc-driven?type=powerpoint">Scaling MDD for production: enabling SoC at model time</a></p>
<div id="__ss_1544278" style="width: 425px; text-align: left;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cg09-socdriven-090607063917-phpapp01&amp;rel=0&amp;stripped_title=cg09-soc-driven" /><embed type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cg09-socdriven-090607063917-phpapp01&amp;rel=0&amp;stripped_title=cg09-soc-driven" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<p>There was also time for an small but complete live demo of a small tool <strong>socDriven</strong> running and demonstrating the concepts explained. The tool was implementing a compiler and merger for a small textual DSL. The DSL was parsed using the <a title="OSLO" href="http://msdn.microsoft.com/en-us/oslo/default.aspx">OSLO</a> M<sub>Grammar</sub> to create the AST. A merged engine in a second phase glued the partial specifications producing as output:</p>
<ul>
<li>the same specs merged in a unique file,</li>
<li>the same spec ready to be open with a graphical editor with DSL Tools,</li>
<li>a full code generation solution on VS2008 containing:
<ul>
<li>scripts for SQL Server</li>
<li>a logic layers with <a title="POCO definition" href="http://en.wikipedia.org/wiki/Plain_Old_CLR_Object" target="_blank">POCO</a>s &amp; full NHibernate mappings</li>
<li>a default CRUD service definition,</li>
<li>a default Web Service definition,</li>
<li>and a Windows Form UI ready to query and execute CRUD operations.</li>
</ul>
</li>
</ul>
<p>After the generation of the solution, it can be opened with VS, create the DB launching the scripts provided and pressing just F5 for building and running it all! == (a.k.a<em> the utopia of 0 custom code) </em>};-)</p>
<p>Please, feel free to add your comments!</p>
]]></content:encoded>
			<wfw:commentRss>http://pjmolina.com/metalevel/2009/06/scaling-mdd-for-production/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

