<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Skinner's Blog : tsbt-arch</title><link>http://blogs.msdn.com/camerons/archive/tags/tsbt-arch/default.aspx</link><description>Tags: tsbt-arch</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>PDC 2009</title><link>http://blogs.msdn.com/camerons/archive/2009/11/05/pdc-2009.aspx</link><pubDate>Thu, 05 Nov 2009 20:33:44 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9918220</guid><dc:creator>camerons</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/camerons/comments/9918220.aspx</comments><wfw:commentRss>http://blogs.msdn.com/camerons/commentrss.aspx?PostID=9918220</wfw:commentRss><description>&lt;p&gt;Realized I haven’t mentioned that I am planning on giving a talk at this year’s PDC. Here’s that abstract:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://microsoftpdc.com/Sessions/FT08"&gt;Visualization, UML, and DSLs&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://microsoftpdc.com/Speakers/Cameron-Skinner"&gt;Cameron Skinner&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Microsoft Visual Studio Team System 2010 Architecture Edition introduces a whole host of new designers and modeling tools to help enterprises and teams build software. UML Diagrams and the Layer Diagram can be used to plan and design the assets your team will produce, and communicate effectively about those designs during the entire development lifecycle. The Architecture Explorer and Graphs help you investigate and better understand the assets you have to enable more effective planning and decision making. Come learn how you can use all of these tools when investigating your current assets, and planning and designing your future work.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I hope to see you all there!&lt;/p&gt;  &lt;p&gt;One other thing that I also want to mention is that Jens Jacobsen, a Program Manager on my team, has just started blogging. His first-time post is &lt;a href="http://blogs.msdn.com/jens_jacobsen/archive/2009/11/05/welcome-and-some-thoughts-about-architecture-tool-usability.aspx" target="_blank"&gt;right here&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;I’m looking forward to watching what Jens comes up with, as he is planning on focusing in on how to improve overall User Experience of the tooling we are producing, now and into the future. He is uniquely qualified to lead the charge on this as he has deep experience in user experience research. &lt;/p&gt;  &lt;p&gt;So check out his blog and give Jens some feedback / participate in future discussions he begins.&lt;/p&gt;  &lt;p&gt;Thanks!&lt;/p&gt;  &lt;p&gt;Cameron&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9918220" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/camerons/archive/tags/tsbt-arch/default.aspx">tsbt-arch</category><category domain="http://blogs.msdn.com/camerons/archive/tags/PDC2009/default.aspx">PDC2009</category></item><item><title>Providing Feedback</title><link>http://blogs.msdn.com/camerons/archive/2009/10/26/providing-feedback.aspx</link><pubDate>Mon, 26 Oct 2009 20:22:11 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9913161</guid><dc:creator>camerons</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/camerons/comments/9913161.aspx</comments><wfw:commentRss>http://blogs.msdn.com/camerons/commentrss.aspx?PostID=9913161</wfw:commentRss><description>&lt;p&gt;By now, you’ve pulled down the Beta2 bits and have started exploring. ( No you say? Please check &lt;a href="http://blogs.msdn.com/camerons/archive/2009/10/19/visual-studio-2010-and-net-framework-4-beta-2.aspx"&gt;this post&lt;/a&gt; for details on how to get the bits…. )&lt;/p&gt;  &lt;p&gt;You may have questions, want to express concerns, find bugs and want to report them, or in general just look for more venues where topics specific to the Architecture and Modeling tools in Visual Studio 2010 can be found.&lt;/p&gt;  &lt;p&gt;The MSDN forums are the place to start, and in particular, the following two forums have been created for the Beta2 bits:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/vsarch"&gt;Visual Studio Architectural Discovery &amp;amp; Modeling Tools&lt;/a&gt;      &lt;br /&gt;”Discuss the code visualization and modeling tools in Visual Studio 2010, such as Architecture Explorer, dependency graphs, UML diagrams, and layer diagrams”&lt;/p&gt;    &lt;p&gt;&lt;a href="http://social.msdn.microsoft.com/Forums/en-US/dslvsarchx"&gt;Visual Studio 2010 Domain-Specific Languages (DSL) &amp;amp; Modeling Tools Extensibility&lt;/a&gt;      &lt;br /&gt;”Discuss the Microsoft Domain-Specific Language (DSL) Tools and extending the architecture and modeling tools for Visual Studio 2010”&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;As the product roles into RTM, these forums will be the place to directly interact with MVP, fellow users, and of course the folks from Microsoft that actually built the product!&lt;/p&gt;  &lt;p&gt;See you there! :)&lt;/p&gt;  &lt;p&gt;Cameron&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9913161" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/camerons/archive/tags/tsbt-arch/default.aspx">tsbt-arch</category><category domain="http://blogs.msdn.com/camerons/archive/tags/VS2010+Beta2/default.aspx">VS2010 Beta2</category><category domain="http://blogs.msdn.com/camerons/archive/tags/Visual+Studio+2010+Ultimate/default.aspx">Visual Studio 2010 Ultimate</category><category domain="http://blogs.msdn.com/camerons/archive/tags/VSTS+Designing/default.aspx">VSTS Designing</category></item><item><title>Custom Toolbox Items</title><link>http://blogs.msdn.com/camerons/archive/2009/10/22/custom-toolbox-items.aspx</link><pubDate>Thu, 22 Oct 2009 22:52:48 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9911739</guid><dc:creator>camerons</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/camerons/comments/9911739.aspx</comments><wfw:commentRss>http://blogs.msdn.com/camerons/commentrss.aspx?PostID=9911739</wfw:commentRss><description>&lt;p&gt;[NOTE: This post is part of a blog series, the start of which is &lt;a href="http://blogs.msdn.com/camerons/archive/2009/10/19/modeling-and-visualization-in-visual-studio-2010-ultimate.aspx"&gt;here&lt;/a&gt;.]&lt;/p&gt;  &lt;p&gt;When defining layer diagrams for your organization, or various other modeling concepts and diagrams that you want to make available to your team, you can of course simply check in those diagrams to your version control system, such as Team Foundation Server. But another mechanism we have enabled in the product that can easily be overlooked is the ability to create custom toolbox items from existing diagrams ( UML or Layer ), and then make those available through the VSIX mechanism also new in Visual Studio 2010.&lt;/p&gt;  &lt;p&gt;In this post, I’m going to walk you through the steps needed to create a couple different custom toolbox items. ( I’ll talk about the new VSIX capabilities in another post. )&lt;/p&gt;  &lt;p&gt;Let’s create a Layer Diagram ( I discuss the basics of what the Layer Diagram is about &lt;a href="http://blogs.msdn.com/camerons/archive/2009/10/20/layer-diagram-in-visual-studio-2010-ultimate-beta-2.aspx" target="_blank"&gt;here&lt;/a&gt; ) that can be used as the pattern for a new toolbox item that will appear whenever a Layer Diagram is present in the VS document well.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1)&lt;/strong&gt; Select the “Architecture-&amp;gt;New Diagram…” menu item.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://cwskinner.members.winisp.net/CustomToolboxItems_A3E6/image.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/CustomToolboxItems_A3E6/image_thumb.png" width="260" height="78" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2)&lt;/strong&gt; Select the “Layer Diagram” in the Add New Diagram dialog, and give the diagram the “PresentationLayer” name:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cwskinner.members.winisp.net/CustomToolboxItems_A3E6/image_3.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/CustomToolboxItems_A3E6/image_thumb_3.png" width="244" height="216" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3)&lt;/strong&gt; If you are following along exactly, this will prompt you for the name of a new modeling project. Let’s give the project the name of “CustomToolBoxItems”:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cwskinner.members.winisp.net/CustomToolboxItems_A3E6/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/CustomToolboxItems_A3E6/image_thumb_4.png" width="244" height="170" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Cool. Now the new layer diagram and modeling project show up inside Visual Studio. &lt;/p&gt;  &lt;p&gt;What we’re going to do now is replicate a layer diagram that is found in the second edition of the &lt;a href="http://msdn.microsoft.com/en-us/library/dd673617.aspx" target="_blank"&gt;Patterns &amp;amp; Practices Architecture Guide&lt;/a&gt;. Specifically, the layer diagram described in &lt;a href="http://msdn.microsoft.com/en-us/library/ee658081.aspx" target="_blank"&gt;Chapter 6: Presentation Layer Guidelines&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;4)&lt;/strong&gt; Create the following layer diagram:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cwskinner.members.winisp.net/CustomToolboxItems_A3E6/image_5.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/CustomToolboxItems_A3E6/image_thumb_5.png" width="660" height="433" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" bgcolor="#f0ffff"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;         &lt;p&gt;&lt;strong&gt;Tips &amp;amp; Tricks, plus a Beta2 BUG ALERT:&lt;/strong&gt;&lt;/p&gt;          &lt;p&gt;I cut a quick video to include with this post to show a couple of suggestions / tips on how to quickly build the diagram above, as well as call out some funky behavior in the Beta2 build that has since been corrected. Here’s that &lt;a href="http://cwskinner.members.winisp.net/Videos/LayerTipsTricksBug.wmv" target="_blank"&gt;video&lt;/a&gt;.&lt;/p&gt;          &lt;p&gt;One thing I failed to mention in the video is that you can navigate in and out of nested layers by holding the Shift-&amp;gt; to get the tab to go to inner layers, and Shift-&amp;lt; to go to containers.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;strong&gt;5)&lt;/strong&gt; Save the PresentationLayer.layerdiagram&lt;/p&gt;  &lt;p&gt;At this point, you need to create a directory in your %userprofile%\my Documents\Visual Studio 2010 directory.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;6)&lt;/strong&gt; Start a command prompt and cd to %userprofile%\my Documents\Visual Studio 2010 &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;7)&lt;/strong&gt; Create a directory called “Team Architecture”&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;8)&lt;/strong&gt; cd into the “Team Architecture” directory and create another directory called “Custom Toolbox Items”&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;9)&lt;/strong&gt; Copy your “PresentationLayer.*” files from your modeling project to the “Custom Toolbox Items” directory.&lt;/p&gt;  &lt;p&gt;Here’s an image of my command line actions of steps 5-9:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cwskinner.members.winisp.net/CustomToolboxItems_A3E6/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/CustomToolboxItems_A3E6/image_thumb_6.png" width="644" height="452" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Ok, we’re almost there. Before we exit Visual Studio, do take notice of the current toolbox window, which should look something like this:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/CustomToolboxItems_A3E6/image_7.png" width="264" height="228" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;10)&lt;/strong&gt; Exit and then restart Visual Studio, and create a new modeling project.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;11)&lt;/strong&gt; Create a new layer diagram&lt;/p&gt;  &lt;p&gt;Once the new layer diagram is visible, your toolbox should look something like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cwskinner.members.winisp.net/CustomToolboxItems_A3E6/image_8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/CustomToolboxItems_A3E6/image_thumb_7.png" width="266" height="281" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;At this point, you can select the “PresentationLayer” toolbox item and drop into your new layer diagram. You should see the exact same diagram that we created in the step 4! &lt;/p&gt;  &lt;p&gt;Now this is great, but we also give you the ability to control how these new toolbox items are displayed and organized. Enter the .tbxinfo file.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;12)&lt;/strong&gt; Create a file called “MyCustomItems.tbxinfo” in the “Custom Toolbox Items” directory we created in step 8.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;13)&lt;/strong&gt; Open that file in Visual Studio, and paste the following code:&lt;/p&gt;  &lt;div style="border-bottom: black 1px solid; border-left: black 1px solid; width: 100%; overflow: scroll; border-top: black 1px solid; border-right: black 1px solid"&gt;&amp;lt;?xml version=&lt;span style="color: red"&gt;&amp;quot;1.0&amp;quot;&lt;/span&gt; encoding=&lt;span style="color: red"&gt;&amp;quot;utf-8&amp;quot;&lt;/span&gt; ?&amp;gt;     &lt;br /&gt;&amp;lt;customToolboxItems xmlns=&lt;span style="color: red"&gt;&amp;quot;http://schemas.microsoft.com/visualstudio/2010/TeamArchitect/CustomToolboxItems&amp;quot;&lt;/span&gt;&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;customToolboxItem fileName=&lt;span style="color: red"&gt;&amp;quot;PresentationLayer.layerdiagram&amp;quot;&lt;/span&gt;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;displayName&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;value&amp;gt;Presentation Layer Pattern&amp;lt;/value&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/displayName&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;tabName&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;value&amp;gt;Patterns &amp;amp;amp; Practices&amp;lt;/value&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/tabName&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;image&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;bmp fileName=&lt;span style="color: red"&gt;&amp;quot;cloudservice.ico&amp;quot;&lt;/span&gt;/&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/image&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;f1Keyword&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;value&amp;gt;PLayerHelp&amp;lt;/value&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/f1Keyword&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;tooltip&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;value&amp;gt;Create the Presentation Layer &lt;span style="color: blue"&gt;As&lt;/span&gt; mentioned &lt;span style="color: blue"&gt;In&lt;/span&gt; Pattern &lt;span style="color: blue"&gt;And&lt;/span&gt; Practices' Architecture Guidance v2&amp;lt;/value&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/tooltip&amp;gt;     &lt;br /&gt;&amp;#160; &amp;lt;/customToolboxItem&amp;gt;     &lt;br /&gt;&amp;lt;/customToolboxItems&amp;gt; &lt;/div&gt;  &lt;div&gt;&amp;#160;&lt;/div&gt;  &lt;div&gt;Once you save that file, exit Visual Studio, open a modeling project and open a layer diagram, you’ll see the following:&lt;/div&gt;  &lt;div&gt;&amp;#160;&lt;a href="http://cwskinner.members.winisp.net/CustomToolboxItems_A3E6/image_9.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/CustomToolboxItems_A3E6/image_thumb_8.png" width="495" height="296" /&gt;&lt;/a&gt;&lt;/div&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" bgcolor="#f0ffff"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;         &lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt;&lt;/p&gt;          &lt;p&gt;As you play around with these custom tool box items, it is possible that you’ll start to see toolbox items from past experiments. If you start to see things your aren’t expecting, right click in the toolbox and select “Reset Toolbox”:&lt;/p&gt;          &lt;p&gt;&lt;a href="http://cwskinner.members.winisp.net/CustomToolboxItems_A3E6/image_10.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/CustomToolboxItems_A3E6/image_thumb_9.png" width="244" height="244" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;That’s it! You can experiment with adding more custom toolbox items created by using layer diagrams, and you can do the exact same thing with any of the UML diagrams as well. This is a great way to get started with Design Patterns or any other template you’d like to make more accessible with your engineering team.&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;  &lt;p&gt;Cameron&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;[NOTE: This post is part of a blog series, the start of which is &lt;a href="http://blogs.msdn.com/camerons/archive/2009/10/19/modeling-and-visualization-in-visual-studio-2010-ultimate.aspx"&gt;here&lt;/a&gt;.]&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9911739" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/camerons/archive/tags/tsbt-arch/default.aspx">tsbt-arch</category><category domain="http://blogs.msdn.com/camerons/archive/tags/UML/default.aspx">UML</category><category domain="http://blogs.msdn.com/camerons/archive/tags/Layer+Diagram/default.aspx">Layer Diagram</category><category domain="http://blogs.msdn.com/camerons/archive/tags/Videos/default.aspx">Videos</category><category domain="http://blogs.msdn.com/camerons/archive/tags/VS2010+Beta2/default.aspx">VS2010 Beta2</category><category domain="http://blogs.msdn.com/camerons/archive/tags/Visual+Studio+2010+Ultimate/default.aspx">Visual Studio 2010 Ultimate</category><category domain="http://blogs.msdn.com/camerons/archive/tags/VSTS+Designing/default.aspx">VSTS Designing</category></item><item><title>DSL SDK for Visual Studio 2010 Beta2 Released</title><link>http://blogs.msdn.com/camerons/archive/2009/10/22/dsl-sdk-for-visual-studio-2010-beta2-released.aspx</link><pubDate>Thu, 22 Oct 2009 17:20:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9911533</guid><dc:creator>camerons</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/camerons/comments/9911533.aspx</comments><wfw:commentRss>http://blogs.msdn.com/camerons/commentrss.aspx?PostID=9911533</wfw:commentRss><description>&lt;p&gt;Jean-Marc has just &lt;a href="http://blogs.msdn.com/jmprieur/archive/2009/10/22/we-released-the-dsl-sdk-for-visual-studio-beta2-this-morning.aspx" target="_blank"&gt;posted some great details&lt;/a&gt; on the Beta2 version of the DSL SDK.&lt;/p&gt;  &lt;p&gt;The amount of capabilities that have gone into the DSL Toolkit this version has been great to see. That team has done a fantastic job of increasing the power of what a DSL created via the toolkit can get done.&lt;/p&gt;  &lt;p&gt;Man, this has been a crazy week, in all the best of ways! :)&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9911533" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/camerons/archive/tags/tsbt-arch/default.aspx">tsbt-arch</category><category domain="http://blogs.msdn.com/camerons/archive/tags/DSL/default.aspx">DSL</category><category domain="http://blogs.msdn.com/camerons/archive/tags/VS2010+Beta2/default.aspx">VS2010 Beta2</category><category domain="http://blogs.msdn.com/camerons/archive/tags/Visual+Studio+2010+Ultimate/default.aspx">Visual Studio 2010 Ultimate</category><category domain="http://blogs.msdn.com/camerons/archive/tags/VSTS+Designing/default.aspx">VSTS Designing</category></item><item><title>Lovett is Blogging!</title><link>http://blogs.msdn.com/camerons/archive/2009/10/19/lovett-is-blogging.aspx</link><pubDate>Mon, 19 Oct 2009 22:44:59 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9909500</guid><dc:creator>camerons</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/camerons/comments/9909500.aspx</comments><wfw:commentRss>http://blogs.msdn.com/camerons/commentrss.aspx?PostID=9909500</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://www.lovettsoftware.com"&gt;Chris Lovett&lt;/a&gt;, an architect on my team who has a glorious and long history with Microsoft, has finally joined the blogosphere! His expertise is all things .NET, but in particular he knows the code behind the new DGML graphs and dependency diagrams that are new in Visual Studio 2010 Ultimate.&lt;/p&gt;  &lt;p&gt;His first two posts are fabulous, both of which include &lt;strong&gt;videos&lt;/strong&gt; of Chris walking through some of the power of the DGML graphing technology. Be sure to check out his “teaser” post &lt;a href="http://www.lovettsoftware.com/blogengine.net/post/2009/09/24/Directed-Graph-Documents.aspx"&gt;here&lt;/a&gt;, and a more in-depth post on our &lt;a href="http://www.lovettsoftware.com/blogengine.net/post/2009/09/26/Standard-Dependency-Graphs.aspx"&gt;Standard Dependency Graphs&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Be sure to subscribe to his blog, as I know he’ll be putting up quite a bit more content in the weeks ahead. &lt;/p&gt;  &lt;p&gt;You’ll be glad you did! :)&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9909500" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/camerons/archive/tags/tsbt-arch/default.aspx">tsbt-arch</category><category domain="http://blogs.msdn.com/camerons/archive/tags/DGML/default.aspx">DGML</category><category domain="http://blogs.msdn.com/camerons/archive/tags/Standard+Graphs/default.aspx">Standard Graphs</category><category domain="http://blogs.msdn.com/camerons/archive/tags/VS2010+Beta2/default.aspx">VS2010 Beta2</category><category domain="http://blogs.msdn.com/camerons/archive/tags/Visual+Studio+2010+Ultimate/default.aspx">Visual Studio 2010 Ultimate</category><category domain="http://blogs.msdn.com/camerons/archive/tags/VSTS+Designing/default.aspx">VSTS Designing</category></item><item><title>“First-time Experience” with Arch Tools</title><link>http://blogs.msdn.com/camerons/archive/2009/10/19/first-time-experience-with-arch-tools.aspx</link><pubDate>Mon, 19 Oct 2009 21:13:15 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9909437</guid><dc:creator>camerons</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/camerons/comments/9909437.aspx</comments><wfw:commentRss>http://blogs.msdn.com/camerons/commentrss.aspx?PostID=9909437</wfw:commentRss><description>&lt;p&gt;[NOTE: This post is part of a blog series, the start of which is &lt;a href="http://blogs.msdn.com/camerons/archive/2009/10/19/modeling-and-visualization-in-visual-studio-2010-ultimate.aspx"&gt;here&lt;/a&gt;.]&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Ok, you’ve downloaded the &lt;a href="http://go.microsoft.com/fwlink/?LinkID=151797" mce_href="http://go.microsoft.com/fwlink/?LinkID=151797"&gt;Beta 2 bits of Visual Studio 2010 and .NET Framework 4&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Now you want to explorer the new Modeling and Visualization tools. This post will help you make those first couple of steps.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1) Launch Visual Studio&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Notice the new top-level menu item called “Architecture”:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; width: 640px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 307px; border-left-width: 0px" title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb.png" width="640" height="307" mce_src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb.png" /&gt; &lt;/p&gt;  &lt;p&gt;With &lt;strong&gt;no solution open&lt;/strong&gt;, selecting the menu item simply results in the following:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; width: 556px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 143px; border-left-width: 0px" title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_3.png" width="556" height="143" mce_src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_3.png" /&gt; &lt;/p&gt;  &lt;p mce_keep="true"&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2) Select “New Diagram…”&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;After a couple of seconds, a dialog box appears, which looks like this:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; width: 548px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 484px; border-left-width: 0px" title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_4.png" width="548" height="484" mce_src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_4.png" /&gt; &lt;/p&gt;  &lt;p&gt;This dialog makes it very easy to see all the diagrammatic capabilities that are new in 2010. You see the ability to create a total of five different UML diagrams, a Layer Diagram option, and last but not least, the Directed Graph Document. &lt;/p&gt;  &lt;p&gt;I’ll go into detail on all these later, but for now, just accept all the defaults and hit the OK button.&lt;/p&gt;  &lt;p&gt;Now, because you do not have any solution open, you will see the following dialog:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_5.png" mce_href="http://cwskinner.members.winips.net/FirsttimeExperiencewithArchTools_13B00/image_5.png"&gt;&lt;img style="border-right-width: 0px; width: 644px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 447px; border-left-width: 0px" title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_5.png" width="644" height="447" mce_src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_5.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;( You’ll see the same dialog even if you have a solution open, but no Modeling projects exist in the solution ).&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" bgcolor="#f0ffff"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;         &lt;p&gt;&lt;strong&gt;BUG ALERT:&lt;/strong&gt;&lt;/p&gt;          &lt;p&gt;Unfortunately, a little bug slipped through the cracks that I want to point out so you don’t waste your time logging a bug that has already been fixed. &lt;/p&gt;          &lt;p&gt;If you hit the cancel button at this point, you’ll see this dialog:&lt;/p&gt;          &lt;p&gt;&lt;img style="border-right-width: 0px; width: 498px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 201px; border-left-width: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/clip_image002_thumb.jpg" width="498" height="201" mce_src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/clip_image002_thumb.jpg" /&gt;&lt;/p&gt;          &lt;p&gt;You can hit the OK button and no harm will be done, but not quite the experience we’re looking for. ;)&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Take the defaults and hit the OK button. You should see something similar to what you see in the image below ( minus my red annotations of course ):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_6.png" mce_href="http://cwskinner.members.winips.net/FirsttimeExperiencewithArchTools_13B00/image_6.png"&gt;&lt;img style="border-right-width: 0px; width: 606px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 484px; border-left-width: 0px" title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_6.png" width="606" height="484" mce_src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_6.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;At this point, your ready to start adding items to the class diagram to your hearts content. This is a pretty common first couple of steps that you will take as you start using VS 2010 Ultimate to model your problem domain using the various UML diagrams.&lt;/p&gt;  &lt;p&gt;The steps above are very similar if you have an existing solution already open, but I do want to point out a couple of differences. The steps below are quite common when you are looking to the tool to help you understand an existing code base.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3) Open an existing solution&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Just open any solution you’ve got within reach. I’m going to open up the old standby, Petshop 4.0. ( This will result in the current solution being closed, but don’t worry about that. )&lt;/p&gt;  &lt;p&gt;Once your solution is opened, you’ll see some new additions to the “Architecture” menu item:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; width: 519px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 162px; border-left-width: 0px" title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_7.png" width="519" height="162" mce_src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_7.png" /&gt; &lt;/p&gt;  &lt;p&gt;Go ahead and try one of the menu items out. I selected the “Generate Dependency Graph-&amp;gt;By Assembly” menu item, which resulted in a graph that looks like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_8.png" mce_href="http://cwskinner.members.winips.net/FirsttimeExperiencewithArchTools_13B00/image_8.png"&gt;&lt;img style="border-right-width: 0px; width: 606px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 484px; border-left-width: 0px" title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_8.png" width="606" height="484" mce_src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_8.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p mce_keep="true"&gt;Don’t worry about the details on this yet. We’ll be diving into those details in future posts. For now, we’re just kicking tires.&lt;/p&gt;  &lt;p&gt;One last thing to point out before calling this post done.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;4) Open up a source file&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In my case, I’m going to open up the Order.cs file in the OracleDAL project.&lt;/p&gt;  &lt;p&gt;Find a decent size method in your class, right click in the text editor, anywhere within the method and select …&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;5) Generate Sequence Diagram&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;You’ll see this dialog:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; width: 398px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 392px; border-left-width: 0px" title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_9.png" width="398" height="392" mce_src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_9.png" /&gt; &lt;/p&gt;  &lt;p&gt;Just take the defaults and hit OK. In my case, a diagram is generated that looks like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_10.png" mce_href="http://cwskinner.members.winips.net/FirsttimeExperiencewithArchTools_13B00/image_10.png"&gt;&lt;img style="border-right-width: 0px; width: 606px; display: inline; border-top-width: 0px; border-bottom-width: 0px; height: 484px; border-left-width: 0px" title="image" border="0" alt="image" src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_10.png" width="606" height="484" mce_src="http://cwskinner.members.winisp.net/FirsttimeExperiencewithArchTools_13B00/image_thumb_10.png" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Again, I’m not going to go into any more detail on this than I have just done. I just wanted to point out a few very common ways into some of the new features in the product.&lt;/p&gt;  &lt;p&gt;As I pointed out in this previous post, I’ve got a lot of topics I’m going to nail down for you. I don’t have any specific order that I’m committed to following, so if you have some preferences of which topics I do first, please let me know!&lt;/p&gt;  &lt;p&gt;Cameron&lt;/p&gt;  &lt;p&gt;NOTE: This post is part of a blog series, the start of which is &lt;a href="http://blogs.msdn.com/camerons/archive/2009/10/19/modeling-and-visualization-in-visual-studio-2010-ultimate.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9909437" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/camerons/archive/tags/tsbt-arch/default.aspx">tsbt-arch</category><category domain="http://blogs.msdn.com/camerons/archive/tags/VS2010+Beta2/default.aspx">VS2010 Beta2</category><category domain="http://blogs.msdn.com/camerons/archive/tags/Visual+Studio+2010+Ultimate/default.aspx">Visual Studio 2010 Ultimate</category><category domain="http://blogs.msdn.com/camerons/archive/tags/VSTS+Designing/default.aspx">VSTS Designing</category></item><item><title>Visual Studio 2010 and .NET Framework 4 Beta 2!!!</title><link>http://blogs.msdn.com/camerons/archive/2009/10/19/visual-studio-2010-and-net-framework-4-beta-2.aspx</link><pubDate>Mon, 19 Oct 2009 16:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9909196</guid><dc:creator>camerons</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/camerons/comments/9909196.aspx</comments><wfw:commentRss>http://blogs.msdn.com/camerons/commentrss.aspx?PostID=9909196</wfw:commentRss><description>&lt;P&gt;Ok, it has been a little while since I blogged last, but it is for good reason, and now’s the time to show you why.&lt;/P&gt;
&lt;P&gt;The entire Visual Studio team, including my own, have been working extremely hard to get the Visual Studio 2010 Beta 2 release squared away, and I’m very pleased to announce that those bits have been made available as of 9:00 AM PDT today! ( See Soma’s &lt;A href="http://blogs.msdn.com/somasegar/archive/2009/10/19/announcing-visual-studio-2010-and-net-fx-4-beta-2.aspx"&gt;announcement here&lt;/A&gt;. )&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;WooHoo!!!&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;There have been simply a *ton* of changes to the product since last we chatted, both from a functionality perspective ( we’ve made lots of progress that I can’t wait to tell you about! ) to changes in the Visual Studio SKU structure, to logo and name branding, and pricing changes. MSDN itself has been redesigned!&lt;/P&gt;
&lt;P&gt;But first and foremost, if you are an MSDN subscriber, stop what you are doing and go down load Beta2 and the .NET Framework 4 bits from &lt;A href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx" mce_href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx"&gt;this link&lt;/A&gt;. I really think you’re going to like what you see! And Beta2 is a “Go Live” release, which means we are encouraging you to use the product in production, with an implied understanding that if serialization formats or what have you change between now and RTM, we’ll provide a way to move your data and artifacts forward so that you don’t lose any work.&lt;/P&gt;
&lt;P&gt;If you aren’t an MSDN subscriber, general availability for the release will happen on October 21st.&lt;/P&gt;
&lt;P&gt;To get more information on the new packaging and licensing details, please visit &lt;A href="http://www.microsoft.com/visualstudio" mce_href="http://www.microsoft.com/visualstudio"&gt;this link&lt;/A&gt;. But here’s a taste of the new Visual Studio 2010 logo:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://cwskinner.members.winisp.net/VisualStudio2010Beta2_1130A/image.png" mce_href="http://cwskinner.members.winisp.net/VisualStudio2010Beta2_1130A/image.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; WIDTH: 240px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; HEIGHT: 53px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://cwskinner.members.winisp.net/VisualStudio2010Beta2_1130A/image_thumb.png" width=240 height=53 mce_src="http://cwskinner.members.winisp.net/VisualStudio2010Beta2_1130A/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;And to top everything else off, the official &lt;STRONG&gt;launch date&lt;/STRONG&gt; for Visual Studio 2010 and .NET Framework 4 is &lt;STRONG&gt;March 22nd, 2010&lt;/STRONG&gt;!&lt;/P&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;&lt;FONT color=#0080ff&gt;SKU Structure Change&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;A couple words about the changes that you can read more &lt;A href="http://www.microsoft.com/visualstudio" mce_href="http://www.microsoft.com/visualstudio"&gt;about here&lt;/A&gt;. The Architecture Edition, along with many of the features of the Team System 2008 Development box, are now part of the Visual Studio 2010 Ultimate product. &lt;/P&gt;
&lt;P&gt;The Visual Studio product line has moved to more of a “Russian Doll” model in regards to how the features are represented in each version of the product. At the top of the stack, including all the features and functionality of Visual Studio 2010 Premium and Visual Studio 2010 Professional, is the capabilities found in Visual Studio 2010 Ultimate. Going forward, I’m going to be spending my time with posts describing the Modeling and Visualization technologies in Ultimate, as that is what I know best, as that is what my team does. :)&lt;/P&gt;
&lt;P&gt;But quickly, here’s a general view of the capabilities found in the new SKU structure. Please understand that from a feature perspective, Ultimate contains everything you see in this list ( all the Premium + Professional features ), plus the Ultimate specific features.&lt;/P&gt;
&lt;P&gt;The features in &lt;FONT color=#ff0000&gt;red&lt;/FONT&gt; are the ones my team is responsible for delivering. Those features are the ones I will continue to blog about in depth in the days and weeks ahead.&lt;/P&gt;
&lt;TABLE border=1 cellSpacing=0 cellPadding=2 bgColor=#f0ffff&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Microsoft Visual Studio 2010 Ultimate ( includes all features from Premium and Professional SKUs ):&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;IntelliTrace &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000&gt;UML Modeling&lt;/FONT&gt;&lt;/STRONG&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000&gt;Layer Diagram &amp;amp; Architectural Validation&lt;/FONT&gt;&lt;/STRONG&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000&gt;Architecture Explorer&lt;/FONT&gt;&lt;/STRONG&gt; &lt;/LI&gt;
&lt;LI&gt;Web Testing &lt;/LI&gt;
&lt;LI&gt;Load Testing &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Microsoft Visual Studio 2010 Premium ( includes all features from the Professional SKU ):&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;UI Test Automation &lt;/LI&gt;
&lt;LI&gt;Test Impact Analysis &lt;/LI&gt;
&lt;LI&gt;Performance Profiling &lt;/LI&gt;
&lt;LI&gt;Static Code Analysis &lt;/LI&gt;
&lt;LI&gt;Code Coverage &lt;/LI&gt;
&lt;LI&gt;Code Metrics &lt;/LI&gt;
&lt;LI&gt;Database Change Management &lt;/LI&gt;
&lt;LI&gt;Database Deployment &lt;/LI&gt;
&lt;LI&gt;Database Unit Testing &lt;/LI&gt;
&lt;LI&gt;Test Data Generation &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#ff0000&gt;&lt;STRONG&gt;Read-Only UML, Layer, and DGML Graphs&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;U&gt;&lt;STRONG&gt;Microsoft Visual Studio 2010 Professional:&lt;/STRONG&gt;&lt;/U&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Silverlight Tools &lt;/LI&gt;
&lt;LI&gt;Multi-Core Development &lt;/LI&gt;
&lt;LI&gt;Sharepoint Development &lt;/LI&gt;
&lt;LI&gt;Cloud Development &lt;/LI&gt;
&lt;LI&gt;Web Development &lt;/LI&gt;
&lt;LI&gt;Windows Development &lt;/LI&gt;
&lt;LI&gt;Generate from Usage &lt;/LI&gt;
&lt;LI&gt;Office Development &lt;/LI&gt;
&lt;LI&gt;New WPF Editor &lt;/LI&gt;
&lt;LI&gt;Customizable IDE &lt;/LI&gt;&lt;/UL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;So stay tuned, as I’m planning on a number of posts that are designed to drill into the new features available in this beta 2 release of Visual Studio!&lt;/P&gt;
&lt;P&gt;Cameron&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9909196" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/camerons/archive/tags/tsbt-arch/default.aspx">tsbt-arch</category><category domain="http://blogs.msdn.com/camerons/archive/tags/VS2010+Beta2/default.aspx">VS2010 Beta2</category><category domain="http://blogs.msdn.com/camerons/archive/tags/Visual+Studio+2010+Ultimate/default.aspx">Visual Studio 2010 Ultimate</category></item><item><title>DGML, Containers, and VSTS 2010 Architecture Rendering</title><link>http://blogs.msdn.com/camerons/archive/2009/02/23/dgml-containers-and-vsts-2010-architecture-rendering.aspx</link><pubDate>Mon, 23 Feb 2009 05:58:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9440853</guid><dc:creator>camerons</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/camerons/comments/9440853.aspx</comments><wfw:commentRss>http://blogs.msdn.com/camerons/commentrss.aspx?PostID=9440853</wfw:commentRss><description>&lt;p&gt;I &lt;a href="http://blogs.msdn.com/camerons/archive/2009/01/26/directed-graph-markup-language-dgml.aspx"&gt;previously&lt;/a&gt; pointed out how easy it was to manipulate and then render a .dgml file in the upcoming VSTS 2010 Architecture product. I want to continue that discussion by showing how easy it is to indicate to the product that you need to see nodes contained inside another, and a few other niceties along the way.&lt;/p&gt; &lt;table border="1" cellspacing="0" cellpadding="2" width="*" bgcolor="azure"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="592"&gt;&lt;strong&gt;NOTE:&lt;br&gt;&lt;/strong&gt;&lt;br&gt;I do need to make one thing clear before we move forward. The difference between the core DGML and the additional capabilities you will find in the Architecture product is significant. The core DGML markup is limited to very few elements: DirectedGraph, Nodes, Node, Links, Link, Categories, and Category. Any additional markup beyond those basic elements is specific to the VSTS Architecture product. &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;So we had previously started with a graph that looked like this:&lt;/p&gt; &lt;p&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/DGMLContainersandVSTS2010ArchitectureRen_91F0/image_3.png" width="585" height="351"&gt; &lt;/p&gt; &lt;p&gt;In order to tell the VSTS 2010 Architecture product's DGML rendering engine to draw a container around the "From" node, you first start by adding another &lt;strong&gt;Link&lt;/strong&gt; element that has the &lt;strong&gt;Source&lt;/strong&gt; attribute named "My Container" ( value doesn't matter ), and the &lt;strong&gt;Target&lt;/strong&gt; attribute's value set to "From" ( this value does matter ). When you add that to your graph, you'll see this:&lt;/p&gt; &lt;p&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/DGMLContainersandVSTS2010ArchitectureRen_91F0/image_6.png" width="649" height="374"&gt; &lt;/p&gt; &lt;p&gt;Not exactly containing the "From" node at this point, but we're not done. We need to add two more things to the markup. &lt;/p&gt; &lt;p&gt;The first step is to add a &lt;strong&gt;Category&lt;/strong&gt; element to the &lt;strong&gt;Link &lt;/strong&gt;element we just added, with a value of "Contains". Markup should now look like this:&lt;/p&gt; &lt;p&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/DGMLContainersandVSTS2010ArchitectureRen_91F0/image_9.png" width="550" height="104"&gt; &lt;/p&gt; &lt;p&gt;The second step is to add a &lt;strong&gt;Nodes&lt;/strong&gt; element with a single &lt;strong&gt;Node &lt;/strong&gt;element contained inside, like so:&lt;/p&gt; &lt;p&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/DGMLContainersandVSTS2010ArchitectureRen_91F0/image_12.png" width="554" height="159"&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The resulting graph looks like this:&lt;/p&gt; &lt;p&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/DGMLContainersandVSTS2010ArchitectureRen_91F0/image_15.png" width="485" height="161"&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Let me point out a number of things, and bring them to your attention. In the image below, I've selected the contained "From" node:&lt;/p&gt; &lt;p&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/DGMLContainersandVSTS2010ArchitectureRen_91F0/image_20.png" width="612" height="502"&gt; &lt;/p&gt; &lt;ol&gt; &lt;li&gt;This is a number that indicates how many nodes are actually contained in the container.  &lt;li&gt;The &lt;strong&gt;Id &lt;/strong&gt;of the container. The &lt;strong&gt;Id&lt;/strong&gt; must match the &lt;strong&gt;Source&lt;/strong&gt; attribute value of the &lt;strong&gt;Link&lt;/strong&gt; element that has the "Contains" &lt;strong&gt;Category&lt;/strong&gt; attribute applied to it. You can further include a &lt;strong&gt;Label&lt;/strong&gt; attribute to the &lt;strong&gt;Node&lt;/strong&gt; element in order to use a different value for the container's title than the &lt;strong&gt;Id&lt;/strong&gt; value. VSTS 2010 Architecture defaults to the &lt;strong&gt;Id&lt;/strong&gt; value when the &lt;strong&gt;Label&lt;/strong&gt; attribute is not present.  &lt;li&gt;A chevron that can be clicked resulting in a collapsed or expanded container. The container in this example is clearly expanded, allowing you to see the contents of the container in the graph. The expanded state is captured in the dgml file via the value of the &lt;strong&gt;Group&lt;/strong&gt; attribute on the &lt;strong&gt;Node&lt;/strong&gt; element set to "Expanded". Setting that value to "Collapsed" collapses the container, hiding its contents. Here's a shot that shows the results of setting that value to "Collapsed" as well as using the &lt;strong&gt;Label&lt;/strong&gt; attribute on the &lt;strong&gt;Node&lt;/strong&gt; element:&lt;br&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/DGMLContainersandVSTS2010ArchitectureRen_91F0/image_22.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/DGMLContainersandVSTS2010ArchitectureRen_91F0/image_thumb_7.png" width="609" height="461"&gt;&lt;/a&gt;  &lt;li&gt;This is showing that I have selected the "From" node.  &lt;li&gt;Because I have selected the "From" node, the link between the "From" node and "To" node shows up. If you aren't selecting "From" or the "To" nodes, that link disappears.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;That's it! I should also add that you can have as many levels of containment as you'd like. Hope that helps!&lt;/p&gt; &lt;p&gt;Cameron&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9440853" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/camerons/archive/tags/tsbt-arch/default.aspx">tsbt-arch</category><category domain="http://blogs.msdn.com/camerons/archive/tags/Architecture+Edition/default.aspx">Architecture Edition</category><category domain="http://blogs.msdn.com/camerons/archive/tags/DGML/default.aspx">DGML</category></item><item><title>DSL Multiple Views example and other links</title><link>http://blogs.msdn.com/camerons/archive/2009/01/27/dsl-multiple-views-example-and-other-links.aspx</link><pubDate>Tue, 27 Jan 2009 21:29:54 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9378021</guid><dc:creator>camerons</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/camerons/comments/9378021.aspx</comments><wfw:commentRss>http://blogs.msdn.com/camerons/commentrss.aspx?PostID=9378021</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://www.peterprovost.org/default.aspx"&gt;Mr. Provost&lt;/a&gt; was recently interviewed by the &lt;a href="http://elegantcode.com/"&gt;ElegantCode&lt;/a&gt; folks. Find that podcast &lt;a href="http://elegantcode.com/2009/01/26/code-cast-19-peter-provost-on-agile-visual-studio-2010-and-architecture-tools/"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Wanted to make people aware of the excellent work two of our MVPs ( Pascal Recchia and Anthony Guerot ) have done recently with the DSL Toolkit. Checkout this &lt;a href="http://www.netfxfactory.org/blogs/papers/archive/2009/01/13/multiply-dsl-points-of-view.aspx"&gt;great article&lt;/a&gt; on how they have manipulated the DSL API in order to get multiple views over a single store. They have also provided access to a &lt;a href="http://www.netfxfactory.org/files/folders/high_resolution/entry227.aspx"&gt;video&lt;/a&gt; showing the functionality, as well as the &lt;a href="http://www.netfxfactory.org/files/folders/c/entry228.aspx"&gt;code&lt;/a&gt; they created.&lt;/p&gt;  &lt;p&gt;This is great stuff, and does show the power of the DSL framework that we have built the UML designers coming in VSTS 2010 on. &lt;/p&gt;  &lt;p&gt;With the 2010 product, we hope to make this type of functionality even easier, with even more extensibility options possible with new APIs we will be providing.&lt;/p&gt;  &lt;p&gt;Enjoy!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9378021" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/camerons/archive/tags/tsbt-arch/default.aspx">tsbt-arch</category><category domain="http://blogs.msdn.com/camerons/archive/tags/Architecture+Edition/default.aspx">Architecture Edition</category><category domain="http://blogs.msdn.com/camerons/archive/tags/DSL/default.aspx">DSL</category><category domain="http://blogs.msdn.com/camerons/archive/tags/Videos/default.aspx">Videos</category></item><item><title>Directed Graph Markup Language ( DGML )</title><link>http://blogs.msdn.com/camerons/archive/2009/01/26/directed-graph-markup-language-dgml.aspx</link><pubDate>Tue, 27 Jan 2009 00:03:57 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9376251</guid><dc:creator>camerons</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/camerons/comments/9376251.aspx</comments><wfw:commentRss>http://blogs.msdn.com/camerons/commentrss.aspx?PostID=9376251</wfw:commentRss><description>&lt;p&gt;In this &lt;a href="http://blogs.msdn.com/camerons/archive/2008/12/16/introduction-to-directed-graph-markup-language-dgml.aspx"&gt;previous post&lt;/a&gt; I introduced you to the new format, and then this &lt;a href="http://blogs.msdn.com/camerons/archive/2008/12/18/standard-graphs.aspx"&gt;follow on post&lt;/a&gt; showed some of the examples of how the format is used to back some common graphs you can expect in the product.&lt;/p&gt;  &lt;p&gt;In this post, I'm going to talk about a couple ways of controlling how links are rendered in the VSTS 2010 Architecture product.&lt;/p&gt;  &lt;h2&gt;&lt;u&gt;The Graph Element&lt;/u&gt;&lt;/h2&gt;  &lt;p&gt;At the root of every DGML document is the &lt;strong&gt;DirectedGraph&lt;/strong&gt; element. The default namespace for this document, attributed to this element, is &lt;a href="http://schemas.microsoft.com/vs/2009/dgml"&gt;http://schemas.microsoft.com/vs/2009/dgml&lt;/a&gt;. There are a number of xml attributes that is supported for this element that you will be able to quickly discover through the intellisense functionality off the file, but I want to call out the &lt;strong&gt;Background&lt;/strong&gt; attribute in particular.&lt;/p&gt;  &lt;p&gt;The &lt;strong&gt;Background&lt;/strong&gt; attribute allows you to set the color of the background of the graph surface itself, either by name of ARGB hex values as documented &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.colors.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;For example, this snippet of DGML:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="90" alt="image" src="http://www.cwskinner.members.winisp.net/BlogImages/DirectedGraphMarkupLanguageDGML_835B/image.png" width="682" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Results in this graph:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="229" alt="image" src="http://www.cwskinner.members.winisp.net/BlogImages/DirectedGraphMarkupLanguageDGML_835B/image_3.png" width="461" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Amazing, but good to know nonetheless. :)&lt;/p&gt;  &lt;h2&gt;&lt;u&gt;The Link Element&lt;/u&gt;&lt;/h2&gt;  &lt;p&gt;A DGML graph is fundamentally all about nodes and the links between those nodes. You'll notice in the markup above the &lt;strong&gt;Links&lt;/strong&gt; element containing one &lt;strong&gt;Link&lt;/strong&gt; element. You'll also notice that the rendering engine that reads this particular DGML is smart enough to understand that a link cannot exist without nodes to connect, so automatically creates a &amp;quot;From&amp;quot; node and a &amp;quot;To&amp;quot; node based on the values found in the &lt;strong&gt;Source&lt;/strong&gt; and &lt;strong&gt;Target&lt;/strong&gt; attributes on the &lt;strong&gt;Link &lt;/strong&gt;element.&lt;/p&gt;  &lt;p&gt;The &lt;strong&gt;Link&lt;/strong&gt; element has a number of interesting attributes that are directly supported. I'll call out a few here. &lt;/p&gt;  &lt;p&gt;In order to change the background color of a link arrowhead, set the &lt;strong&gt;Backround&lt;/strong&gt; attribute to &amp;quot;Red&amp;quot;. You'll get something like this:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="254" alt="image" src="http://www.cwskinner.members.winisp.net/BlogImages/DirectedGraphMarkupLanguageDGML_835B/image_4.png" width="638" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;In order to change the color of the entire link, set the &lt;strong&gt;Stroke&lt;/strong&gt; attribute to your desired color. If you only specify &lt;strong&gt;Stroke &lt;/strong&gt;and not &lt;strong&gt;Background&lt;/strong&gt;, the arrowhead fill color will also be changed to the &lt;strong&gt;Stroke &lt;/strong&gt;color value.&lt;/p&gt;  &lt;p&gt;You can also change the thickness of the link itself by assigning a value to the &lt;strong&gt;StrokeThickness&lt;/strong&gt; attribute, like so:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="225" alt="image" src="http://www.cwskinner.members.winisp.net/BlogImages/DirectedGraphMarkupLanguageDGML_835B/image_5.png" width="586" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;You can also make the link a dashed line by playing with values in the &lt;strong&gt;StrokeDashArray&lt;/strong&gt; attribute. The comma delimited values are converted to doubles, and are taken in relation to the &lt;strong&gt;StrokeThickness&lt;/strong&gt; value, which is &lt;strong&gt;1&lt;/strong&gt; by default. For example, setting &lt;strong&gt;StrokeDashArray&lt;/strong&gt; to &lt;strong&gt;5 &lt;/strong&gt;with a default thickness of 1 results in something like this:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="233" alt="image" src="http://www.cwskinner.members.winisp.net/BlogImages/DirectedGraphMarkupLanguageDGML_835B/image_6.png" width="591" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;You can make the dashed line much more involved by adding more values to the dash array, as specified &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.shapes.shape.strokedasharray.aspx"&gt;here&lt;/a&gt;. Here's an example:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="221" alt="image" src="http://www.cwskinner.members.winisp.net/BlogImages/DirectedGraphMarkupLanguageDGML_835B/image_7.png" width="610" border="0" /&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/h2&gt;  &lt;p&gt;Just a quick taste on how to control link rendering. We'll start to build up more knowledge as we go. In a future post, I want to show the &lt;strong&gt;Node&lt;/strong&gt; element, and specifically get into how grouping / nesting is supported. Stay tuned!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9376251" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/camerons/archive/tags/tsbt-arch/default.aspx">tsbt-arch</category><category domain="http://blogs.msdn.com/camerons/archive/tags/Architecture+Edition/default.aspx">Architecture Edition</category><category domain="http://blogs.msdn.com/camerons/archive/tags/DGML/default.aspx">DGML</category></item><item><title>Visualize Java Code</title><link>http://blogs.msdn.com/camerons/archive/2009/01/20/visualize-java-code.aspx</link><pubDate>Tue, 20 Jan 2009 08:09:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9342893</guid><dc:creator>camerons</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/camerons/comments/9342893.aspx</comments><wfw:commentRss>http://blogs.msdn.com/camerons/commentrss.aspx?PostID=9342893</wfw:commentRss><description>&lt;p&gt;In this &lt;a href="http://blogs.msdn.com/camerons/archive/2008/12/16/introduction-to-directed-graph-markup-language-dgml.aspx"&gt;last post&lt;/a&gt; I introduced you to some *very* basic understanding of how DGML works. Now I want to take that knowledge out for a test drive. :)&lt;/p&gt; &lt;p&gt;What I've decided to do is a couple of things. I've decided I'm going to show how to visualize Java code using &lt;a href="http://www.antlr.org"&gt;Antlr&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/vstudio/default.aspx"&gt;Visual Studio 2008&lt;/a&gt; and output a DGML file that the VSTS 2010 Architecture product found in the &lt;a href="http://blogs.msdn.com/briankel/archive/2008/10/27/helpful-links-for-the-visual-studio-2010-ctp.aspx"&gt;latest CTP&lt;/a&gt; can render.&lt;/p&gt; &lt;p&gt;Why am I doing this? Because I think it will be an excellent example ( you'll be the judge of that ) of how easy it will be to visualize all kinds of data, not just .NET languages. Java code, Work Items, MSBuild dependencies, on and on. Literally, this list is potentially enormous, gated only by imagination and effort ( aren't all good things this way? ).&lt;/p&gt; &lt;p&gt;In some future posts, I'll show how you can continue to tweak the DGML to do some things that you can't do in the current CTP, but can with current bits ( such as node grouping, advanced selection, etc. ).&lt;/p&gt; &lt;h3&gt;&lt;/h3&gt; &lt;h4&gt;&lt;u&gt;Prerequisites&lt;/u&gt;&lt;/h4&gt; &lt;p&gt;If you want to follow along on this little journey, you need to get the following things:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Visual Studio 2008  &lt;li&gt;Latest JDK from Sun. Lots of options here but I ultimately went &lt;a href="https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewProductDetail-Start?ProductRef=jdk-6u11-oth-JPR@CDS-CDS_Developer"&gt;here&lt;/a&gt; and followed the steps.  &lt;li&gt;Antlr 3.1.1 ( see below for instructions )  &lt;li&gt;&lt;a href="http://blogs.msdn.com/briankel/archive/2008/10/27/helpful-links-for-the-visual-studio-2010-ctp.aspx"&gt;VSTS 2010 CTP&lt;/a&gt; ( follow link for instructions )  &lt;li&gt;&lt;a href="http://cwskinner.members.winisp.net/SampleCode/Java2DGML.zip"&gt;The Visual Studio 2008 solution&lt;/a&gt; that I used to create this post &lt;/li&gt;&lt;/ol&gt; &lt;h4&gt;&lt;u&gt;Establish "Base of Operations"&lt;/u&gt;&lt;/h4&gt; &lt;p&gt;I'm going to be very descriptive of what I'm doing 'cause the complication is not going to be in the implementation, but more in the "configuration of the parts".&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Create a directory where work will be done. This will be our "Base of Operations". From here on out, I'll refer to this directory as &lt;strong&gt;%BOO%&lt;/strong&gt;.  &lt;li&gt;&lt;a href="http://www.antlr.org/download/antlr-3.1.1.tar.gz"&gt;Download Antlr 3.1.1&lt;/a&gt;  &lt;ol&gt; &lt;li&gt;If this link becomes stale, go to &lt;a href="http://www.antlr.org"&gt;http://www.antlr.org&lt;/a&gt; and download the latest source distribution which includes the runtime jars that you'll need. &lt;/li&gt;&lt;/ol&gt; &lt;li&gt;Extract the contents of the download to the %BOO% directory. When done, you should have the following contents in the &lt;strong&gt;%BOO%\antlr-3.1.1 &lt;/strong&gt;directory: &lt;br&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/VisualizeJavaCode_9C70/image_4.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="186" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/VisualizeJavaCode_9C70/image_thumb_1.png" width="517" border="0"&gt;&lt;/a&gt;  &lt;li&gt;Ensure Java is installed correctly  &lt;ol&gt; &lt;li&gt;Open up a command prompt, CD to your %BOO% directory.  &lt;li&gt;Type the following: &lt;strong&gt;java -?&lt;/strong&gt;  &lt;li&gt;If you don't see a typical "Usage" statement, then you probably have something installed wrong. For me, I had to make sure that the java bin directory was in my path, so I added that to my system environment variables. &lt;/li&gt;&lt;/ol&gt; &lt;li&gt;Create a BOO.bat file that contains the following contents, and save to &lt;strong&gt;%BOO%&lt;/strong&gt;: &lt;br&gt;&lt;br&gt;&lt;font face="Courier New" size="2"&gt;set &lt;font color="#0000ff"&gt;BOO&lt;/font&gt;=&lt;font color="#ff0000"&gt;%CD% &lt;br&gt;&lt;/font&gt;set &lt;font color="#0000ff"&gt;ANTLR_LIB&lt;/font&gt;=%BOO%\antlr-3.1.1\lib &lt;br&gt;set &lt;font color="#0000ff"&gt;classpath&lt;/font&gt;=.;%ANTLR_LIB%\antlr-3.1.1.jar;%ANTLR_LIB%\antlr-3.1.1-runtime.jar;%ANTLR_LIB%\stringtemplate-3.2.jar;%ANTLR_LIB%\antlr-2.7.7.jar &lt;br&gt;&lt;/font&gt; &lt;li&gt;Ensure Antlr is now ready to go.  &lt;ol&gt; &lt;li&gt;At the command prompt, type &lt;strong&gt;BOO.bat&lt;/strong&gt; and hit enter  &lt;li&gt;Now type &lt;strong&gt;java org.antlr.Tool&lt;/strong&gt; and hit enter  &lt;li&gt;You should see this: &lt;br&gt;&lt;br&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/VisualizeJavaCode_9C70/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="269" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/VisualizeJavaCode_9C70/image_thumb_2.png" width="640" border="0"&gt;&lt;/a&gt; &lt;br&gt;If you don't, double check your BOO.bat file and make sure you don't have any typos. &lt;/li&gt;&lt;/ol&gt; &lt;li&gt;Feel free to download the original Java.g file also available on the Antlr site. I've included the one I have modified in the solution I've made available in the "Prerequisites section":  &lt;ol&gt; &lt;li&gt;Click &lt;a href="http://www.antlr.org/grammar/1152141644268/Java.g"&gt;here&lt;/a&gt;.  &lt;li&gt;If it looks like a page just full of text, right click and say view source, then "Save As..." &lt;strong&gt;java.g&lt;/strong&gt; into your %BOO% directory. &lt;/li&gt;&lt;/ol&gt; &lt;li&gt;Unzip the &lt;a href="http://cwskinner.members.winisp.net/SampleCode/Java2DGML.zip"&gt;solution&lt;/a&gt; I created into your &lt;strong&gt;%BOO%&lt;/strong&gt; directory.  &lt;li&gt;You'll need to replace the references to antlr.runtime, Antlr3.Runtime, Antlr3.Utility, and StringTemplate to those now in your &lt;strong&gt;%BOO% &lt;/strong&gt;directory:  &lt;ol&gt; &lt;li&gt;Add Antlr C# runtime references to the project.  &lt;ol&gt; &lt;li&gt;First we have to extract the runtime files found in the &lt;strong&gt;%BOO%\antlr-3.1.1\runtime\CSharp\dist\DOT-NET-runtime-3.1.1.zip&lt;/strong&gt;.  &lt;ol&gt; &lt;li&gt;Extract the contents of that zip to &lt;strong&gt;%BOO%\antlr-3.1.1\runtime\CSharp\Libraries&lt;/strong&gt;  &lt;li&gt;Once extracted, you should have a &lt;strong&gt;bin&lt;/strong&gt; directory. &lt;/li&gt;&lt;/ol&gt; &lt;li&gt;Right click on the &lt;strong&gt;References&lt;/strong&gt; node in the project  &lt;li&gt;Click on the &lt;strong&gt;Browse&lt;/strong&gt; tab.  &lt;li&gt;Navigate to &lt;strong&gt;%BOO%\antlr-3.1.1\runtime\CSharp\Libraries\bin\net-2.0&lt;/strong&gt;  &lt;li&gt;Add all the dlls found in that directory as references. There should be four dlls in there, as mentioned above ( If you do everything I've just mentioned just right, this step shouldn't be necessary, as the solution I provided should be relative )&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ol&gt; &lt;li&gt;OK, we're ready to build.  &lt;ol&gt; &lt;li&gt;Rebuild the solution. &lt;/li&gt;&lt;/ol&gt; &lt;li&gt;If all went well, you now have a parser that's ready to parse Java 1.5 code! &lt;/li&gt;&lt;/ol&gt; &lt;h4&gt;&lt;u&gt;Results&lt;/u&gt;&lt;/h4&gt; &lt;p&gt;The executable created after building the solution is &lt;strong&gt;Java2DGML.exe.&lt;/strong&gt; If you drop to the command line, CD into the debug directory where the exe is found, run the following command: &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Java2DGML.exe &lt;font color="#0080ff"&gt;/f&lt;/font&gt; %BOO%\antlr-3.1.1\src\org\antlr\Tool.java &lt;font color="#ff0000"&gt;&amp;gt; Tool.dgml&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;then open Tool.dgml in the VSTS 2010 CTP, here's what you'll see&lt;strong&gt;:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/VisualizeJavaCode_9C70/image_18.png" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="480" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/VisualizeJavaCode_9C70/image_thumb_7.png" width="165" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Here's the &lt;a href="http://cwskinner.members.winisp.net/SampleCode/Tool.xps"&gt;XPS file of that image&lt;/a&gt; as well.&lt;/p&gt; &lt;p&gt;The exe is by no means a robust piece of software. It currently understands how to gather information for simple Java classes ( i.e., not templated ), fields, and methods. No interfaces, enums, etc., but after this post, you should have all the info you need to take this example a bit farther.&lt;/p&gt; &lt;p&gt;Now let me explain the source a little bit...&lt;/p&gt; &lt;h4&gt;&lt;u&gt;Taxonomy of the Solution&lt;/u&gt;&lt;/h4&gt; &lt;p&gt;Here is a shot of the Solution Explorer with the &lt;strong&gt;Java2DGML&lt;/strong&gt; solution loaded:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/VisualizeJavaCode_9C70/image_26.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="332" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/VisualizeJavaCode_9C70/image_thumb_11.png" width="310" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;h3&gt;&lt;u&gt;Generated Files&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;Java.Tokens, JavaLexer.cs, and JavaParser.cs are all generated files. You can regenerate those files by executing the following command in you command window where you executed &lt;strong&gt;BOO.bat, &lt;/strong&gt;in the &lt;strong&gt;%BOO%\Java2DGML\Java2DGML &lt;/strong&gt;directory&lt;strong&gt;:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;java org.antlr.Tool Java.g&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;u&gt;Java.g&lt;/u&gt;&lt;/p&gt; &lt;p&gt;The &lt;strong&gt;Java.g&lt;/strong&gt; file is where the grammar for parsing Java 1.5 is defined. This grammar file instructs the &lt;strong&gt;org.antlr.Tool&lt;/strong&gt; object how to generate a parser in C# capable of parsing Java 1.5 code. More on this later.&lt;/p&gt; &lt;p&gt;&lt;u&gt;DGMLContext.cs&lt;/u&gt;&lt;/p&gt; &lt;p&gt;A simple utility class used to gather information during the parse that is later used to generate the appropriate DGML. For every Java class, one DGMLContext object will be created to capture the relevant details.&lt;/p&gt; &lt;p&gt;&lt;u&gt;DGMLFile.st&lt;/u&gt;&lt;/p&gt; &lt;p&gt;Antlr has a great mechanism built in called the StringTemplate framework. Check out this &lt;a href="http://www.stringtemplate.org"&gt;link&lt;/a&gt; for more details. This file is an example of a StringTemplate for DGML files. More on this later.&lt;/p&gt; &lt;p&gt;&lt;u&gt;JavaParserImpl.cs&lt;/u&gt;&lt;/p&gt; &lt;p&gt;Antlr allows the C# developer to tell Antlr to create a partial class for its parser implementation so that additional behavior can be added and used in the grammar file more easily. I've taken advantage of that in this file.&lt;/p&gt; &lt;p&gt;&lt;u&gt;Program.cs&lt;/u&gt;&lt;/p&gt; &lt;p&gt;This is the main program, where all the pieces come together. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;strong&gt;&lt;font color="#000000"&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;font color="#000000"&gt;This post is really meant to whet your appetite on some of the possibilities coming in the 2010 version of the Architecture product around visualization. Admittedly, I'm clearly just scratching the surface of this particular example ( Java source visualization ), but that's ok. From time to time, I may come back to this example and flesh out a little more in order to exemplify some deeper features.&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;font color="#000000"&gt;In the meantime, I think in my next post I'll start to show some more of the features inherent in DGML, beyond just the simple nodes and links I've shown to date. &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;font color="#000000"&gt;Stay Tuned!&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9342893" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/camerons/archive/tags/tsbt-arch/default.aspx">tsbt-arch</category><category domain="http://blogs.msdn.com/camerons/archive/tags/Architecture+Edition/default.aspx">Architecture Edition</category><category domain="http://blogs.msdn.com/camerons/archive/tags/DGML/default.aspx">DGML</category></item><item><title>"Standard Graphs"</title><link>http://blogs.msdn.com/camerons/archive/2008/12/18/standard-graphs.aspx</link><pubDate>Thu, 18 Dec 2008 03:04:47 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9232721</guid><dc:creator>camerons</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/camerons/comments/9232721.aspx</comments><wfw:commentRss>http://blogs.msdn.com/camerons/commentrss.aspx?PostID=9232721</wfw:commentRss><description>&lt;p&gt;It became clear from the emails and comments to my &lt;a href="http://blogs.msdn.com/camerons/archive/2008/12/16/introduction-to-directed-graph-markup-language-dgml.aspx"&gt;last post&lt;/a&gt; that I should probably spend a little more time describing the functionality found in the &lt;a href="http://blogs.msdn.com/briankel/archive/2008/10/27/helpful-links-for-the-visual-studio-2010-ctp.aspx"&gt;VSTS 2010 CTP&lt;/a&gt; a bit better, specifically that functionality involving the Architecture Explorer and the graphs generated via the AE. ( I just figured everyone had already run out, downloaded that 7.5gig image, and started playing! :) )&lt;/p&gt;  &lt;p&gt;This post introduces the three &amp;quot;Standard Graphs&amp;quot; found off the Architecture Explorer using the &lt;strong&gt;DinnerNow - ServicePortfolio2&lt;/strong&gt; solution found in that aforementioned CTP. The idea behind these graphs are to give you the ability to get some &amp;quot;typical&amp;quot; views of your source base with as few mouse clicks as possible.&lt;/p&gt;  &lt;h3&gt;&lt;u&gt;Standard Graphs&lt;/u&gt;&lt;/h3&gt;  &lt;p&gt;Here's a shot of the Archicture Explorer, as seen with the DinnerNow solution open in VS 2010:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="316" alt="image" src="http://www.cwskinner.members.winisp.net/BlogImages/StandardGraphsArchitectureExplorerandDGM_CF84/image.png" width="501" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;You'll notice the &lt;strong&gt;Visualize Code Relationships&lt;/strong&gt; menu item, which is where you'll find the three menu items that will create graphs by Assembly, Namespace, or Class dependencies based on the contents of the current solution.&lt;/p&gt;  &lt;h3&gt;&lt;u&gt;Visualize Call Dependency - By Assembly&lt;/u&gt;&lt;/h3&gt;  &lt;p&gt;If you select the &lt;strong&gt;Visualize Call Dependency - By Assembly&lt;/strong&gt; menu item, here's what you'll get:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cwskinner.members.winisp.net/BlogImages/StandardGraphsArchitectureExplorerandDGM_CF84/image_3.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="324" alt="image" src="http://www.cwskinner.members.winisp.net/BlogImages/StandardGraphsArchitectureExplorerandDGM_CF84/image_thumb.png" width="640" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This graph is all about showing you the dependencies between the various assemblies that make up all the projects in your solution. If you don't have the solution built, you'll notice that after selecting this menu item ( this will happen for any &amp;quot;standard&amp;quot; graph actually ) the solution is built. This is due to the fact that we are cracking the assemblies in the output directories and gathering the information found there.&lt;/p&gt;  &lt;p&gt;The nodes you see above represent each of the assemblies discovered in this solution. You'll also notice links of various thickness between these nodes. The thicker the link, the more dependencies between the two assemblies. We sometimes refer to these types of links as &amp;quot;blood vessels&amp;quot;.&lt;/p&gt;  &lt;p&gt;Notice the chevrons in the upper right hand corner of the nodes in this graph:&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="125" alt="image" src="http://www.cwskinner.members.winisp.net/BlogImages/StandardGraphsArchitectureExplorerandDGM_CF84/image_4.png" width="252" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;This is an &amp;quot;expand / collapse&amp;quot; button for this &amp;quot;group&amp;quot; node. You'll also notice in the upper left corner of each node, a number indicating the number of internal nodes inside the group. Here's what the &lt;strong&gt;DinnerNow.Services&lt;/strong&gt; assembly node looks like when expanded ( click for larger view ):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cwskinner.members.winisp.net/BlogImages/StandardGraphsArchitectureExplorerandDGM_CF84/image_5.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="98" alt="image" src="http://www.cwskinner.members.winisp.net/BlogImages/StandardGraphsArchitectureExplorerandDGM_CF84/image_thumb_3.png" width="640" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The green and blue nodes represent Classes and Interfaces. You'll notice in the shot above the tooltip displayed as I hover over the &lt;strong&gt;CustomerService&lt;/strong&gt; node, the category reads &amp;quot;Class&amp;quot;. If I double-click on that node, it takes me to the source code where that class is defined.&lt;/p&gt;  &lt;h3&gt;&lt;u&gt;Visualize Call Dependency - By Namespace&lt;/u&gt;&lt;/h3&gt;  &lt;p&gt;Selecting the &lt;strong&gt;Visualize Call Dependency - By Namespace&lt;/strong&gt; results in a similar type graph, except this time the initial nodes you see below represent the namespaces found in the solution:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cwskinner.members.winisp.net/BlogImages/StandardGraphsArchitectureExplorerandDGM_CF84/image_6.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="191" alt="image" src="http://www.cwskinner.members.winisp.net/BlogImages/StandardGraphsArchitectureExplorerandDGM_CF84/image_thumb_4.png" width="640" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Clicking on the chevron of the &lt;strong&gt;DinnerNow.Services&lt;/strong&gt; node shows the exact same information as it did when viewing from the Assembly diagram ( show below in-situ ):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cwskinner.members.winisp.net/BlogImages/StandardGraphsArchitectureExplorerandDGM_CF84/image_7.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="113" alt="image" src="http://www.cwskinner.members.winisp.net/BlogImages/StandardGraphsArchitectureExplorerandDGM_CF84/image_thumb_5.png" width="640" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h3&gt;&lt;u&gt;Visualize Call Dependency - By Class&lt;/u&gt;&lt;/h3&gt;  &lt;p&gt;Selecting the &lt;strong&gt;Visualize Call Dependency - By Class&lt;/strong&gt; results in the most complicated of graphs, mostly because what you are seeing is dependencies at the class level, with no grouping by assembly or namespace. Expanding a chevron in this graph reveals methods, properties, fields, indexers, etc. that are contained by that class or interface. Below is a shot of just a section, as the graph is pretty large:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cwskinner.members.winisp.net/BlogImages/StandardGraphsArchitectureExplorerandDGM_CF84/image_8.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="480" alt="image" src="http://www.cwskinner.members.winisp.net/BlogImages/StandardGraphsArchitectureExplorerandDGM_CF84/image_thumb_6.png" width="542" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;One thing to point out if you haven't already discovered this, is that if you hover your mouse over a particular link, you can quickly jump to either end of the link. Quite helpful on large graphs like the Class dependency graph!&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="149" alt="image" src="http://www.cwskinner.members.winisp.net/BlogImages/StandardGraphsArchitectureExplorerandDGM_CF84/image_9.png" width="352" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;One other thing worth mentioning. The dependencies discovered on these graphs are dependencies discovered through static analysis of method call data, not structural dependencies. For example, if you have two classes that don't call each other but one includes the other as a type for a member, no dependency link will be created. &lt;/p&gt;  &lt;p&gt;What other &amp;quot;Standard Graphs&amp;quot; should we include out of the box? What are some typical views over your solution that you would like one to two clicks away?&lt;/p&gt;  &lt;p&gt;Thanks!&lt;/p&gt;  &lt;p&gt;Cameron&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9232721" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/camerons/archive/tags/tsbt-arch/default.aspx">tsbt-arch</category><category domain="http://blogs.msdn.com/camerons/archive/tags/Architecture+Edition/default.aspx">Architecture Edition</category><category domain="http://blogs.msdn.com/camerons/archive/tags/VSTS+2010+Fall+CTP/default.aspx">VSTS 2010 Fall CTP</category><category domain="http://blogs.msdn.com/camerons/archive/tags/Architecture+Explorer/default.aspx">Architecture Explorer</category><category domain="http://blogs.msdn.com/camerons/archive/tags/Standard+Graphs/default.aspx">Standard Graphs</category></item><item><title>Introduction to Directed Graph Markup Language ( DGML )</title><link>http://blogs.msdn.com/camerons/archive/2008/12/16/introduction-to-directed-graph-markup-language-dgml.aspx</link><pubDate>Tue, 16 Dec 2008 23:59:53 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9228382</guid><dc:creator>camerons</dc:creator><slash:comments>14</slash:comments><comments>http://blogs.msdn.com/camerons/comments/9228382.aspx</comments><wfw:commentRss>http://blogs.msdn.com/camerons/commentrss.aspx?PostID=9228382</wfw:commentRss><description>&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;font color="#000000"&gt;DGML, or &amp;quot;Directed Graph Markup Language&amp;quot; is what we are using in VSTS 2010 Architecture to render graphs like the one below:          &lt;br /&gt;&lt;a href="http://www.cwskinner.members.winisp.net/BlogImages/IntroductiontoDirectedGraphMarkupLanguag_B68E/image_thumb31.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="324" alt="image_thumb3[1]" src="http://www.cwskinner.members.winisp.net/BlogImages/IntroductiontoDirectedGraphMarkupLanguag_B68E/image_thumb31_thumb.png" width="640" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;font color="#000000"&gt;The power of DGML is in its simplicity. Let me show you what I mean.&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;font color="#000000"&gt;If you launch the &lt;a href="http://blogs.msdn.com/briankel/archive/2008/10/27/helpful-links-for-the-visual-studio-2010-ctp.aspx"&gt;VSTS 2010 CTP&lt;/a&gt;, open a project, click &lt;strong&gt;View-&amp;gt;Architecture Explorer&lt;/strong&gt;, then click the button shown below...           &lt;br /&gt;&amp;#160;&lt;a href="http://www.cwskinner.members.winisp.net/BlogImages/IntroductiontoDirectedGraphMarkupLanguag_B68E/image_thumb8.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="209" alt="image_thumb8" src="http://www.cwskinner.members.winisp.net/BlogImages/IntroductiontoDirectedGraphMarkupLanguag_B68E/image_thumb8_thumb.png" width="609" border="0" /&gt;&lt;/a&gt; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;font color="#000000"&gt;...you'll get a new dgml editor in the document well. You can then right click inside that document and select &amp;quot;View Code&amp;quot;. Right click on the tab of the resulting editor and select &amp;quot;New Horizontal Tab Group&amp;quot;. You'll have something similar to this:&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cwskinner.members.winisp.net/BlogImages/IntroductiontoDirectedGraphMarkupLanguag_B68E/image_thumb14.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="468" alt="image_thumb14" src="http://www.cwskinner.members.winisp.net/BlogImages/IntroductiontoDirectedGraphMarkupLanguag_B68E/image_thumb14_thumb.png" width="640" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;font color="#333333"&gt;If you add a &lt;strong&gt;Link&lt;/strong&gt; element as a child element to the &lt;strong&gt;Links&lt;/strong&gt; node, with a &lt;strong&gt;Source &lt;/strong&gt;and &lt;strong&gt;Target&lt;/strong&gt; attribute, you'll get something similar to this:&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;a href="http://www.cwskinner.members.winisp.net/BlogImages/IntroductiontoDirectedGraphMarkupLanguag_B68E/image_thumb17.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="467" alt="image_thumb17" src="http://www.cwskinner.members.winisp.net/BlogImages/IntroductiontoDirectedGraphMarkupLanguag_B68E/image_thumb17_thumb.png" width="640" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;font color="#000000"&gt;To add a few more elements, try this:&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.cwskinner.members.winisp.net/BlogImages/IntroductiontoDirectedGraphMarkupLanguag_B68E/image_thumb20.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="469" alt="image_thumb20" src="http://www.cwskinner.members.winisp.net/BlogImages/IntroductiontoDirectedGraphMarkupLanguag_B68E/image_thumb20_thumb.png" width="640" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You'll notice the &lt;strong&gt;Nodes&lt;/strong&gt; element isn't even needed to render the graph above. That is really all you need to know to visualize all kinds of data. Rest assured there is a lot more goodness to discuss about this technology, but the simplicity of it is one of the most exciting aspects as far as I'm concerned!&lt;/p&gt;  &lt;p&gt;In my next post, I'm actually going to show you how, armed with just this little nugget of DGML information, you can visualize some Java code. Stay tuned!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9228382" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/camerons/archive/tags/tsbt-arch/default.aspx">tsbt-arch</category><category domain="http://blogs.msdn.com/camerons/archive/tags/Architecture+Edition/default.aspx">Architecture Edition</category><category domain="http://blogs.msdn.com/camerons/archive/tags/VSTS+2010+Fall+CTP/default.aspx">VSTS 2010 Fall CTP</category><category domain="http://blogs.msdn.com/camerons/archive/tags/DGML/default.aspx">DGML</category><category domain="http://blogs.msdn.com/camerons/archive/tags/Architecture+Explorer/default.aspx">Architecture Explorer</category></item><item><title>Layer Validation with the VSTS 2010 CTP</title><link>http://blogs.msdn.com/camerons/archive/2008/12/09/layer-validation-with-the-vsts-2010-ctp.aspx</link><pubDate>Tue, 09 Dec 2008 08:26:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9186397</guid><dc:creator>camerons</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/camerons/comments/9186397.aspx</comments><wfw:commentRss>http://blogs.msdn.com/camerons/commentrss.aspx?PostID=9186397</wfw:commentRss><description>&lt;p&gt;In my first post of this series, I broke down the VSTS 2010 Architecture product into "functional" areas, and I've been slowly describing the pieces. The areas highlighted ( Modeling Project &lt;a href="http://blogs.msdn.com/camerons/archive/2008/11/17/vsts-2010-architecture-part-one-model-project.aspx"&gt;here&lt;/a&gt; and &lt;a href="http://blogs.msdn.com/camerons/archive/2008/11/24/vsts-2010-architecture-part-two-model-project-and-4-1-project-template.aspx"&gt;here&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/camerons/archive/2008/12/01/the-uml-model-explorer.aspx"&gt;Model Explorer&lt;/a&gt;, and &lt;a href="http://blogs.msdn.com/camerons/archive/2008/11/25/model-and-work-item-integration.aspx"&gt;Work Item Integration&lt;/a&gt; ) I've already discussed at some length. Today, I want to drill into the Layer Diagram a bit more. Specifically, I want to walk you through the steps of creating a simple Layer diagram, map your code onto it, and validate that code against the constraints authored in the diagram via a manual validation gesture. ( In a future post I'll show you how to automate validation in your build process. ) &lt;/p&gt; &lt;p&gt;For this post, I'll be using the &lt;a href="http://blogs.msdn.com/briankel/archive/2008/10/27/helpful-links-for-the-visual-studio-2010-ctp.aspx"&gt;VSTS 2010 CTP&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_4.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="480" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_thumb_1.png" width="501" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;u&gt;&lt;/u&gt;&lt;/p&gt; &lt;p&gt;In this example, I'm going to be using some very simplistic code, as it is not the details of the code that I'm trying to emphasize, but more the concept the code represents. Let's get started...&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Start you VSTS 2010 CTP image&lt;/li&gt; &lt;li&gt;Launch VS 2010&lt;/li&gt; &lt;li&gt;Create a C# console app called "Client", and name the solution "Layer Validation". You're "New Project" dialog should look similar to this:&lt;br&gt;&lt;br&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_6.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="457" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_thumb_2.png" width="644" border="0"&gt;&lt;/a&gt; &lt;br&gt;&lt;/li&gt; &lt;li&gt;Now right click on the solution node, select "New Project...", select "Class Library" and name the Project "Implementation":&lt;br&gt;&lt;br&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_8.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="412" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_thumb_3.png" width="644" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;br&gt;&lt;/li&gt; &lt;li&gt;Do the exact same thing you just did in step 4, except name the project "Interfaces".&lt;/li&gt; &lt;li&gt;Again, do the exact same thing except name the project "Creators". You should have a solution explorer that looks similar to this:&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_12.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="241" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_thumb_5.png" width="292" border="0"&gt;&lt;/a&gt; &lt;br&gt;&lt;/li&gt; &lt;li&gt;Now expand the "Interfaces" project node. Right click on the "Class1.cs" file, select "Rename", rename the class to &lt;strong&gt;IDataRetriever.cs&lt;/strong&gt;, and click the "Yes" button when prompted. You should now see something like this in your document well and Solution Explorer:&lt;br&gt;&lt;br&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_14.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="297" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_thumb_6.png" width="640" border="0"&gt;&lt;/a&gt; &lt;/li&gt; &lt;li&gt;Change &lt;strong&gt;IDataRetriever&lt;/strong&gt; into an interface by replacing the "class" keyword with "interface".&lt;/li&gt; &lt;li&gt;Now add a getter property that returns an object that implements the "IData" interface. You'll notice that VS is indicating to you that IData doesn't exist yet by putting the red squiggles underneath "IData":&lt;br&gt;&lt;br&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_16.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="71" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_thumb_7.png" width="251" border="0"&gt;&lt;/a&gt; &lt;br&gt;Let's resolve this error by taking advantage of a new feature in VS 2010.&lt;/li&gt; &lt;li&gt;Right click on the offending "IData", select "Generate", and select "Other...":&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_20.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="235" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_thumb_9.png" width="404" border="0"&gt;&lt;/a&gt; &lt;br&gt;&lt;/li&gt; &lt;li&gt;You'll now be presented with the "New Type" dialog. Change the "Type Kind:" drop-down to "interface" and the "Access:" drop-down to "public". Leave the rest as defaults:&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_33.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="234" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_thumb_14.png" width="244" border="0"&gt;&lt;/a&gt; &lt;br&gt;&lt;br&gt;VS will automatically create a new interface called "IData" in a new file called "IData.cs" placed in the Interfaces project. Nice, that's exactly what we wanted! Now let's go implement the IDataRetriever interface over in the "Implementation" project.&lt;br&gt;&lt;/li&gt; &lt;li&gt;Expand the "Implementation" project node.&lt;/li&gt; &lt;li&gt;Right click on the "References" node, select "Add Reference...", click the "Projects" tab, and select "Interfaces":&lt;br&gt;&lt;br&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="412" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_25.png" width="485" border="0"&gt;&amp;nbsp;&lt;br&gt;&lt;/li&gt; &lt;li&gt;Collapse the "References" node.&lt;/li&gt; &lt;li&gt;Right click on the "Class1.cs" file, select "Rename", change the file name to "&lt;strong&gt;DataRetriever.cs"&lt;/strong&gt;, and select "Yes" in the dialog that pops up. &lt;/li&gt; &lt;li&gt;Double-click on the "DataRetriever.cs" file, and make the new class implement the "IDataRetriever" interface. You'll notice that as you attempt to type "IDataRetriever", you get no intellisense support. That's ok, finish typing in "IDataRetriever", and again notice the red squigglies below the term.&lt;/li&gt; &lt;li&gt;Hover over "IDataRetriever" and notice a small rectangle under the start of the word. Click on that and select "using interfaces;". This will automatically insert the using statement that is required.&lt;br&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="189" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_28.png" width="476" border="0"&gt; &lt;br&gt;&lt;/li&gt; &lt;li&gt;Now that the "using Interfaces;" line has been automatically added, select the "smart tag" again, but this time select "Implement interface 'IDataRetriever'":&lt;br&gt;&lt;br&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="165" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_31.png" width="525" border="0"&gt;&amp;nbsp;&lt;br&gt;&lt;br&gt;Your final "DataRetriever" file should look like this:&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="365" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_38.png" width="576" border="0"&gt; &lt;br&gt;&lt;/li&gt; &lt;li&gt;Now add a reference to the "Implementation" project as well as the "Interfaces" project, following the similar steps in step 13 above.&lt;/li&gt; &lt;li&gt;Expand the "Client" project node and double click on "Program.cs".&lt;/li&gt; &lt;li&gt;Type "DataRetriever", select the smart-tag and select "using Implementation;". That will automatically generate the using statement needed to use the DataRetriever type. Finish like so, adding the "using Interfaces;" statement as well:&lt;br&gt;&lt;br&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="384" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_41.png" width="506" border="0"&gt; &lt;/li&gt; &lt;li&gt;Rebuild the solution. If all went according to plan, no errors.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;So what does this program do at this point? Well, actually nothing except instantiate a type, call a property on that type, throw a "NotImplementedException", then exit. Not that interesting, but also not the point. This is just setting the stage for a very common problem found in systems of all types.&lt;/p&gt; &lt;p&gt;This code is pretty typical of code that is early in its evolutionary path. We've got a client program accessing the specific implementation of an interface directly. This is fine for now, as all the program needs is the data that "DataRetriever" was designed to retrieve ( imagine DataRetriever pulling from a SQL database for instance ). But what about tomorrow when a requirement hits your desk, demanding data to be pulled from a different data source without changing the behavior of the rest of the application?&lt;/p&gt; &lt;p&gt;What we need is to *not* make any assumptions on *how* an interface is implemented, and depend *only* on the contract of the interface(s) itself. Again, a fairly common design pattern, but one that is pretty easy to violate in today's world, as it takes but one line of code to break this pattern and create dependencies that were not intended. This is what various &lt;a href="http://en.wikipedia.org/wiki/Inversion_of_control"&gt;IoC&lt;/a&gt; containers are out to help mitigate.&lt;/p&gt; &lt;p&gt;So how do we enforce this design in our code, protecting the intent of that design, and ensure our code is resilient to this type of breakage? Enter the Layer Diagram and Layer Validation.&lt;/p&gt; &lt;p&gt;Let's create a Layer Diagram where we will visually describe the constraints on our architecture that we want to maintain.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Create the Layer Diagram&lt;/u&gt;&lt;/h3&gt; &lt;ol&gt; &lt;li&gt;Right click on the solution node and select Add-&amp;gt;New Solution Folder. Name the folder "Diagrams"&lt;/li&gt; &lt;li&gt;Right click on the "Diagrams" solution folder and select Add-&amp;gt;New Item..., select the "Layer Diagram" template, and name the diagram "FirstLayerDiagram.layer":&lt;br&gt;&lt;br&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_43.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="388" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_thumb_18.png" width="644" border="0"&gt;&lt;/a&gt; &lt;br&gt;&lt;/li&gt; &lt;li&gt;Since these are CTP bits, there are still a few things not quite right. One of these things is the fact that you'll see two Layer Diagram Explorers appear next to your Solution Explorer. Close the one that looks like this:&lt;br&gt;&lt;br&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="161" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_46.png" width="256" border="0"&gt; &lt;br&gt;&lt;/li&gt; &lt;li&gt;Now let's draw the layer diagram, make your diagram look like this one:&lt;br&gt;&lt;br&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="471" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_49.png" width="319" border="0"&gt; &lt;br&gt;Please make sure that the links are going in the direction you see above, or things aren't going to work right in later steps!&lt;br&gt;&lt;br&gt;What we're saying through this diagram is that we have a "Client Logic" layer that is dependent on the "Interfaces" layer, and an "Implementation" layer also dependent on the "Interfaces" layer. What we are also saying is that the "Client Logic" layer is *not* dependent on the "Implementation" layer, nor should it be. The lack of a directed link in this last case is very important.&lt;br&gt;&lt;br&gt;But now we need to map our source code onto this layer diagram, so that the system can verify that your code is complying or *not* complying with the constraints this seemingly simple diagram is describing.&lt;br&gt;&lt;br&gt;Let's do that now.&lt;br&gt;&lt;/li&gt;&lt;/ol&gt; &lt;h3&gt;&lt;u&gt;Map Source Onto the Layers&lt;/u&gt;&lt;/h3&gt; &lt;ol&gt; &lt;li&gt;In the Solution Explorer, click and drag the "Client" project out onto the layer diagram and release your mouse on the "Client Logic" layer shape:&lt;br&gt;&lt;br&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_51.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="227" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_thumb_21.png" width="541" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;br&gt;&lt;/li&gt; &lt;li&gt;Drag the "Interfaces" project from the Solution Explorer out onto the layer diagram and let go over the top of the "Interfaces" layer shape:&lt;br&gt;&lt;br&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="224" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_54.png" width="537" border="0"&gt; &lt;br&gt;&lt;/li&gt; &lt;li&gt;And finally, drag the "Implementation" project from the Solution Explorer out onto the "Implementation" layer shape:&lt;br&gt;&lt;br&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="187" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_57.png" width="497" border="0"&gt; &lt;br&gt;&lt;/li&gt; &lt;li&gt;Your layer diagram should now look something like this. Notice the little icons in the upper right hand corner of the shapes. This indicates that source ( or some type of artifact(s) ) has been associated to the layer:&lt;br&gt;&lt;br&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="465" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_60.png" width="335" border="0"&gt; &lt;br&gt;&lt;br&gt;If you select the "Client Logic" shape, then click on the "Layer Explorer", that shows you the types of items associated with the layer. In this case, the "Client" csharp project:&lt;br&gt;&lt;br&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="195" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_63.png" width="733" border="0"&gt;&lt;br&gt;&lt;br&gt; Now we're ready to "Validate" our code against the diagram.&lt;br&gt;&lt;/li&gt; &lt;li&gt;Right click anywhere in the layer diagram and select "Validate":&lt;br&gt;&lt;br&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="444" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_66.png" width="310" border="0"&gt; &lt;br&gt;&lt;br&gt;Notice an error is displayed in the Error Window:&lt;br&gt;&lt;br&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_68.png" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="172" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_thumb_27.png" width="644" border="0"&gt;&lt;/a&gt; &lt;br&gt;&lt;br&gt;This is expected at this point, 'cause the code in Program.cs found in the "Client" project is directly manipulating types from the "Implementation" project. We just finished creating a layer diagram that declares this type of dependency invalid!&lt;br&gt;&lt;br&gt;So let's fix the problem in code so that this layer validation error goes away.&lt;br&gt;&lt;/li&gt;&lt;/ol&gt; &lt;h3&gt;&lt;u&gt;Fix Code&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;Back in Program.cs, we need to make sure that we are only using types out of the "Interfaces" project, or more importantly, *not* use types out of the "Implementation" project. That's all well and good, but we need a way to get an instance of an object that implements IDataRetriever without taking a direct dependency on that type. &lt;br&gt;&lt;br&gt;Enter the Factory pattern.&lt;br&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;In the Solution Explorer, expand the "Creators" project, right click on "Class1.cs", select "Rename...", and rename the file to "TypeCreator.cs".&lt;/li&gt; &lt;li&gt;Add the "Implementation" project and "Interfaces" as a references to the "Creators" project ( i.e., "Creators" now depends on the "Implementation" and "Interfaces" projects ).&lt;/li&gt; &lt;li&gt;Double click on the "TypeCreator.cs" file in Solution Explorer, which will make that file fill the document well.&lt;/li&gt; &lt;li&gt;Add a static method that creates a "DataRetriever" object but returns an IDataRetriever interface. TypeCreator.cs should look similar to this:&lt;br&gt;&lt;br&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="356" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_74.png" width="543" border="0"&gt; &lt;br&gt;&lt;/li&gt; &lt;li&gt;In the "Client" project, remove the "Implementation" project reference, and add a reference to the "Creators" project.&lt;/li&gt; &lt;li&gt;Change Program.cs to take advantage of the new method we just created. Program.cs should look something like this:&lt;br&gt;&lt;br&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="393" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_73.png" width="612" border="0"&gt; &lt;br&gt;&lt;/li&gt; &lt;li&gt;Rebuild the solution. No errors.&lt;br&gt;&lt;br&gt;Now we need to bring up the Architecture Explorer and click the refresh button to work around a current limitation in the CTP bits.&lt;br&gt;&lt;/li&gt; &lt;li&gt;From the main menu bar, select "View-&amp;gt;Architecture Explorer".&lt;/li&gt; &lt;li&gt;Select the "Refresh Content" button on that explorer:&lt;br&gt;&lt;br&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="206" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/LayerValidationwiththeVSTS2010CTP_ED27/image_77.png" width="363" border="0"&gt; &lt;/li&gt; &lt;li&gt;Now bring the FirstLayerDiagram back into view, right click on "Validate", and take a look at the error tool window. No errors! WooHoo! :)&lt;/li&gt;&lt;/ol&gt; &lt;h3&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;I've shown you, through an admittedly trivial example, how to validate your solution through a simple Layer diagram. I've shown you how to map source onto the layers and how to tell the system what dependencies are valid and which are not via a manual gesture and that diagram.&lt;/p&gt; &lt;p&gt;There is much more to show on this diagram and how you can interact with it. A very important next step is to show you how to make the Validation action an automatic step in your build process. I'll do that in a future post. &lt;/p&gt; &lt;p&gt;Stay tuned! :)&lt;/p&gt; &lt;p&gt;Cameron&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9186397" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/camerons/archive/tags/tsbt-arch/default.aspx">tsbt-arch</category><category domain="http://blogs.msdn.com/camerons/archive/tags/Architecture+Edition/default.aspx">Architecture Edition</category><category domain="http://blogs.msdn.com/camerons/archive/tags/Layer+Diagram/default.aspx">Layer Diagram</category><category domain="http://blogs.msdn.com/camerons/archive/tags/VSTS+2010+Fall+CTP/default.aspx">VSTS 2010 Fall CTP</category></item><item><title>The UML Model Explorer</title><link>http://blogs.msdn.com/camerons/archive/2008/12/01/the-uml-model-explorer.aspx</link><pubDate>Mon, 01 Dec 2008 12:23:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9159987</guid><dc:creator>camerons</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/camerons/comments/9159987.aspx</comments><wfw:commentRss>http://blogs.msdn.com/camerons/commentrss.aspx?PostID=9159987</wfw:commentRss><description>&lt;p&gt;In the VSTS 2010 Architecture product, we've added another toolwindow to VS designed to help you understand and manipulate the UML models that you will be building. The UML Model Explorer ( that's what we're currently calling it, but that can certainly change :) ) is a WPF component that represents the UML Package hierarchy of your models. "Models" in this context refer to the contents of the Modeling projects you have created and added to the current solution. The root node or nodes of the UML Model Explorer are UML packages representing those Modeling Projects.&lt;/p&gt; &lt;p&gt;For example, in the image below, I have created two Modeling Projects, "My First Modeling Project" and "My Second Modeling Project". You'll notice that the UML Model Explorer has two corresponding nodes in the tree.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_58.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="365" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_26.png" width="347" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;You might immediately be asking yourself "What's up here? Why show this same information in two tree controls?" The reason will become more clear as I continue on, but it is worth pointing out right now that the UML Model Explorer is a "logical" view over you models. The Solution Explorer is showing you the "physical" view of how those models are contained and persisted. Keep that in mind as you read on.&lt;/p&gt; &lt;p&gt;As I mentioned earlier, every time you create a Modeling Project, a new node will be displayed in the UML Model Explorer. That node is actually a UML package named after the Modeling Project, and serves as the root package for all modeling elements that will be serialized into the Modeling Project. Creating a Modeling Project is the only way to create a root node in the UML Model Explorer.&lt;/p&gt; &lt;p&gt;In the VSTS 2010 CTP, any and every element created under one of these roots is stored in the ModelDefinition.uml file found the Modeling project. In the current bits, we actually create a .uml file for every UML package created. When you intially create a Modeling Project, the UML Package that represents that project is persisted on disk in the ModelDefinition.uml file you see in the project. Every model element created in that package, except new Packages, will be stored in that same file. if you create a new Package, an additional .uml file will be created to store the data behind that package, and all its contents.&lt;/p&gt; &lt;p&gt;Let me drive this all home with some examples, and at the same time show some of the additional capabilities of the UML Model Explorer.&lt;/p&gt; &lt;h3&gt;&lt;u&gt;Adding Elements&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;I want to add a class to the "My Second Modeling Project" model. I can do that by right-clicking on that node in the UML Model Explorer, and select Add-&amp;gt;Class.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_6.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="250" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_2.png" width="343" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Each time I do that, a new class will appear underneath the "My Second Modeling Project" node.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_10.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="113" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_4.png" width="262" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;To name the class, I hover over the current name, double-click, which allows me to rename the element. ( By the time we RTM, upon adding the new class, the tool will automatically put you in rename mode, as 99% of the time, that's what you will most likely be doing after adding an element in this manner. )&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_12.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="119" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_5.png" width="265" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Below is an image of the explorer after adding a few elements. Notice, in small light-grey text is a label that indicates what type of element the node represents.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_14.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="174" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_6.png" width="381" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The types of elements that can be added depend on the node you right click on. So far, I've been right-clicking on the Package node that represents the root of my model. If I right click on the class or interface element, I can add UML Attributes or Operations as well.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_16.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="171" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_7.png" width="374" border="0"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Here's what the explorer looks like after adding a couple Operations and Attributes:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_18.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="250" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_8.png" width="268" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Adding elements directly to the UML Model Explorer is great, but that is not the only way to add elements of course. As you drop new elements on diagrams, you will see those elements represented as you would expect.&lt;/p&gt; &lt;p&gt;For example, I'm going to create a new Logical Class Diagram in the "My First Modeling Project" project by right clicking on that project node in the Solution Explorer, selecting Add-&amp;gt;New Item..., which brings up the "Add New item dialog", where I select "Logical Class Diagram", give it a name, and hit "OK".&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_20.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="255" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_9.png" width="395" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I now have a blank class diagram in the document well, and my project has a new file inserted into it:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_22.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="219" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_10.png" width="281" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Now I drop two classes on that diagram and create a UML Association between them. Like so:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_24.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="473" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_11.png" width="356" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Now over in the UML Model Explorer, you'll see the two new classes underneath the "My First Modeling Project" node. You'll also notice the Association relationship also being represented:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_26.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="207" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_12.png" width="330" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;But how did the tool know to create those new elements underneath the "My First Modeling Project" when dropping them on the diagram we just created? &lt;/p&gt; &lt;p&gt;By default, whenever creating any type of UML diagram in a Modeling Project, that diagram's "Linked Package" property is set to the UML package associated with the project itself. That property is used when dropping new elements to figure out what UML package the new elements should be directly contained by. So in this example, that property is set to "My First Modeling Project", as seen below:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_28.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="179" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_13.png" width="402" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Let's drive this home with a more complicated example, and point out a couple more features of the system while we're at it.&lt;/p&gt; &lt;p&gt;First, I'm going to create three new UML Packages underneath the "My First Modeling Project" node, the results shown below:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_30.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="230" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_14.png" width="320" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Now remember when I mentioned that creating a new package would result in a new .uml file being added to the Modeling Project? Take a look at the Solution Explorer, and the "My First Modeling Project" node. You'll notice three new .uml files added to that project, one for each new package I added ( again, the first uml file was already there ):&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_34.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="280" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_16.png" width="405" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Now I'm going to create three new class diagrams and associate them with the newly created packages. I do that by right clicking on the "My First Modeling Project" project node in the Solution Explorer, select "Add-&amp;gt;New item...", select "Logical Class Diagram", and hit "OK" three times. Here's what my Solution Explorer looks like when done ( red square pointing out the new diagram files added to the project ):&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_36.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="352" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_17.png" width="348" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I associate "LogicalClassdiagram1" to the "One" package my setting that diagram's "Linked Package" property appropriately:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_38.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="377" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_18.png" width="348" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I do the same thing for the rest of the diagrams, pointing "LogicalClassdiagram2" to the "Two" package, and "LogicalClassdiagram3" to the "Three" package.&lt;/p&gt; &lt;p&gt;Now I drop a new class onto each of the new diagrams. The UML Model Explorer looks like this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_40.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="258" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_19.png" width="251" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;h3&gt;&lt;u&gt;Paste By Reference and Element Delete&lt;/u&gt;&lt;/h3&gt; &lt;p&gt;One of the great things that the UML Model Explorer makes very easy is the ability to represent the same model element on numerous diagrams, simply by dragging the element from the explorer onto the diagram. Let me show you what I mean.&lt;/p&gt; &lt;p&gt;I am going to drag "Class1" onto the three class diagrams I just finished creating. Here's the result:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_42.png" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="468" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_20.png" width="644" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Class1 is now represented on all three diagrams. &lt;/p&gt; &lt;table cellspacing="0" cellpadding="5" width="641" bgcolor="rgb(174,225,238)" border="1"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="639"&gt; &lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;You'll notice in the image above that Class1 is represented on the diagrams with an elided name. Hovering over the element will show the fully qualified name. You can also widen the element to see the full name:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_56.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="106" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_25.png" width="323" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The reason for this is due to the fact that the diagram this shape is being displayed does not represent the same package that the model element is in. In this case, the LogicalClassDiagram3 represents the "Three" package, not the "My First Modeling Project" package which Class1 is directly owned by.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;There is still only one "Class1" element in the UML Model Explorer. If I add an operation to Class1 via the UML Model Explorer, that operation will immediately be displayed in the Class1 on each diagram. This is because the shapes on each of those diagrams is essentially a view into the model data that is Class1. Changing the Class1 model data, which is exactly what changing that data in the Model Explorer does, results in the views of that data also changing. &lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_32.png" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="467" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb.png" width="644" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;And of course, adding a new Attribute to any of the Class1 shapes ( also called "Presentation Elements" ) results in the Class1 model data being updated, which updates all the other shapes, and so on.&lt;/p&gt; &lt;p&gt;Dragging from the UML Model Explorer is the most straight forward way of creating "references" back to the model data, but so is copying a shape and selecting "Paste By Reference" in the context menu. &lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_48.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="247" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_21.png" width="173" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Now deleting one of the shapes results in the shape being deleted, *not* the model element itself. So if I delete Class1 from LogicalClassDiagram1, nothing happens except that shape is removed from that diagram. Class1 is still present in the UML Model Explorer.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_46.png" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="466" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_15.png" width="644" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;If I right click on Class1 and select "Delete", the model data is destroyed, along with all the shapes representing that element:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_50.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="156" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_22.png" width="240" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_52.png" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="467" alt="image" src="http://blogs.msdn.com/blogfiles/camerons/WindowsLiveWriter/TheUMLModelExplorer_10DE2/image_thumb_23.png" width="644" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;h3&gt;&lt;strong&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/strong&gt;&lt;/h3&gt; &lt;p&gt;I hope that gives you a good taste of what the UML Model Explorer is all about. They key takeaway that I'm hoping you'll walk away with is that the UML Model Explorer is the logical view of the model&amp;nbsp; repository contained by the Modeling Project. It represents data that can be displayed across numerous diagrams. That data can be manipulated directly via the explorer or through manipulation of presentation elements.&lt;/p&gt; &lt;p&gt;By the time we RTM, we hope to have a number of other facilities plugged into the UML Model Explorer, such as:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Ability to represent Diagrams directly in the explorer  &lt;li&gt;Double click elements in the explorer will navigate to the diagram that element is represented on. If represented on many diagrams, you will be presented with a dialog allowing you to select which diagram to navigate to.  &lt;li&gt;Support for moving elements between packages inside the explorer  &lt;li&gt;Filtering of the explorer&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;As usual, would love to hear your feedback!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9159987" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/camerons/archive/tags/tsbt-arch/default.aspx">tsbt-arch</category><category domain="http://blogs.msdn.com/camerons/archive/tags/Architecture+Edition/default.aspx">Architecture Edition</category><category domain="http://blogs.msdn.com/camerons/archive/tags/UML/default.aspx">UML</category></item></channel></rss>