Skip to main content

Domain Specific Languages (DSL) And VS2008

Recently I started playing with VS 2008 and DSL (Domain Specific Language), and soon got bored with the T4 template engine. If you are still not with the story, the easiest way to start the play with out spoiling the existing egg in your plate is

This should get you everything you need to start with

The Visual Studio 2008 SDK contains DSL toolkit, along with a lot of other goodies. (If you have VS 2005 instead of 2008, still you can dig around, find and download the SDK for VS 2005, and you'll get the DSL toolkit installed with the same)

And just before we start, here is a bit of story about DSL if you are not familiar with the same. "Domain-Specific Language Tools enable the construction of custom graphical designers and the generation of source code using domain-specific diagrammatic notations." In simple words, if you are unhappy with the existing class designer in Visual Studio, you can go ahead and use the DSL tools to create a class designer yourself, and write some code to generate code out of the class model you may create with you class designer. But once you are good enough, you may certainly think about doing much better things with DSL - for sure :). Now we are good to go.

Starting With DSL

Fire up your Visual Studio IDE, and create a new project. Select Other Project Types - Extensibility - Domain Specific Language Designer as shown, and click OK

Follow the Wizard, Select 'Minimal Language' from the set of template language definitions, and Finish off. You can find the classes and relationships on left, and the Diagram elements on right. You can map any class or relationship to a diagram element. (Fig 1) You can use the Diagram Element Map connector from the toolbox, to connect a class or relationship with a diagram element.

If you see, the ExampleElement domain class is mapped to the diagram element Example Shape . This means, the user of your DSL will use the shape definition of ExampleShape geometry shape, to draw a notation, that represents a ExampleElement

There is a DomainRelationShip that actually connects the ExampleElement Domain Class to itself. ExampleElementReferencesTargets DomainRelationship is mapped to a ExampleConnector. This simply depicts that the user of your DSL can use the notation provided by ExampleConnector to draw a relation between one ExampleElement and another ExampleElement.

You can add a new Domain Class by selecting either the Domain Class or Named Domain Class from the toolbox. To create a Domain Relationship between two Domain Classes, you can select the Embedded Relationship or Reference Relationship. If it is an embedded relationship, it means the target domain class is 'completely a part of' the source domain class - much like a polygon and the points. If the polygon is destroyed, so are the points in it. If you are familiar with UML, you know that it means composition.

On the other hand, a reference relationship depicts an aggregation, which means the target is not completely part of the source. For example, a product is part of the order, but a product will continue to exist even if the order is not there. As simple as that.


  1. In that example solution, ExampleElement is nested under the root element. If you create a new Domain Class, it appears as a new root. How do you go about getting new Domain Classes to nest, as this initial Domain Class does?

  2. You can use a relation connector - like an embedded relation or association, to specify the 'nestings'

  3. Hope this answer your question

  4. I have used a relation connector to associate domain classes, and my domain class will be nested in the heirarchy properly. However the new domain class will also appear at the bottom of the designer as well. This is different from the example of Minimal Language, where ExampleElement appears as a domain class under ExampleModel, but it does not display again at the bottom of the designer like any new domain class I add will do.


Post a Comment

Please keep your comments clean.

Popular posts from this blog

Top 7 Coding Standards & Guideline Documents For C#/.NET Developers

Some time back, I collated a list of 7 Must Read, Free EBooks for .NET Developers, and a lot of people found it useful. So, I thought about putting together a list of Coding Standard guidelines/checklists for .NET /C# developers as well.As you may already know, it is easy to come up with a document - the key is in implementing these standards in your organization, through methods like internal trainings, Peer Reviews, Check in policies, Automated code review tools etc. You can have a look at FxCop and/or StyleCop for automating the review process to some extent, and can customize the rules based on your requirements.Anyway, here is a list of some good Coding Standard Documents. They are useful not just from a review perspective - going through these documents can definitely help you and me to iron out few hidden glitches we might have in the programming portion of our brain. So, here we go, the listing is not in any specific order.1 – IDesign C# Coding StandardsIDesign C# coding stand…

Creating a quick Todo listing app on Windows using IIS7, Node.js and Mongodb

As I mentioned in my last post, more and more organizations are leaning towards Web Oriented Architecture (WOA) which are highly scalable. If you were exploring cool, scalable options to build highly performing web applications, you know what Node.js is for.After following the recent post from Scott Hanselman, I was up and running quickly with Node.js. In this post, I’ll explain step by step how I’ve setup Node.js and Mongodb to create a simple Todo listing application.Setting up Node.jsThis is what I’ve done.1 – Goto, scroll down and download node.exe for Windows, and place it in your c:\node folder2 – Goto IIS Node project in Git at, download the correct ‘retail’ link of IIS Node zip file (I downloaded the already built retail package, otherwise you can download and build from the source).3 – Extract the zip file some where, and run the install.bat or install_iisexpress.bat depending on your IIS Version. If you don’t have IIS in…

5 Awesome Learning Resources For Programmers (To help you and your kids to grow the geek neurons)

Happy New Year, this is my first post in 2012. I’ll be sharing few awesome learning resources I’ve bookmarked, and will be pointing out some specific computer/programming related courses I've found interesting from these resources.Also, thought about saving this blog post for my kids as well - instead of investing in these Child education schemes (though they are too small as of today, 2 years and 60 days respectively ). Anyway, personally my new year resolution is to see as much videos from this course collections (assuming I can find some free time in between my regular job && changing my babies diapers).1 – Khan AcademyAs I mentioned some time back, you and your kids are missing some thing huge if you havn’t heard about Khan Academy.  It is an awesome learning resource, especially if you want to re-visit your basics in Math, Science etc.With a library of over 2,600 videos covering everything from arithmetic to physics, finance, and history and 268 practice exercises, th…