- 1 - Grab Microsoft Virtual PC 2007
- 2 - Get a trial VPC image of Visual Studio® Team System 2008 Team Foundation Server and Team Suite
- 3 - Download and install Microsoft Visual Studio 2008 SDK in your virtual machine
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 DSLFire 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
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.