<?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>Waldemir Cambiucci - Solutions Architect - Microsoft Brasil : GAT / GAX</title><link>http://blogs.msdn.com/wcamb/archive/tags/GAT+_2F00_+GAX/default.aspx</link><description>Tags: GAT / GAX</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Algumas palavrinhas sobre Domain-Specific Language (DSL)</title><link>http://blogs.msdn.com/wcamb/archive/2009/08/17/algumas-palavrinhas-sobre-domain-specific-language-dsl.aspx</link><pubDate>Mon, 17 Aug 2009 16:56:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9872318</guid><dc:creator>wcamb</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9872318.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9872318</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9872318</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Semana passada voltei a falar com algumas empresas sobre DSLs e Fábricas de Software. Como muitos já sabem, o tema está bastante relacionado com a construção de frameworks de desenvolvimento, patterns, guias de automação e ainda com a abstração de um domínio para o desenvolvimento de software.&lt;/P&gt;
&lt;P&gt;Uma &lt;STRONG&gt;DSL – Domain Specific Language&lt;/STRONG&gt; – ou linguagem específica de domínio (alguns até preferecem linguagem de domínio específico), é uma ferramenta de geração de software e modelagem, que permite ao usuário a criação de soluções iniciais a partir de artefatos componentes da DSL. Uma DSL pode envolver linguagens de modelagem, templates, referências a frameworks de desenvolvimento, atividades, exemplos de código, etc. &lt;/P&gt;
&lt;P&gt;Em resumo, uma DSL oferece ferramentas para a modelagem de soluções, com grande variabilidade de resultados. Um exemplo já clássico de DSL gráfica é o editor de modelos de dados do &lt;STRONG&gt;Entity Framework&lt;/STRONG&gt;, sobre o Visual Studio 2008, veja:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DomainSpecificLanguageDSLoretorno_10B55/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DomainSpecificLanguageDSLoretorno_10B55/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://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DomainSpecificLanguageDSLoretorno_10B55/image_thumb_2.png" width=506 height=295 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DomainSpecificLanguageDSLoretorno_10B55/image_thumb_2.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Na figura acima você vê do lado esquerdo, os shapes disponíveis na DSL, como &lt;STRONG&gt;Entity&lt;/STRONG&gt;, &lt;STRONG&gt;Association&lt;/STRONG&gt; e &lt;STRONG&gt;Inheritance&lt;/STRONG&gt;, que podem ser adicionados ao modelo desenhado a partir das tabelas do banco (no lado direito da figura). A DSL oferece assim, uma grande flexibilidade para a criação de novos modelos EDMX, em nosso exemplo.&lt;/P&gt;
&lt;P&gt;Mas nem só de DSLs gráficas vive o mercado. Veja a figura abaixo:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DomainSpecificLanguageDSLoretorno_10B55/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DomainSpecificLanguageDSLoretorno_10B55/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://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DomainSpecificLanguageDSLoretorno_10B55/image_thumb_1.png" width=544 height=267 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DomainSpecificLanguageDSLoretorno_10B55/image_thumb_1.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Podemos classificar as DSLs em domínios horizontais e verticais, de acordo com o foco de cenário que deve atender. Também, sua especialização pode ser mais genérica (de propósito geral) ou mais específica (atendendo um cenário determinado). Ainda, uma DSL pode ser gráfica, textual, baseada em formulários ou um modelo híbrido.&lt;/P&gt;
&lt;P&gt;Quando precisamos de uma DSL? Existem cenários de desenvolvimento que envolvem: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;grande complexidade nas operações e métodos; &lt;/LI&gt;
&lt;LI&gt;mudanças frequentes em requisitos e organização do software; &lt;/LI&gt;
&lt;LI&gt;busca por maior agilidade entre a definição e a execução do projeto de software; &lt;/LI&gt;
&lt;LI&gt;muitos pontos de manutenção do projeto, etc. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Em cenários como esses, a aplicação de uma DSL torna-se interessante. Segundo &lt;A href="http://msdn.microsoft.com/en-us/oslo/dd727707.aspx" rel=nofollow target=_blank mce_href="http://msdn.microsoft.com/en-us/oslo/dd727707.aspx"&gt;Martin Fowler&lt;/A&gt;, ainda podemos classificar uma DSL como interna (ou Embedded) e externa. &lt;/P&gt;
&lt;P&gt;Uma &lt;STRONG&gt;DSL interna&lt;/STRONG&gt; pode ser entendida como uma maneira de se projetar uma API ou uma interface no domínio da aplicação, usando uma linguagem mais natural para o desenvolvedor, com palavras dentro de um contexto ou domínio específico. Uma DSL interna aproveita os recursos de uma linguagem host maior, por exemplo, um parser de aplicação feito em C# (veja que não precisamos criar um compilador, regras rígidas de gramática ou descrições para C#, elas já existem).&lt;/P&gt;
&lt;P&gt;Já uma &lt;STRONG&gt;DSL externa&lt;/STRONG&gt; é mais ampla e exige um esforço de implementação maior, pois aplica restrições e considerações de gramáticas e linguagens de programação, como as linguagem &lt;STRONG&gt;Tipo-2&lt;/STRONG&gt; ou &lt;STRONG&gt;Livres de Contexto&lt;/STRONG&gt; (pensando na &lt;A href="http://pt.wikipedia.org/wiki/Hierarquia_de_Chomsky" rel=nofollow target=_blank mce_href="http://pt.wikipedia.org/wiki/Hierarquia_de_Chomsky"&gt;Hierarquia de Chomsky&lt;/A&gt;, lembra dela?). ;) São exemplos de DSLs externas o T-SQL, transformadores XSLT, a linguagem SQL, etc. Sendo linguagens mais completas, oferecem um poder de modelagem para seus usuários muito maior.&lt;/P&gt;
&lt;P&gt;Finalmente, podemos esperar para breve novidades no mundo das DSLs sobre a plataforma Microsoft. A plataforma &lt;A href="http://blogs.msdn.com/wcamb/archive/tags/OSLO/default.aspx" target=_blank mce_href="http://blogs.msdn.com/wcamb/archive/tags/OSLO/default.aspx"&gt;OSLO&lt;/A&gt; promete um grande uso dessas ferramentas, para a criação e manipulação de modelos no chamado &lt;STRONG&gt;MDD – Model Driven Design&lt;/STRONG&gt;. Mas esse é um assunto para outro post :)&lt;/P&gt;
&lt;P&gt;DSL é um assunto bem interessante e tem muita coisa publicada na web. Se você ficou interessante em conhecer mais sobre DSL’s, alguns links que eu recomendo são esses:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;DSLs: The Good, the Bad, and the Ugly&lt;/STRONG&gt; &lt;BR&gt;&lt;A href="http://www.infoq.com/presentations/Truth-about-DSL" rel=nofollow target=_blank mce_href="http://www.infoq.com/presentations/Truth-about-DSL"&gt;http://www.infoq.com/presentations/Truth-about-DSL&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Como separar semântica e implementação da DSL&lt;/STRONG&gt; &lt;BR&gt;&lt;A href="http://www.microsoft.com/brasil/msdn/arquitetura/Journal/SeparatingDSLSemanticsfromImplementation.mspx" rel=nofollow target=_blank mce_href="http://www.microsoft.com/brasil/msdn/arquitetura/Journal/SeparatingDSLSemanticsfromImplementation.mspx"&gt;http://www.microsoft.com/brasil/msdn/arquitetura/Journal/SeparatingDSLSemanticsfromImplementation.mspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Introducing Domain Specific Languages - Martin Fowler &lt;BR&gt;&lt;/STRONG&gt;&lt;A href="http://msdn.microsoft.com/en-us/oslo/dd727707.aspx" rel=nofollow target=_blank mce_href="http://msdn.microsoft.com/en-us/oslo/dd727707.aspx"&gt;http://msdn.microsoft.com/en-us/oslo/dd727707.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Generating Code for DSLs&lt;/STRONG&gt; &lt;BR&gt;&lt;A href="http://martinfowler.com/articles/codeGenDsl.html" rel=nofollow target=_blank mce_href="http://martinfowler.com/articles/codeGenDsl.html"&gt;http://martinfowler.com/articles/codeGenDsl.html&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;FurtaSpace - www.afurtado.net &lt;/STRONG&gt;(Blog do André Furtado, que tem diversos posts sobre DSLs) &lt;BR&gt;&lt;A href="http://afurtado1980.spaces.live.com/default.aspx" mce_href="http://afurtado1980.spaces.live.com/default.aspx"&gt;http://afurtado1980.spaces.live.com/default.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Frameworks de Desenvolvimento&lt;/STRONG&gt; &lt;BR&gt;&lt;A href="http://blogs.msdn.com/wcamb/archive/tags/Frameworks/default.aspx" mce_href="http://blogs.msdn.com/wcamb/archive/tags/Frameworks/default.aspx"&gt;http://blogs.msdn.com/wcamb/archive/tags/Frameworks/default.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;GAT/GAX&lt;/STRONG&gt; &lt;BR&gt;&lt;A href="http://blogs.msdn.com/wcamb/archive/tags/GAT+_2F00_+GAX/default.aspx" mce_href="http://blogs.msdn.com/wcamb/archive/tags/GAT+_2F00_+GAX/default.aspx"&gt;http://blogs.msdn.com/wcamb/archive/tags/GAT+_2F00_+GAX/default.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Uma última pergunta: você tem usado DSLs em seu dia-a-dia como arquiteto? Quais DSLs têm sido mais importantes? Consegue reconhecê-las? &lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9872318" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/Frameworks/default.aspx">Frameworks</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/GAT+_2F00_+GAX/default.aspx">GAT / GAX</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/OSLO/default.aspx">OSLO</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/DSL/default.aspx">DSL</category></item><item><title>Sculpture 1.0 Final : uma ferramenta de automação sobre o GAT/GAX.</title><link>http://blogs.msdn.com/wcamb/archive/2009/03/04/sculpture-1-0-final-uma-ferramenta-de-automa-o-sobre-o-gat-gax.aspx</link><pubDate>Thu, 05 Mar 2009 03:13:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9459101</guid><dc:creator>wcamb</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9459101.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9459101</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9459101</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo? &lt;/P&gt;
&lt;P&gt;Gostaria de recomendar hoje um projeto muito interessante do Codeplex, o Sculpture.&lt;/P&gt;
&lt;P&gt;O &lt;STRONG&gt;Sculpture 1.0 Final&lt;/STRONG&gt; foi publicado nesta terça-feira, dia 03/março. Confira: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Sculpture1.0Finalrecmpublicado_BE44/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Sculpture1.0Finalrecmpublicado_BE44/image_2.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=188 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Sculpture1.0Finalrecmpublicado_BE44/image_thumb.png" width=519 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Sculpture1.0Finalrecmpublicado_BE44/image_thumb.png"&gt;&lt;/A&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Sculpture - Model Your Life&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://sculpture.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=23952" target=_blank mce_href="http://sculpture.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=23952"&gt;http://sculpture.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=23952&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;O &lt;STRONG&gt;Sculpture&lt;/STRONG&gt; é uma ferramenta baseada no &lt;STRONG&gt;Guidance Automation Toolkit&lt;/STRONG&gt; e seus recursos (GAT/GAX). Já vimos bastante sobre essa dupla aqui no blog. Sendo assim, o &lt;STRONG&gt;Sculpture&lt;/STRONG&gt; fornece um ambiente baseado em Wizards, conduzindo o desenvolvedor durante a criação de aplicações completas, a partir do modelo de banco de dados desejado. &lt;/P&gt;
&lt;P&gt;Isso mesmo! Você aponta o modelo de dados que será usado, escolhe o tipo de aplicação que deseja e modela sua aplicação através de um conjunto de shapes, operando uma verdadeira DSL (domain specific language).&lt;/P&gt;
&lt;P&gt;Que tipo de interface de aplicação você pode gerar? Veja o menu abaixo:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Sculpture1.0Finalrecmpublicado_BE44/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Sculpture1.0Finalrecmpublicado_BE44/image_8.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=187 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Sculpture1.0Finalrecmpublicado_BE44/image_thumb_3.png" width=377 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Sculpture1.0Finalrecmpublicado_BE44/image_thumb_3.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;E que tipo de serviço podemos usar em nossa aplicação? Também temos um menu para isso:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Sculpture1.0Finalrecmpublicado_BE44/image_10.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Sculpture1.0Finalrecmpublicado_BE44/image_10.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=108 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Sculpture1.0Finalrecmpublicado_BE44/image_thumb_4.png" width=346 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Sculpture1.0Finalrecmpublicado_BE44/image_thumb_4.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;E que tipo de acesso a dados podemos escolher? Veja abaixo:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Sculpture1.0Finalrecmpublicado_BE44/image_12.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Sculpture1.0Finalrecmpublicado_BE44/image_12.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=148 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Sculpture1.0Finalrecmpublicado_BE44/image_thumb_5.png" width=340 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Sculpture1.0Finalrecmpublicado_BE44/image_thumb_5.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Gostou?&amp;nbsp;Vimos que é compatível com o &lt;STRONG&gt;Prism&lt;/STRONG&gt;, mas ainda não terminei meus testes. Recomendo instalar o Prism v2.0 primeiro, antes do Sculpture 1.0. Aguardem mais dicas!&lt;/P&gt;
&lt;P&gt;Para começar, recomendo a preparação de seu ambiente. Antes da instalação do Sculpture, você deve fazer a instalação dos pré-reqs sobre o Visual Studio 2008: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Visual Studio 2008 Service Pack 1 &lt;BR&gt;&lt;/STRONG&gt;Ref. :&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=FBEE1648-7106-44A7-9649-6D9F6D58056E&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=FBEE1648-7106-44A7-9649-6D9F6D58056E&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=FBEE1648-7106-44A7-9649-6D9F6D58056E&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Guidance Automation Extensions - February 2008 Release (GAX)&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A title=http://www.microsoft.com/downloads/details.aspx?familyid=DF79C099-4753-4A59-91E3-5020D9714E4E&amp;amp;displaylang=en href="http://www.microsoft.com/downloads/details.aspx?familyid=DF79C099-4753-4A59-91E3-5020D9714E4E&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=DF79C099-4753-4A59-91E3-5020D9714E4E&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=DF79C099-4753-4A59-91E3-5020D9714E4E&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Guidance Automation Extensions for Visual Studio 2008 and Visual Studio 2008 Service Pack 1 Update (GAXP1409)&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=E28205C6-BB07-401B-9A76-804784598BF0&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=E28205C6-BB07-401B-9A76-804784598BF0&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=E28205C6-BB07-401B-9A76-804784598BF0&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Guidance Automation Toolkit for Visual Studio 2008 - Feb 2008 Release (GAT)&lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=B91066B3-D1D6-4990-A45F-34CF8DBDC60C&amp;amp;displaylang=en" target=_blank mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=B91066B3-D1D6-4990-A45F-34CF8DBDC60C&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=B91066B3-D1D6-4990-A45F-34CF8DBDC60C&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;A partir dessa preparação, instale o pacote Sculpture. Ele deve criar uma nova pasta de templates de projetos no Visual Studio a partir do &lt;STRONG&gt;Guidance Packages&lt;/STRONG&gt;, lembra dele? :)&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Sculpture1.0Finalrecmpublicado_BE44/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Sculpture1.0Finalrecmpublicado_BE44/image_6.png"&gt;&lt;IMG title=image style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; DISPLAY: inline; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=387 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Sculpture1.0Finalrecmpublicado_BE44/image_thumb_2.png" width=451 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/Sculpture1.0Finalrecmpublicado_BE44/image_thumb_2.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Depois disso, é só experimentar as várias entradas do Wizard que é disparado para sua solução. Nos próximos posts vamos falar mais do pacote. &lt;/P&gt;
&lt;P&gt;Tanto o Prism 2.0 como o Sculpture 1.0 podem ser entendidos como aceleradores para a construção de interfaces e aplicações. Enquanto o Prism&amp;nbsp;oferece uma biblioteca (a &lt;EM&gt;CAL – Composite Application Library&lt;/EM&gt;) para a construção de aplicações de composição, o Sculpture oferece um guia de automação, integrando uma fábrica de software com uma DSL para a construção de interfaces diversas, assim como o modelo de negócio e serviços.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Entender suas diferenças, arquiteturas e principais recursos será importante no momento da decisão pelo uso em nossos projetos. Por isso, experimente os dois pacotes (em ambiente controlado), sem moderação!!! &lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :) &lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9459101" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/Arquitetura+de+Solu_26002300_231_3B0026002300_245_3B00_es/default.aspx">Arquitetura de Solu&amp;#231;&amp;#245;es</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/GAT+_2F00_+GAX/default.aspx">GAT / GAX</category></item><item><title>Web Service Software Factory : Modeling Edition - Nova versão já disponível.</title><link>http://blogs.msdn.com/wcamb/archive/2008/03/04/web-service-software-factory-modeling-edition-nova-vers-o-j-dispon-vel.aspx</link><pubDate>Wed, 05 Mar 2008 03:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8039268</guid><dc:creator>wcamb</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/8039268.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=8039268</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=8039268</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Ainda sobre Fábricas de Software e Guias de Automação, vale acompanhar o que está chegando por ai. O link a seguir tem um &lt;STRONG&gt;roadmap&lt;/STRONG&gt; com os próximos lançamentos na plataforma Microsoft, veja aqui:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;patterns &amp;amp; practices: Upcoming Release Roadmap &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://msdn2.microsoft.com/en-us/practices/bb232643.aspx" mce_href="http://msdn2.microsoft.com/en-us/practices/bb232643.aspx"&gt;http://msdn2.microsoft.com/en-us/practices/bb232643.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Um especial destaque para a &lt;EM&gt;WPF Composite Client&lt;/EM&gt;, que tem um apelo enorme para o tratamento de aplicações compostas e camadas de composição em interfaces WPF, muito interessante:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;WPF Composite Client &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://blogs.msdn.com/gblock/archive/2007/10/26/wpf-composite-client-guidance-it-s-coming.aspx" mce_href="http://blogs.msdn.com/gblock/archive/2007/10/26/wpf-composite-client-guidance-it-s-coming.aspx"&gt;http://blogs.msdn.com/gblock/archive/2007/10/26/wpf-composite-client-guidance-it-s-coming.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Ainda, no link do patterns &amp;amp; practices DVD de Abril de 2007, você tem acesso a 2 posters em PDF muito bacanas:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;patterns &amp;amp; practices April 2007 DVD &lt;BR&gt;&lt;/STRONG&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6724e09b-ca2e-425a-8d71-8febad3ba203&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6724e09b-ca2e-425a-8d71-8febad3ba203&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=6724e09b-ca2e-425a-8d71-8febad3ba203&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Este primeiro poster, com a descrição dos tipos de guias disponíveis...&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WebServiceSoftwareFactoryModelingEditio_12D5D/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WebServiceSoftwareFactoryModelingEditio_12D5D/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=257 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WebServiceSoftwareFactoryModelingEditio_12D5D/image_thumb_1.png" width=429 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WebServiceSoftwareFactoryModelingEditio_12D5D/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Ref..: &lt;A title=http://download.microsoft.com/download/1/4/d/14d1a93d-3cce-4445-bd89-fa4f3aacab37/poster-1.pdf href="http://download.microsoft.com/download/1/4/d/14d1a93d-3cce-4445-bd89-fa4f3aacab37/poster-1.pdf" mce_href="http://download.microsoft.com/download/1/4/d/14d1a93d-3cce-4445-bd89-fa4f3aacab37/poster-1.pdf"&gt;http://download.microsoft.com/download/1/4/d/14d1a93d-3cce-4445-bd89-fa4f3aacab37/poster-1.pdf&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;E ainda um poster com um resumo de todas as fábricas de software disponíveis até 2007. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WebServiceSoftwareFactoryModelingEditio_12D5D/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WebServiceSoftwareFactoryModelingEditio_12D5D/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=320 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WebServiceSoftwareFactoryModelingEditio_12D5D/image_thumb.png" width=427 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WebServiceSoftwareFactoryModelingEditio_12D5D/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Ref.: &lt;A title="&amp;#13;&amp;#10;http://download.microsoft.com/download/1/4/d/14d1a93d-3cce-4445-bd89-fa4f3aacab37/poster-2.pdf" href="http://download.microsoft.com/download/1/4/d/14d1a93d-3cce-4445-bd89-fa4f3aacab37/poster-2.pdf" mce_href="http://download.microsoft.com/download/1/4/d/14d1a93d-3cce-4445-bd89-fa4f3aacab37/poster-2.pdf"&gt;http://download.microsoft.com/download/1/4/d/14d1a93d-3cce-4445-bd89-fa4f3aacab37/poster-2.pdf&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Veja que algumas fábricas estão ausentes no poster acima, como a recém atualizada &lt;STRONG&gt;Web&lt;/STRONG&gt; &lt;STRONG&gt;Service Software Factory Modeling Edition&lt;/STRONG&gt;, que tem integrada uma &lt;STRONG&gt;DSL&lt;/STRONG&gt; para modelagem de serviços, veja aqui:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Web Service Software Factory: Modeling Edition - February 2008&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=F7AA544D-AD73-4B65-88D5-63F751844540&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=F7AA544D-AD73-4B65-88D5-63F751844540&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=F7AA544D-AD73-4B65-88D5-63F751844540&amp;amp;displaylang=en&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;No post anterior, falamos dos novos pacotes do GAT/GAX para Visual Studio 2005/2008. Agora, citamos a Web Service Software Factory : Modeling Edition para Visual Studio 2005/2008. &lt;/P&gt;
&lt;P&gt;Uma nota importante sobre essa nova fábrica de software &lt;STRONG&gt;:&lt;/STRONG&gt; agora, ela tem uma&amp;nbsp; &lt;STRONG&gt;DSL - Domain-Specific Language&amp;nbsp; &lt;/STRONG&gt;integrada, permitindo que as várias receitas e ações disponíveis para a geração de serviços sejam modeladas de forma visual, aproveitando os recursos e benefícios de uma linguagem específica de domínio. &lt;/P&gt;
&lt;P&gt;Na versão anterior, esta fábrica de software permitia a execução dessas receitas e templates através de wizards acessados diretamente a partir do &lt;STRONG&gt;Guidance Navigator&lt;/STRONG&gt; do guia de automação. Veja a figura abaixo para um exemplo de Guidance Navigator, dentro do Visual Studio.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WebServiceSoftwareFactoryModelingEditio_12D5D/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WebServiceSoftwareFactoryModelingEditio_12D5D/image_6.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=210 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WebServiceSoftwareFactoryModelingEditio_12D5D/image_thumb_2.png" width=240 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WebServiceSoftwareFactoryModelingEditio_12D5D/image_thumb_2.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Isso não dava muita flexibilidade para criação de novas combinações de serviços, entidades, contratos, operações, etc. Com o uso de uma DSL integrada, a versão Modeling Edition permite um escopo maior de soluções, além da possibilidade de modelagem visual de um problema. É de fato uma primeira fábrica de software oferecendo uma DSL para o desenvolvedor.&lt;/P&gt;
&lt;P&gt;O resultado é a possibilidade de uma modelagem de mais alto nível, mascarando detalhes de implementação, enquanto permite maior variabilidade de soluções e combinações de recursos disponíveis com a fábrica de software. Veja um exemplo abaixo:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WebServiceSoftwareFactoryModelingEditio_12D5D/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WebServiceSoftwareFactoryModelingEditio_12D5D/image_8.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=334 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WebServiceSoftwareFactoryModelingEditio_12D5D/image_thumb_3.png" width=404 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/WebServiceSoftwareFactoryModelingEditio_12D5D/image_thumb_3.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Para maiores detalhes sobre a modelagem de linguagens específicas de domínio, veja o livro:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Domain-Specific Development with Visual Studio DSL Tools (Microsoft .NET Development Series) &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://www.amazon.com/Domain-Specific-Development-Visual-Studio-Microsoft/dp/0321398203" mce_href="http://www.amazon.com/Domain-Specific-Development-Visual-Studio-Microsoft/dp/0321398203"&gt;http://www.amazon.com/Domain-Specific-Development-Visual-Studio-Microsoft/dp/0321398203&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;E um site com algumas informações sobre o livro: 
&lt;P&gt;&lt;STRONG&gt;Domain-Specific Development with Visual Studio DSL Tools (Released June 2007)&lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://www.domainspecificdevelopment.com/"&gt;&lt;FONT color=#669966&gt;http://www.domainspecificdevelopment.com/&lt;/FONT&gt;&lt;/A&gt; 
&lt;P&gt;...enquanto novos posts sobre o assunto estão sendo preparados... ;)&lt;/P&gt;
&lt;P&gt;Guias de automação, fábricas de software, linguagens específicas de domínio, templates para Visual Studio, etc. são de fato recursos que precisam ser conhecidos pelo arquiteto, pois são ferramentas importantes para a maior qualidade no desenvolvimento de software. Seja para empresas fornecedoras de software (ISV) ou organizações no mundo corporativo, garantir produtividade, padronização e qualidade pode se tornar em breve uma questão de sobrevivência. Claro que em diferentes proporções para cada uma dessas empresas, mas de fato essa discussão tende a se tornar um diferencial crescente num mundo cada vez mais globalizado e competitivo.&lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8039268" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/Arquitetura+de+Solu_26002300_231_3B0026002300_245_3B00_es/default.aspx">Arquitetura de Solu&amp;#231;&amp;#245;es</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/Frameworks/default.aspx">Frameworks</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/GAT+_2F00_+GAX/default.aspx">GAT / GAX</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category></item><item><title>GAX/GAT February 2008 Final Release</title><link>http://blogs.msdn.com/wcamb/archive/2008/03/01/gax-gat-february-2008-final-release.aspx</link><pubDate>Sun, 02 Mar 2008 01:37:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7982538</guid><dc:creator>wcamb</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/7982538.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=7982538</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=7982538</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Quem tem acompanhado nossas discussões sobre &lt;STRONG&gt;Guias de Automação&lt;/STRONG&gt; e &lt;STRONG&gt;Fábricas de Software&lt;/STRONG&gt; precisa ler esse post. No último dia 24/02 foi lançado o &lt;STRONG&gt;Final Release&lt;/STRONG&gt; do &lt;STRONG&gt;GAX/GAT&lt;/STRONG&gt; para &lt;STRONG&gt;Visual Studio 2008 &lt;/STRONG&gt;e&lt;STRONG&gt; 2005,&lt;/STRONG&gt; uma notícia que vinha sendo aguardada pelo mercado.&lt;/P&gt;
&lt;P&gt;Como sabemos, existem 3 diferentes mecanismos de customização e padronização de código no ambiente Visual Studio:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;&lt;STRONG&gt;Visual Studio Templates&lt;/STRONG&gt; &lt;BR&gt;Que permite a construção de templates de projeto e templates de itens de projetos; &lt;BR&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;&lt;STRONG&gt;Visual Studio SDK &lt;BR&gt;&lt;/STRONG&gt;Que permite a construção de &lt;EM&gt;addins&lt;/EM&gt; e &lt;EM&gt;wizards&lt;/EM&gt; para Visual Studio, permitindo acesso direto às funcionalidades do ambiente IDE; &lt;BR&gt;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;&lt;STRONG&gt;Guidances Automation (GAT/GAX)&lt;/STRONG&gt; &lt;BR&gt;Pacotes de automação e geração de código, através da infra-estrutura GAT/GAX da Microsoft;&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;De fato, todas as Fábricas de Software disponibilizadas pela Microsoft são construídas através de Guias de Automação, que guiam os desenvolvedores por atividades complexas e repetitivas, garantindo maior padronização e controle sobre o código gerado. &lt;/P&gt;
&lt;P&gt;Para relembrar, a figura abaixo apresenta os passos envolvidos na construção e uso de um Guia de Automação:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GAXGATFebruary2008FinalRelease_11311/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GAXGATFebruary2008FinalRelease_11311/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=324 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GAXGATFebruary2008FinalRelease_11311/image_thumb.png" width=489 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GAXGATFebruary2008FinalRelease_11311/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;A infra-estrutura comum do GAX agora vale para o Visual Studio 2005 e Visual Studio 2008 e o link é esse aqui:&lt;/P&gt;&lt;STRONG&gt;GAX - Guidance Automation Extensions - February 2008 Release&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=DF79C099-4753-4A59-91E3-5020D9714E4E&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=DF79C099-4753-4A59-91E3-5020D9714E4E&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=DF79C099-4753-4A59-91E3-5020D9714E4E&amp;amp;displaylang=en&lt;/A&gt; 
&lt;P&gt;Já o pacote para construção de guias GAT usado em &lt;EM&gt;design-time&lt;/EM&gt; deve ser instalado de acordo com o ambiente destino:&lt;/P&gt;
&lt;P&gt;...para o Visual Studio 2008:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;GAT - Guidance Automation Toolkit for Visual Studio 2008 - February 2008 Release &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=B91066B3-D1D6-4990-A45F-34CF8DBDC60C&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=B91066B3-D1D6-4990-A45F-34CF8DBDC60C&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=B91066B3-D1D6-4990-A45F-34CF8DBDC60C&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;...e para o Visual Studio 2005:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Guidance Automation Toolkit for Visual Studio 2005 - February 2008 Release &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=2700ED86-318C-4449-9DD2-5E1B60D1F4A5&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=2700ED86-318C-4449-9DD2-5E1B60D1F4A5&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=2700ED86-318C-4449-9DD2-5E1B60D1F4A5&amp;amp;displaylang=en&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Agora é instalar e conferir...&lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7982538" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/GAT+_2F00_+GAX/default.aspx">GAT / GAX</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category></item><item><title>Software Factory e Domain Specific Language - Uma discussão sobre modelagem.</title><link>http://blogs.msdn.com/wcamb/archive/2008/01/30/software-factory-e-domain-specific-language-uma-discuss-o-sobre-modelagem.aspx</link><pubDate>Thu, 31 Jan 2008 01:39:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7335236</guid><dc:creator>wcamb</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/7335236.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=7335236</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=7335236</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo? &lt;/P&gt;
&lt;P&gt;Já conversamos por aqui sobre vários aspectos envolvidos na reutilização de conhecimento, uso de templates e modos de padronização no desenvolvimento de software. Nos últimos posts, falamos de templates de projetos, guias de automação e outros mecanismos para a customização do ambiente de desenvolvimento, sempre visando a qualidade e a produtividade de software. &lt;/P&gt;
&lt;P&gt;Vamos voltar ao assunto, avançando nossa discussão sobre as &lt;STRONG&gt;Fábricas de Software (Software Factories)&lt;/STRONG&gt; e as &lt;STRONG&gt;Linguagens de Domínio Específico (Domain Specific Language). &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Sempre que pensamos em qualidade e produtividade de software, existem algumas perguntas que são recorrentes na cabeça do arquiteto, como:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Qual a real necessidade do meu negócio?&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Quais tecnologias são relevantes (sobre comunicação, apresentação, workflow, transação, storage, monitoração, etc)?&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Quais metodologias, patterns, templates, guias ou recomendações devo utilizar?&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Como garantir o uso de boas práticas em meu time?&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Como monitorar e controlar a qualidade de software?&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Como estar preparado para mudanças?&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Como ser ágil?&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Entre outras tantas. &lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;E como temos visto, existem diversos mecanismos que ajudam o arquiteto nessas perguntas, como:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Guias de desenvolvimento;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Guias livres de contexto / com contexto;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Kits ou guias de automação, como nossos GAT/GAX; &lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Implementações de referência e arquiteturas de referência;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Modelos de desenvolvimento e arquitetura;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Frameworks de desenvolvimento;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Linguagens de Domínio-Específico (DSL’s);&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Fábricas de Software (Software Factories);&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Da lista acima, os &lt;STRONG&gt;guias com contexto&lt;/STRONG&gt; conhecidos como "&lt;STRONG&gt;patterns&lt;/STRONG&gt;" são os mais comuns, por darem uma visão de solução/problema muito prática. Porém, temos visto uma crescente atenção sobre outras ferramentas, com destaque especial para as &lt;STRONG&gt;Fábricas de Software&lt;/STRONG&gt;. Existe uma razão para essa mudança. Hoje, existem mais de 26 guias do &lt;STRONG&gt;Patterns &amp;amp; Practices&lt;/STRONG&gt; (&lt;A href="http://msdn.microsoft.com/practices/)" mce_href="http://msdn.microsoft.com/practices/)"&gt;http://msdn.microsoft.com/practices/)&lt;/A&gt;, falando de aplicações e patterns aderentes para diversos cenários. &lt;/P&gt;
&lt;P&gt;Por isso, quando pensamos na quantidade de informação disponível nesses guias, enfrentamos alguns desafios:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;São mais de 25 mil páginas de informação, você vai lembrar de tudo depois de ler?&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Será que você vai ler de novo a cada projeto?&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Se você aconselhar seus desenvolvedores a lerem, será que eles irão ler de fato?&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Será que eles vão ter tempo e vão entender tudo?&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Eles serão capazes de aplicar os conselhos no contexto correto?&lt;/FONT&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Desse modo, surge a real necessidade de se usar ferramentas mais rígidas e de aplicação mais eficaz no processo de desenvolvimento de software, garantindo a qualidade, o padrão e a produtividade durante o projeto. &lt;/P&gt;
&lt;P&gt;Em nossa discussão, vimos que os &lt;STRONG&gt;Guias de Automação&lt;/STRONG&gt; permitem a criação de processos automatizados de geração de código, permitindo a reutilização de templates e códigos aprovados pelo arquiteto, o que garante maior velocidade na construção de novas soluções. Nesse sentido, a partir da seleção de fontes otimizados e aderentes a nichos específicos de aplicação, o arquiteto pode criar guias de automação que orientem o desenvolvedor na construção de novas aplicações com código otimizado, de forma automática. &lt;/P&gt;
&lt;P&gt;Nesse sentido, as &lt;STRONG&gt;Fábricas de Software&lt;/STRONG&gt; ampliam essa discussão, com considerações importantes sobre os seguintes componentes:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;&lt;STRONG&gt;Patterns&lt;/STRONG&gt;: Fornecem soluções gerais para problemas comuns;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;&lt;STRONG&gt;Frameworks&lt;/STRONG&gt;: Fornecem componentes suportados e reuso de componentes;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;&lt;STRONG&gt;Modelos&lt;/STRONG&gt;: Fornecem um modo de descrição de um problema específico; &lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;&lt;STRONG&gt;Metodologias&lt;/STRONG&gt;: Definem um conjunto codificado de práticas recomendáveis;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;&lt;STRONG&gt;Ferramentas&lt;/STRONG&gt;: Suportam a criação, manutenção e debugging;&lt;/FONT&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Como já foi dito, alguns exemplos de &lt;STRONG&gt;Software Factories&lt;/STRONG&gt; disponíveis pela Microsoft são:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Mobile Client Software Factory&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Smart Client Software Factory&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Web Client Software Factory&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Web Service Software Factory&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Application Block Software Factory&lt;/FONT&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Para cada fábrica de software temos um conjunto de &lt;EM&gt;patterns, modelos, frameworks&lt;/EM&gt; e &lt;EM&gt;guias de automação&lt;/EM&gt; empacotados numa mesma ferramenta para o desenvolvedor. E como principal infra-estrutura utilizada na construção dessa ferramenta, a Microsoft utilizou a plataforma &lt;STRONG&gt;GAT/GAX&lt;/STRONG&gt; para construção dos guias e seus artefatos. &lt;/P&gt;
&lt;P&gt;Assim, podemos concluir que a modelagem de uma fábrica de software passa pela definição e otimização de seus &lt;STRONG&gt;artefatos&lt;/STRONG&gt; componentes. Sem eles, não faz sentido pensarmos na construção de uma fábrica de software. A partir da definição de artefatos, podemos cercar os modelos, processos e a orientação de automação que será atendida pela fábrica de software em desenvolvimento. &lt;/P&gt;
&lt;P&gt;Recentemente, a Microsoft publicou um novo &lt;STRONG&gt;extension&lt;/STRONG&gt; para Visual Studio 2005, que permite a modelagem e construção de Web Services. Essa fábrica é conhecida como &lt;STRONG&gt;Service Factory&lt;/STRONG&gt; e está disponível no seguinte link: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Web Service Software Factory: Modeling Edition (Novembro 2007) &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://msdn2.microsoft.com/en-us/library/bb931187.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/bb931187.aspx"&gt;http://msdn2.microsoft.com/en-us/library/bb931187.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Um elemento interessante sobre essa fábrica de software é sua integração entre &lt;EM&gt;artefatos, guias e linguagens de domínio específico&lt;/EM&gt;. Ela apresenta de forma integrada &lt;STRONG&gt;3 DSL's&lt;/STRONG&gt; no Visual Studio 2005, permitindo a modelagem dos principais componentes de um serviço de uma forma visual: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Service Contract Model &lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Data Contract Model&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Host Model.&lt;/FONT&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;A figura abaixo apresenta o uso da DSL para modelagem dos componentes de um Web Service na Service Factory:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SoftwareFactoryeDomainSpecificLanguageU_1170F/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SoftwareFactoryeDomainSpecificLanguageU_1170F/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=359 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SoftwareFactoryeDomainSpecificLanguageU_1170F/image_thumb.png" width=434 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SoftwareFactoryeDomainSpecificLanguageU_1170F/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Note que para a construção dessa fábrica de software, seus autores precisaram modelar uma série de &lt;STRONG&gt;receitas&lt;/STRONG&gt;, para o completo mapeamento de tarefas para a construção de um Web Services. Algumas receitas foram: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Criar uma solução: ativada na criação de uma solução&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Gerar tipos de dados e mensagens: ativada para itens ".xsd"&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Criar um contrato de serviço: ativada para um item de projeto contrato de serviço&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Gerar interface de serviço: ativada para itens ".wsdl"&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Gerar adaptadores: ativada para itens ".wsdl"&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Criar um endpoint de Web Service: ativada para folders de solução nos endpoints&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#0000ff&gt;Expor uma interface de serviços: ativada para projetos de endpoints&lt;/FONT&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;E para a implementação dessas receitas, foram utilizados modelos em linguagens de domínio específico, o que gerou uma ferramenta visual e muito intuitiva para o desenvolvedor, facilitando o processo de construção de Web Services.&lt;/P&gt;
&lt;P&gt;Concluindo, para a construção de uma fábrica de software integrada a uma linguagem de domínio específico, precisamos entender o domínio da aplicação, suas principais ferramentas e artefatos, antes da geração do modelo de interação com a fábrica de software. &lt;/P&gt;
&lt;P&gt;Para maiores detalhes sobre essa fábrica de software e seus detalhes de implementação, veja: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Web Service Software Factory Community &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://www.codeplex.com/servicefactory/Release/ProjectReleases.aspx?ReleaseId=8130" mce_href="http://www.codeplex.com/servicefactory/Release/ProjectReleases.aspx?ReleaseId=8130"&gt;http://www.codeplex.com/servicefactory/Release/ProjectReleases.aspx?ReleaseId=8130&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Recomendo fortemente o uso dessa fábrica de software como fonte de inspiração para o entendimento e estudo de alternativas para a construção de fábricas de software customizadas e integradas a DSL's.&lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :) &lt;/P&gt;
&lt;P&gt;Waldemir. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7335236" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/Arquitetura+de+Solu_26002300_231_3B0026002300_245_3B00_es/default.aspx">Arquitetura de Solu&amp;#231;&amp;#245;es</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/Frameworks/default.aspx">Frameworks</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/GAT+_2F00_+GAX/default.aspx">GAT / GAX</category></item><item><title>Guidance Automation Toolkit - Customizações no ambiente de desenvolvimento</title><link>http://blogs.msdn.com/wcamb/archive/2008/01/20/guidance-automation-toolkit-customiza-es-no-ambiente-de-desenvolvimento.aspx</link><pubDate>Sun, 20 Jan 2008 18:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7173384</guid><dc:creator>wcamb</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/7173384.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=7173384</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=7173384</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Finalmente, o terceiro mecanismo para as customizações no ambiente de desenvolvimento são os &lt;STRONG&gt;Guias de Automação&lt;/STRONG&gt;. Para o Visual Studio temos o &lt;STRONG&gt;GAT - Guidance Automation Toolkit&lt;/STRONG&gt;, como sua principal ferramenta. Ele trabalha sobre um framework específico de automação, chamado &lt;STRONG&gt;Microsoft.Practices.RecipeFramework.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Como já falamos aqui no blog, o pacote GAT adiciona ao ambiente do Visual Studio a infra-estrutura de linguagens e ferramentas para a construção de pacotes de automação para geração de código. O objetivo é automatizar a codificação, baseando-se em templates e modelos de software que o arquiteto ou desenvolvedor selecionou como melhores práticas para um tipo de solução. &lt;/P&gt;
&lt;P&gt;Vamos iniciar com a preparação do ambiente sobre o Visual Studio 2005, onde temos os seguintes extensions e pacotes de atualização indicados abaixo:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1) Microsoft .NET Framework 2.0 Service Pack 1&lt;/STRONG&gt; &lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=79bc3b77-e02c-4ad3-aacf-a7633f706ba5&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=79bc3b77-e02c-4ad3-aacf-a7633f706ba5&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=79bc3b77-e02c-4ad3-aacf-a7633f706ba5&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2) Microsoft .NET Framework 3.0 Redistributable Package&lt;/STRONG&gt; &lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=10CC340B-F857-4A14-83F5-25634C3BF043&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=10CC340B-F857-4A14-83F5-25634C3BF043&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=10CC340B-F857-4A14-83F5-25634C3BF043&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;3) Microsoft .NET Framework 3.0 Service Pack 1&lt;/STRONG&gt; &lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=ec2ca85d-b255-4425-9e65-1e88a0bdb72a&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=ec2ca85d-b255-4425-9e65-1e88a0bdb72a&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=ec2ca85d-b255-4425-9e65-1e88a0bdb72a&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;4) Guidance Automation Extensions - July 2007 (GAT)&lt;/STRONG&gt; &lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=C0A394C0-5EEB-47C4-9F7B-71E51866A7ED&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=C0A394C0-5EEB-47C4-9F7B-71E51866A7ED&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=C0A394C0-5EEB-47C4-9F7B-71E51866A7ED&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;5) Guidance Automation Toolkit - July 2007 (GAX)&lt;/STRONG&gt; &lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=E3D101DB-6EE1-4EC5-884E-97B27E49EAAE&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=E3D101DB-6EE1-4EC5-884E-97B27E49EAAE&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=E3D101DB-6EE1-4EC5-884E-97B27E49EAAE&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;6) Visual Studio 2005 SDK Version 4.0&lt;/STRONG&gt; &lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=51A5C65B-C020-4E08-8AC0-3EB9C06996F4&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=51A5C65B-C020-4E08-8AC0-3EB9C06996F4&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=51A5C65B-C020-4E08-8AC0-3EB9C06996F4&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;7) Microsoft® Visual Studio® 2005 Team Suite Service Pack 1 - June 2007&lt;/STRONG&gt; &lt;BR&gt;&lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=BB4A75AB-E2D4-4C96-B39D-37BAF6B5B1DC&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=BB4A75AB-E2D4-4C96-B39D-37BAF6B5B1DC&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=BB4A75AB-E2D4-4C96-B39D-37BAF6B5B1DC&amp;amp;displaylang=en&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;A partir desta instalação, nosso Visual Studio 2005 estará apto para trabalhar com o GAT/GAX, disponibilizando uma nova pasta de templates de projeto, como vemos a seguir:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GuidanceAutomationToolkitCustomizaesnoam_B84F/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GuidanceAutomationToolkitCustomizaesnoam_B84F/image_2.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=345 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GuidanceAutomationToolkitCustomizaesnoam_B84F/image_thumb.png" width=498 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GuidanceAutomationToolkitCustomizaesnoam_B84F/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Assim, a pasta &lt;STRONG&gt;Guidance Packages&lt;/STRONG&gt; permite a criação de novos guias de automação, através do template de projeto &lt;STRONG&gt;"Guidance Package Development/Guidance Package".&lt;/STRONG&gt; Por exemplo, podemos pensar na automação de um cenário para construção de aplicações ASP.NET. Pense em templates de navegação otimizados e homologados pela equipe de arquitetura. O objetivo nesse cenário é garantir produtividade durante a construção de novas aplicações, através da geração dinâmica de arquivos e items de projeto. Essa geração dinâmica de código ocorre sobre uma linguagem de templates, a &lt;STRONG&gt;Text Templating Transformation Toolkit&lt;/STRONG&gt; ou simplesmente &lt;STRONG&gt;T4&lt;/STRONG&gt;. &lt;/P&gt;
&lt;P&gt;Um &lt;STRONG&gt;Guidance Package&lt;/STRONG&gt; (ou Pacote de Automação) é criado para um propósito específico, visando atender algum tipo de solução que queremos automatizar. Assim, caracteriza-se também como uma unidade de versionamento e distribuição. Uma vez finalizado, o pacote pode ser &lt;STRONG&gt;registrado&lt;/STRONG&gt; e &lt;STRONG&gt;distribuído&lt;/STRONG&gt; para as várias estações de desenvolvimento. Os desenvolvedores finais serão os usuários desse pacote de automação. &lt;/P&gt;
&lt;P&gt;A figura a seguir descreve bem esses passos no processo de modelagem e construção de um guia de automação:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GuidanceAutomationToolkitCustomizaesnoam_B84F/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GuidanceAutomationToolkitCustomizaesnoam_B84F/image_4.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=321 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GuidanceAutomationToolkitCustomizaesnoam_B84F/image_thumb_1.png" width=485 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GuidanceAutomationToolkitCustomizaesnoam_B84F/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;BR&gt;De fato, um &lt;STRONG&gt;Guidance Package&lt;/STRONG&gt; consiste de templates do Visual Studio, como vimos anteriormente (templates de projeto e templates de itens de projeto) e receitas de automação (passos de automação). Entre os elementos que compõem um guia de automação temos:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Recipes (Receitas) &lt;/LI&gt;
&lt;LI&gt;Wizards (Sequência de passos para entrada de dados, nos moldes dos Addin's Wizards que vimos no post anterior) &lt;/LI&gt;
&lt;LI&gt;Value Providers (Provedores de valores) &lt;/LI&gt;
&lt;LI&gt;Type Converters (Conversores de tipos) &lt;/LI&gt;
&lt;LI&gt;Actions (Ações) &lt;/LI&gt;
&lt;LI&gt;Code Generation (Geração de código, onde temos os templates em linguagem T4) &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;A figua abaixo apresenta bem a hierarquia de componentes de um guia de automação, veja:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GuidanceAutomationToolkitCustomizaesnoam_B84F/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GuidanceAutomationToolkitCustomizaesnoam_B84F/image_6.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=287 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GuidanceAutomationToolkitCustomizaesnoam_B84F/image_thumb_2.png" width=456 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GuidanceAutomationToolkitCustomizaesnoam_B84F/image_thumb_2.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Entendido os conceitos sobre o GAT/GAX, vejamos como utilizá-lo. Uma sequência de passos para a construção de um guia de automação é dada abaixo:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Definir as receitas desejadas para o guia, incluindo a definição de argumentos, wizards e ações; &lt;/LI&gt;
&lt;LI&gt;Definir os templates de Visual Studio envolvidos; &lt;/LI&gt;
&lt;LI&gt;Escrever as ações; &lt;/LI&gt;
&lt;LI&gt;Escrever os tipos de argumentos e conversores necessários; &lt;/LI&gt;
&lt;LI&gt;Definir templates T4, se uma ação utilizar templates T4 para geração de código; &lt;/LI&gt;
&lt;LI&gt;Testar o pacote de automação; &lt;/LI&gt;
&lt;LI&gt;Construir o pacote com os arquivos de setup, para distribuição; &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Ao final, um pacote de guia conterá os seguintes artefatos:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;arquivo de configuração do guia de automação (necessário); &lt;/LI&gt;
&lt;LI&gt;templates de Visual Studio; &lt;/LI&gt;
&lt;LI&gt;templates T4; &lt;/LI&gt;
&lt;LI&gt;DLL implementando ações, editores de tipos, provedores de valores e conversores de tipos (note que uma única DLL é recomendada); &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Uma boa maneira de iniciar seus trabalhos sobre o guia de automação GAT é seguir os passos da solução exemplo, que vem com a instalação do GAT/GAX. Veja na tela principal da solução os principais passos recomentados, são 7 passos:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GuidanceAutomationToolkitCustomizaesnoam_B84F/image_12.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GuidanceAutomationToolkitCustomizaesnoam_B84F/image_12.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=456 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GuidanceAutomationToolkitCustomizaesnoam_B84F/image_thumb_5.png" width=466 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GuidanceAutomationToolkitCustomizaesnoam_B84F/image_thumb_5.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Finalmente, vamos exportar esse guia de automação para outras máquinas. A solução template do Guidance Package gera também um template de &lt;STRONG&gt;Setup&lt;/STRONG&gt;, que disponibiliza o pacote para instalação. Veja abaixo os projetos contidos na solução de um guia de automação, onde notamos o projeto de &lt;STRONG&gt;Setup &lt;/STRONG&gt;que deve ser instalado na estação do desenvolvedor:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GuidanceAutomationToolkitCustomizaesnoam_B84F/image_14.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GuidanceAutomationToolkitCustomizaesnoam_B84F/image_14.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=211 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GuidanceAutomationToolkitCustomizaesnoam_B84F/image_thumb_6.png" width=361 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/GuidanceAutomationToolkitCustomizaesnoam_B84F/image_thumb_6.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Desse modo, passamos pelos principais elementos sobre a modelagem e construção de um Guia de Automação. Recomendo fortemente a leitura dos arquivos de ajuda do GAT e GAX, para um maior detalhamento. O material tem bastante informações importante, que ajudará na evolução e construção de guias de automação sofisticados.&lt;/P&gt;
&lt;P&gt;A Microsoft também disponibiliza uma série de &lt;STRONG&gt;Fábricas de Software,&lt;/STRONG&gt; que nada mais são do que pacotes de automação prontos para assuntos específicos. Isso significa que a base das várias Fábricas de Software que a Microsoft disponibiliza é realmente o GAT/GAX que vimos aqui. Entre as fábricas mais conhecidas temos:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Mobile Client Software Factory&lt;/LI&gt;
&lt;LI&gt;Smart Client Software Factory&lt;/LI&gt;
&lt;LI&gt;Web Client Software Factory&lt;/LI&gt;
&lt;LI&gt;Web Service Software Factory&lt;/LI&gt;
&lt;LI&gt;Application Block Software Factory&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Em posts futuros, vamos avançar em outros assuntos relacionados ao ganho de produtividade no ambiente de desenvolvimento. Entre eles teremos as &lt;STRONG&gt;Fábricas de Software&lt;/STRONG&gt; e as &lt;STRONG&gt;Linguagens de Domínio Específico, ou DSL's - Domain Specific Languages&lt;/STRONG&gt;. Fiquem ligados.&lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7173384" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/Arquitetura+de+Solu_26002300_231_3B0026002300_245_3B00_es/default.aspx">Arquitetura de Solu&amp;#231;&amp;#245;es</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/Frameworks/default.aspx">Frameworks</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/GAT+_2F00_+GAX/default.aspx">GAT / GAX</category></item><item><title>Visual Studio 2005 SDK Version 4.0 - Customizações no ambiente de desenvolvimento.</title><link>http://blogs.msdn.com/wcamb/archive/2008/01/16/software-development-kit-v4-0-para-visual-studio-2005.aspx</link><pubDate>Thu, 17 Jan 2008 03:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7137053</guid><dc:creator>wcamb</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/7137053.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=7137053</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=7137053</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo? &lt;/P&gt;
&lt;P&gt;Em nossa discussão sobre mecanismos para customização do ambiente de desenvolvimento em .NET, já falamos de templates de projeto e templates de itens de projeto. A idéia é passar pelos mecanismos básicos de customização e por fim, discutir em detalhes o &lt;STRONG&gt;Guidance Automation Toolkit (GAT)&lt;/STRONG&gt;. Hoje falaremos sobre o &lt;STRONG&gt;SDK - Software Development Kit v4.0&lt;/STRONG&gt; para o Visual Studio 2005. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;2. Customização de funcionalidades através do Visual Studio 2005 SDK Version 4.0&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Quando pensamos no uso de um SDK de um determinado produto, temos em mente acessar funcionalidades e recursos de forma programática, sem restrições. O mesmo acontece com o SDK do Visual Studio. Com ele, podemos acessar os recursos para administração de itens de projeto, soluções ativas, referência, componentes em uso, etc. &lt;/P&gt;
&lt;P&gt;Desse modo, é possível criar customizações que adicionam funcionalidades integradas ao IDE (&lt;EM&gt;Integrated Development Environment&lt;/EM&gt;) do Visual Studio. Entre as opções temos:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;EM&gt;Criação de macros de expansão de código; &lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;Criação de menus customizados; &lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;Criação de janelas de ferramentas customizadas; &lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;Visualização de informações consolidadas sobre os projetos abertos; &lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;Extensões em conteúdo de arquivos de ajuda; &lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;Criação de addin's de navegação; &lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;Criação de wizards diversos, etc.&lt;/EM&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Assim, através do SDK acessamos o modelo de objetos do Visual Studio, implementado através das bibliotecas &lt;STRONG&gt;EnvDTE.dll&lt;/STRONG&gt; e &lt;STRONG&gt;EnvDTE80.dll.&lt;/STRONG&gt; (&lt;EM&gt;DTE - Development Tools Environment&lt;/EM&gt;). &lt;/P&gt;
&lt;P&gt;Uma customização muito comum é a criação de Addin's para o IDE. Já que estamos falando sobre ganhos de produtividade, pense num ADDIN que ofereça um Wizard, permitindo uma entrada de dados e que oriente o desenvolvedor na adição de novos recursos ao projeto ativo. Por exemplo, podemos visualizar todas as referências existentes no projeto, permitindo ainda adicionar novas referências de forma amigável. &lt;/P&gt;
&lt;P&gt;Vamos imaginar um &lt;STRONG&gt;Addin&lt;/STRONG&gt; implementado através de um classe chamada &lt;STRONG&gt;Viewer&lt;/STRONG&gt;. O objetivo desse Addin é navegar pelas referências ativas de um projeto no Visual Studio, como vemos a seguir:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SoftwareDevelopmentKitv4.0paraVisualStu_12FEA/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SoftwareDevelopmentKitv4.0paraVisualStu_12FEA/image_2.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=322 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SoftwareDevelopmentKitv4.0paraVisualStu_12FEA/image_thumb.png" width=525 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SoftwareDevelopmentKitv4.0paraVisualStu_12FEA/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;A figura acima apresenta a tela principal do Addin, navegando pelas referências e tipos presentes para o projeto. Esse tipo de customização é baseado no uso de classes do modelo de objetos do DTE, como vemos a seguir:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SoftwareDevelopmentKitv4.0paraVisualStu_12FEA/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SoftwareDevelopmentKitv4.0paraVisualStu_12FEA/image_4.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=292 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SoftwareDevelopmentKitv4.0paraVisualStu_12FEA/image_thumb_1.png" width=161 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SoftwareDevelopmentKitv4.0paraVisualStu_12FEA/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Veja que uma série de métodos são oferecidos, permitindo a implementação de atividades durante momentos como abertura ou fechamento do addin, conexão ao menu principal, shutdown, entre outros.&lt;/P&gt;
&lt;P&gt;E para acessar a hierarquia de recursos presentes no projeto, o Addin faz uso da seguinte estrutura:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SoftwareDevelopmentKitv4.0paraVisualStu_12FEA/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SoftwareDevelopmentKitv4.0paraVisualStu_12FEA/image_6.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=433 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SoftwareDevelopmentKitv4.0paraVisualStu_12FEA/image_thumb_2.png" width=574 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SoftwareDevelopmentKitv4.0paraVisualStu_12FEA/image_thumb_2.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Veja que o método acima percorre os vários projetos da solução ativa e para cada projeto, percorre as várias referências presentes, criando uma lista para o desenvolvedor. Isso é feito através da instância &lt;STRONG&gt;VSProj.References&lt;/STRONG&gt;. &lt;/P&gt;
&lt;P&gt;Da mesma forma, veremos que é possível a construção de &lt;STRONG&gt;Code Snippet&lt;/STRONG&gt; para obtenção de nomes de projeto, arquivos ou recursos, que poderão ser usados em templates ou guias de automação, utilizando a mesma navegação pelas estruturas do &lt;STRONG&gt;EnvDTE&lt;/STRONG&gt;. Veja um exemplo de &lt;STRONG&gt;Code Snippet&lt;/STRONG&gt; para obtenção do nome do projeto: &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console" color=#000080&gt;EnvDTE._DTE dte = (EnvDTE._DTE)automationObject; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console" color=#000080&gt;Array activeProjects = (Array)dte.ActiveSolutionProjects; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console" color=#000080&gt;EnvDTE.Project activeProject = (EnvDTE.Project)activeProjects.GetValue(0); &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console" color=#000080&gt;replacementsDictionary.Add("&lt;FONT color=#000000&gt;&lt;STRONG&gt;$projectname$&lt;/STRONG&gt;&lt;/FONT&gt;", &lt;STRONG&gt;activeProject.Name&lt;/STRONG&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Maiores detalhes sobre esse tipo de navegação pelos recursos do projeto você tem aqui:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;DTE2.ActiveSolutionProjects Property&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://msdn2.microsoft.com/en-us/library/envdte80.dte2.activesolutionprojects(VS.80).aspx" mce_href="http://msdn2.microsoft.com/en-us/library/envdte80.dte2.activesolutionprojects(VS.80).aspx"&gt;http://msdn2.microsoft.com/en-us/library/envdte80.dte2.activesolutionprojects(VS.80).aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;O download do SDK v4.0 do Visual Studio 2005 está disponível aqui: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Download : Visual Studio 2005 SDK Version 4.0&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=51A5C65B-C020-4E08-8AC0-3EB9C06996F4&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=51A5C65B-C020-4E08-8AC0-3EB9C06996F4&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=51A5C65B-C020-4E08-8AC0-3EB9C06996F4&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Finalmente, a partir da instalação do SDK no ambiente do Visual Studio, novos templates são oferecidos para o desenvolvedor, como vemos na figura a seguir na pasta "Other project Types/Extensibility". Entre eles temos:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;EM&gt;Visual Studio Integration Package &lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;Visual Studio Language Package &lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;Domain Specific Language Designer &lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;Domain Specific Language Setup &lt;/EM&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;Help Integration Wizard&lt;/EM&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SoftwareDevelopmentKitv4.0paraVisualStu_12FEA/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SoftwareDevelopmentKitv4.0paraVisualStu_12FEA/image_8.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=309 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SoftwareDevelopmentKitv4.0paraVisualStu_12FEA/image_thumb_3.png" width=518 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/SoftwareDevelopmentKitv4.0paraVisualStu_12FEA/image_thumb_3.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Note que o SDK v4.0 também inclui as ferramentas para construção de DSL's, que veremos em posts futuros. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Importante: &lt;/STRONG&gt;a documentação do SDK é leitura obrigatória para explorarmos os detalhes de implementação de Addins. Portanto, esse post não esgota o assunto, mas apenas aponta algumas direções e tópicos que achei interessante, entre os mecanismos de customização do ambiente Visual Studio 2005. No próximo post falaremos um pouco mais sobre guias de automação e linguagens para geração de código, como a &lt;STRONG&gt;T4 - Text Templating Transformation Toolkit.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :) &lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7137053" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/Arquitetura+de+Solu_26002300_231_3B0026002300_245_3B00_es/default.aspx">Arquitetura de Solu&amp;#231;&amp;#245;es</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/GAT+_2F00_+GAX/default.aspx">GAT / GAX</category></item><item><title>Project Template e Item Template - Customizações no ambiente de desenvolvimento.</title><link>http://blogs.msdn.com/wcamb/archive/2008/01/15/project-template-e-item-template-customiza-es-no-ambiente-de-desenvolvimento.aspx</link><pubDate>Wed, 16 Jan 2008 00:22:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7120800</guid><dc:creator>wcamb</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/7120800.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=7120800</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=7120800</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo? &lt;/P&gt;
&lt;P&gt;Voltando ao assunto principal, retomamos nossa discussão sobre&amp;nbsp;templates e padrões para o ambiente de desenvolvimento. Lembrando sempre que uma das atividades do time de arquitetura é direcionar a equipe de desenvolvimento na adoção de boas práticas na produção de software, com qualidade e produtividade. &lt;/P&gt;
&lt;P&gt;Recentemente, tive uma discussão com um time de arquitetos de um cliente, que questionava exatamente as alternativas para a padronização e uso de templates na plataforma Microsoft. Assim, perguntavam sobre customizações do ambiente de desenvolvimento, ou seja, customizações sobre o próprio Visual Studio, afim de direcionar o desenvolvedor no momento da criação de código. Focando a versão 2005, citamos 3 mecanismos básicos: &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Construção de templates de projeto e templates de itens de projeto;&lt;/LI&gt;
&lt;LI&gt;Customização de funcionalidades através do SDK v4.0 para o Visual Studio 2005;&lt;/LI&gt;
&lt;LI&gt;Construção de guias de automação para o desenvolvimento de soluções; &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Neste post, vamos falar iniciamente sobre o primeiro modo, a construção de templates no Visual Studio 2005. &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;1. Construção de templates de projeto e templates de itens de projeto&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;A construção de templates é feita através da funcionalidade "&lt;STRONG&gt;Export Template"&lt;/STRONG&gt; do Visual Studio. Esse recurso permite a geração de um pacote .ZIP, que agrupa arquivos de recursos, fontes, imagens e links de referência de um projeto ou arquivo fonte, que poderá ser reutilizado pelos desenvolvedores de forma integrada ao Visual Studio. &lt;/P&gt;
&lt;P&gt;Você encontra esse recurso no menu &lt;STRONG&gt;File&lt;/STRONG&gt; do IDE do Visual Studio, veja:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/PojectTemplateseItemsTemplatesCustomiza_10C40/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/PojectTemplateseItemsTemplatesCustomiza_10C40/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=338 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/PojectTemplateseItemsTemplatesCustomiza_10C40/image_thumb.png" width=278 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/PojectTemplateseItemsTemplatesCustomiza_10C40/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;A partir de um projeto modelo selecionado, é possível criar um template de projeto ou de item, como mostrado na caixa de diálogo abaixo:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/PojectTemplateseItemsTemplatesCustomiza_10C40/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/PojectTemplateseItemsTemplatesCustomiza_10C40/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=337 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/PojectTemplateseItemsTemplatesCustomiza_10C40/image_thumb_1.png" width=496 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/PojectTemplateseItemsTemplatesCustomiza_10C40/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Para o exemplo de geração de um template de projeto, é gerado um arquivo .ZIP, contendo os arquivos de recursos e fontes componentes do projeto. Também é adicionado a esse pacote o arquivo com as referências e lista de componentes do template. Esse arquivo vem com extensão ".vstemplate". Veja o conteúdo de um pacote de template aqui:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/PojectTemplateseItemsTemplatesCustomiza_10C40/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/PojectTemplateseItemsTemplatesCustomiza_10C40/image_8.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=124 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/PojectTemplateseItemsTemplatesCustomiza_10C40/image_thumb_3.png" width=385 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/PojectTemplateseItemsTemplatesCustomiza_10C40/image_thumb_3.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Um exemplo desse arquivo ".vstemplate" é dado a abaixo: &lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&lt;STRONG&gt;&amp;lt;VSTemplate Version="2.0.0" xmlns="&lt;/STRONG&gt;&lt;/FONT&gt;&lt;A href="http://schemas.microsoft.com/developer/vstemplate/2005" mce_href="http://schemas.microsoft.com/developer/vstemplate/2005" ?&gt;&lt;FONT color=#0000ff&gt;&lt;STRONG&gt;http://schemas.microsoft.com/developer/vstemplate/2005"&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/A&gt;&lt;FONT color=#0000ff&gt;&lt;STRONG&gt; Type="Project"&amp;gt; &lt;BR&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;STRONG&gt; &amp;lt;TemplateData&amp;gt; &lt;BR&gt;&lt;/STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Name&amp;gt;ConsoleAppDemo - Lab&amp;lt;/Name&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Description&amp;gt;ConsoleAppDemo - Lab&amp;lt;/Description&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ProjectType&amp;gt;CSharp&amp;lt;/ProjectType&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ProjectSubType&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ProjectSubType&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;SortOrder&amp;gt;1000&amp;lt;/SortOrder&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;CreateNewFolder&amp;gt;true&amp;lt;/CreateNewFolder&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;DefaultName&amp;gt;ConsoleAppDemo - Lab&amp;lt;/DefaultName&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ProvideDefaultName&amp;gt;true&amp;lt;/ProvideDefaultName&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;LocationField&amp;gt;Enabled&amp;lt;/LocationField&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;EnableLocationBrowseButton&amp;gt;true&amp;lt;/EnableLocationBrowseButton&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Icon&amp;gt;__TemplateIcon.ico&amp;lt;/Icon&amp;gt; &lt;BR&gt;&lt;STRONG&gt;&amp;nbsp; &amp;lt;/TemplateData&amp;gt; &lt;BR&gt;&amp;nbsp; &amp;lt;TemplateContent&amp;gt; &lt;BR&gt;&lt;/STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Project TargetFileName="&lt;STRONG&gt;&lt;FONT color=#000000&gt;ConsoleAppDemo1.csproj&lt;/FONT&gt;&lt;/STRONG&gt;" File="&lt;STRONG&gt;&lt;FONT color=#000000&gt;ConsoleAppDemo1.csproj&lt;/FONT&gt;&lt;/STRONG&gt;" ReplaceParameters="true"&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ProjectItem ReplaceParameters="true" TargetFileName="Program.cs"&amp;gt;Program.cs&amp;lt;/ProjectItem&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Folder Name="Properties" TargetFolderName="Properties"&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ProjectItem ReplaceParameters="true" TargetFileName="AssemblyInfo.cs"&amp;gt;AssemblyInfo.cs&amp;lt;/ProjectItem&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Folder&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Project&amp;gt; &lt;BR&gt;&amp;nbsp; &lt;STRONG&gt;&amp;lt;/TemplateContent&amp;gt;&lt;/STRONG&gt; &lt;BR&gt;&lt;STRONG&gt;&amp;lt;/VSTemplate&amp;gt;&lt;/STRONG&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;No template acima, temos um padrão de projeto baseado no arquivo &lt;STRONG&gt;ConsoleAppDemo1.csproj&lt;/STRONG&gt;, que foi o projeto base a partir do qual geramos o template. Isso aparece no tag &lt;STRONG&gt;&amp;lt;TemplateContent&amp;gt;&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;Outros exemplos de arquivos de template podem agrupar soluções com vários projetos, como vemos a seguir: &lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&amp;lt;?xml version="1.0" encoding="utf-8" ?&amp;gt; &lt;BR&gt;&amp;lt;VSTemplate Version="2.0.0"&amp;nbsp;&amp;nbsp; xmlns="&lt;/FONT&gt;&lt;A href="http://schemas.microsoft.com/developer/vstemplate/2005" mce_href="http://schemas.microsoft.com/developer/vstemplate/2005" ?&gt;&lt;FONT color=#0000ff&gt;http://schemas.microsoft.com/developer/vstemplate/2005"&lt;/FONT&gt;&lt;/A&gt;&lt;FONT color=#0000ff&gt; Type="ProjectGroup"&amp;gt; &lt;BR&gt;&amp;nbsp; &amp;lt;TemplateData&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;DefaultName&amp;gt;Template Solution Test - ClassLibraries 1 e 2&amp;lt;/DefaultName&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Name&amp;gt;Template Solution Test - ClassLibraries 1 e 2&amp;lt;/Name&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Description&amp;gt;Template Solution Test - ClassLibraries 1 e 2&amp;lt;/Description&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Icon&amp;gt;Default.ico&amp;lt;/Icon&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ProjectType&amp;gt;CSharp&amp;lt;/ProjectType&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;CreateNewFolder&amp;gt;false&amp;lt;/CreateNewFolder&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;DefaultName&amp;gt;&amp;lt;/DefaultName&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ProvideDefaultName&amp;gt;false&amp;lt;/ProvideDefaultName&amp;gt; &lt;BR&gt;&amp;nbsp; &amp;lt;/TemplateData&amp;gt; &lt;BR&gt;&lt;STRONG&gt;&amp;nbsp; &amp;lt;TemplateContent&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ProjectCollection&amp;gt;&lt;/STRONG&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;&amp;lt;ProjectTemplateLink ProjectName="ClassLibrary1"&amp;gt;&lt;/STRONG&gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .\ClassLibrary1\ClassLibrary1.vstemplate &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ProjectTemplateLink&amp;gt; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;&amp;lt;ProjectTemplateLink ProjectName="ClassLibrary2"&amp;gt; &lt;BR&gt;&lt;/STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .\ClassLibrary2\ClassLibrary2.vstemplate &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ProjectTemplateLink&amp;gt; &lt;BR&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ProjectCollection&amp;gt; &lt;BR&gt;&amp;nbsp; &amp;lt;/TemplateContent&amp;gt;&lt;/STRONG&gt; &lt;BR&gt;&amp;lt;/VSTemplate&amp;gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;No exemplo acima, note que o tag &lt;STRONG&gt;&amp;lt;TemplateContent&amp;gt;&lt;/STRONG&gt; contém agora o tag &lt;STRONG&gt;&amp;lt;ProjectCollection&amp;gt;,&lt;/STRONG&gt; onde encontramos a referência para dois templates de projetos previamente gerados: &lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&amp;lt;ProjectTemplateLink ProjectName="ClassLibrary1"&amp;gt; &lt;BR&gt;&amp;nbsp; .\ClassLibrary1\ClassLibrary1.vstemplate &lt;BR&gt;&amp;lt;/ProjectTemplateLink&amp;gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT color=#0000ff&gt;&amp;lt;ProjectTemplateLink ProjectName="ClassLibrary2"&amp;gt; &lt;BR&gt;&amp;nbsp; .\ClassLibrary2\ClassLibrary2.vstemplate &lt;BR&gt;&amp;lt;/ProjectTemplateLink&amp;gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;Assim, criando os templates de projetos individuais, podemos gerar um template de solução, que agrupa vários projetos, para customizações mais completas. O pacote .zip final com o template gerado é colocado na pasta: &lt;/P&gt;
&lt;P&gt;&lt;FONT face="Lucida Console" color=#0000ff&gt;"C:\Documents and Settings\user\My Documents\Visual Studio 2005\My Exported Templates"&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;Mas ainda é possível criar novas pastas, agrupando templates por projetos, departamentos, funcionalidades, etc. No momento da criação de uma nova solução ou projeto, os templates previamente gerados são oferecidos ao desenvolvedor, que agora não inicia o desenvolvimento do zero.&amp;nbsp;Até aqui, falamos de templates de projetos, mas o mesmo mecanismo funciona para templates de arquivos ou recursos individuais de um projeto, chamados de &lt;STRONG&gt;Item Template.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Uma boa referência sobre a criação de templates você encontra aqui, com uma série de links sobre os tags e funcionalidades dos arquivos "&lt;STRONG&gt;.vstemplates&lt;/STRONG&gt;": &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Create Reusable Project And Item Templates For Your Development Team&lt;/STRONG&gt; &lt;BR&gt;&lt;A href="http://msdn.microsoft.com/msdnmag/issues/06/01/codetemplates/default.aspx" mce_href="http://msdn.microsoft.com/msdnmag/issues/06/01/codetemplates/default.aspx"&gt;http://msdn.microsoft.com/msdnmag/issues/06/01/codetemplates/default.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;No próximo post, vamos falar das customizações sobre o SDK v4.0 do Visual Studio 2005.&lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :) &lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7120800" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/Arquitetura+de+Solu_26002300_231_3B0026002300_245_3B00_es/default.aspx">Arquitetura de Solu&amp;#231;&amp;#245;es</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/Frameworks/default.aspx">Frameworks</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/GAT+_2F00_+GAX/default.aspx">GAT / GAX</category></item><item><title>Gramáticas, Linguagens e Compiladores: um retorno às bases.</title><link>http://blogs.msdn.com/wcamb/archive/2008/01/13/gram-ticas-linguagens-e-compiladores-um-retorno-s-bases.aspx</link><pubDate>Mon, 14 Jan 2008 00:57:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7102774</guid><dc:creator>wcamb</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/7102774.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=7102774</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=7102774</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo? &lt;/P&gt;
&lt;P&gt;No post anterior iniciamos nossa discussão sobre guias e DSL's. E já que o assunto envolve a definição de linguagens e geração de código, pensei em voltar um pouco às bases. &lt;/P&gt;
&lt;P&gt;Quando pensamos em &lt;STRONG&gt;linguagens&lt;/STRONG&gt;, podemos citar duas formas básicas para a formalização de linguagens de programação: as &lt;STRONG&gt;gramáticas&lt;/STRONG&gt; (com suas leis de formação) e as regras de testes ou &lt;STRONG&gt;reconhecedores&lt;/STRONG&gt; (com suas regras de validação). &lt;/P&gt;
&lt;P&gt;Podemos definir uma gramática como um conjunto de leis de formação que definem de maneira rigorosa o modo de geração de textos corretos de uma linguagem. Assim, partindo-se de uma gramática, é possível gerar textos válidos na linguagem-alvo. Da mesma forma, uma linguagem é um conjunto de todos os textos que podem ser gerados a partir da gramática que define aquela linguagem. &lt;/P&gt;
&lt;P&gt;Logo, gramáticas são mecanismos geradores, que permitem a síntese de textos pertencentes a uma determinada linguagem. A base desse assunto é a &lt;STRONG&gt;Hierarquia de Chomsky&lt;/STRONG&gt;. Algumas referências sobre o assunto você encontra aqui: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Chomsky Hierarchy&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://en.wikipedia.org/wiki/Chomsky_hierarchy" mce_href="http://en.wikipedia.org/wiki/Chomsky_hierarchy"&gt;http://en.wikipedia.org/wiki/Chomsky_hierarchy&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;A &lt;STRONG&gt;Hierarquia de Chomsky&lt;/STRONG&gt; define tipos diferentes de linguagens, de acordo com a rigidez de suas gramáticas e regras de formação. De forma resumida, citamos 4 tipos de gramáticas: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;EM&gt;Gramáticas Irrestritas&lt;/EM&gt; ou de tipo 0 (zero)&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;Gramáticas Sensíveis&lt;/EM&gt; ao Contexto ou de tipo 1 &lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;Gramáticas Livres de Contexto&lt;/EM&gt; ou de tipo 2&lt;/LI&gt;
&lt;LI&gt;e finalmente as &lt;EM&gt;Gramáticas Lineares&lt;/EM&gt; ou de tipo 3, as que possuem maior importância para o estudo e desenvolvimento de compiladores. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Durante o processo de definição de uma linguagem, podemos usar as chamadas &lt;STRONG&gt;meta-linguagens&lt;/STRONG&gt;. Por exemplo, pense numa meta-linguagem quando temos um texto escrito em português para definir a gramática inglesa. Nesse caso, português é a meta-linguagem, usada para explicar a gramática alvo, a gramática inglesa. Em computação, uma meta-linguagem muito conhecida é a &lt;STRONG&gt;BNF&lt;/STRONG&gt; ou "&lt;STRONG&gt;BACKUS-NAUR FORM&lt;/STRONG&gt;". Veja um exemplo de BNF abaixo:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;lt;syntax&amp;gt; ::= &amp;lt;rule&amp;gt; | &amp;lt;rule&amp;gt; &amp;lt;syntax&amp;gt; &lt;BR&gt;&amp;lt;rule&amp;gt; ::= &amp;lt;opt-whitespace&amp;gt; "&amp;lt;" &amp;lt;rule-name&amp;gt; "&amp;gt;" &amp;lt;opt-whitespace&amp;gt; "::=" &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;opt-whitespace&amp;gt; &amp;lt;expression&amp;gt; &amp;lt;line-end&amp;gt; &lt;BR&gt;&amp;lt;opt-whitespace&amp;gt; ::= " " &amp;lt;opt-whitespace&amp;gt; | ""&amp;nbsp; &lt;BR&gt;&amp;lt;expression&amp;gt; ::= &amp;lt;list&amp;gt; | &amp;lt;list&amp;gt; "|" &amp;lt;expression&amp;gt; &lt;BR&gt;&amp;lt;line-end&amp;gt; ::= &amp;lt;opt-whitespace&amp;gt; &amp;lt;EOL&amp;gt; | &amp;lt;line-end&amp;gt; &amp;lt;line-end&amp;gt; &lt;BR&gt;&amp;lt;list&amp;gt; ::= &amp;lt;term&amp;gt; | &amp;lt;term&amp;gt; &amp;lt;opt-whitespace&amp;gt; &amp;lt;list&amp;gt; &lt;BR&gt;&amp;lt;term&amp;gt; ::= &amp;lt;literal&amp;gt; | "&amp;lt;" &amp;lt;rule-name&amp;gt; "&amp;gt;" &lt;BR&gt;&amp;lt;literal&amp;gt; ::= '"' &amp;lt;text&amp;gt; '"' | "'" &amp;lt;text&amp;gt; "'"&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;Outro exemplo simples de definição em BNF, para formação de expressões como 000101, 010101, 11100101, etc, é dada abaixo:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&amp;lt;integer&amp;gt; ::= &amp;lt;digit&amp;gt;&amp;lt;integer&amp;gt; | &amp;lt;digit&amp;gt; &lt;BR&gt;&amp;lt;digit&amp;gt; ::= 0 | 1&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Conceitos como terminais, símbolos, vocabulários, entre outros, são elementos da definição de linguagens de programação. Veja alguns links sobre BNF aqui: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Backus–Naur form &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://en.wikipedia.org/wiki/Backus-Naur_form" mce_href="http://en.wikipedia.org/wiki/Backus-Naur_form"&gt;http://en.wikipedia.org/wiki/Backus-Naur_form&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Finalmente, temos o desafio de construir nosso gerador de código ou compilador. Entenda os geradores de código como programas específicos, que trazem alguma sofisticação, mas que na verdade são baseados em rotinas simples e bem definidas. Tipicamente, um compilador apresenta os seguintes componentes:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Funções de acesso a arquivos (acesso físico ao disco)&lt;/LI&gt;
&lt;LI&gt;Funções de acesso lógico&lt;/LI&gt;
&lt;LI&gt;Funções para extração de caracteres&lt;/LI&gt;
&lt;LI&gt;Analisador Léxico&lt;/LI&gt;
&lt;LI&gt;Analisador Sintático&lt;/LI&gt;
&lt;LI&gt;Otimizador ou analisador semântico&lt;/LI&gt;
&lt;LI&gt;e o Gerador de código &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Veja maiores detalhes sobre cada componente de uma compilador aqui: &lt;/P&gt;
&lt;P&gt;Ref.: &lt;A href="http://en.wikipedia.org/wiki/Compiler" mce_href="http://en.wikipedia.org/wiki/Compiler"&gt;http://en.wikipedia.org/wiki/Compiler&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;A figura abaixo apresenta um mapa das principais atividades realizadas por um compilador, para ilustrarmos melhor esse post.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/94e327a09e03_10C33/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/94e327a09e03_10C33/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=417 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/94e327a09e03_10C33/image_thumb.png" width=183 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/94e327a09e03_10C33/image_thumb.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;E uma leitura importante sobre compiladores sempre é o &lt;EM&gt;livro do dragão&lt;/EM&gt; :)&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Compilers: Principles, Techniques, and Tools (2nd Edition) &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A title=http://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811 href="http://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811" mce_href="http://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811"&gt;http://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Durante o processo de definição e construção de nossos guias de automação ou mesmo nossas DSL's não vamos precisar aplicar toda a rigidez do processo envolvido na construção de compiladores, interpretadores ou mesmo geradores de código para linguagens formais. Porém, muitos dos elementos da teoria de compilação são ferramentas importantes para o arquiteto nesse processo. Conhecer essas teorias e manter uma leitura constante desses assuntos é sem dúvida um diferencial. &lt;/P&gt;
&lt;P&gt;Como arquitetos, retornar as bases de tempos em tempos é uma prática saudável. :) &lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :) &lt;/P&gt;
&lt;P&gt;Waldemir. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7102774" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/Arquitetura+de+Solu_26002300_231_3B0026002300_245_3B00_es/default.aspx">Arquitetura de Solu&amp;#231;&amp;#245;es</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/GAT+_2F00_+GAX/default.aspx">GAT / GAX</category></item><item><title>Guidance Automation Toolkit, Software Factory, Domain-Specific Languages e outros assuntos.</title><link>http://blogs.msdn.com/wcamb/archive/2008/01/11/visual-studio-extensibility-guidance-automation-toolkit-software-factory-domain-specific-languages-e-outros-assuntos.aspx</link><pubDate>Fri, 11 Jan 2008 19:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:7076394</guid><dc:creator>wcamb</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/7076394.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=7076394</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=7076394</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo? &lt;/P&gt;
&lt;P&gt;Nos últimos posts temos falado sobre frameworks, templates e temas relacionados com a produtividade de software. Reusabilidade de serviços, otimização, qualidade na codificação e desafios no desenvolvimento são tópicos sempre recorrentes. Em linhas gerais, o mundo da arquitetura de software sempre envolve essas questões e cabe ao arquiteto direcionar suas equipes para a correta adoção das melhores práticas para uma codificação de qualidade e com produtividade. Existem diversas ferramentas que suportam o arquiteto nessa tarefa. Como exemplo, podemos citar as Fábricas de Software (Software Factories). &lt;/P&gt;
&lt;P&gt;Sobre esse tema, vale recomendar o livro "Software Factory" de Jack Greenfield, uma leitura obrigatória sobre o assunto.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Software Factories: Assembling Applications with Patterns, Models, Frameworks, and Tools&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.amazon.com/Software-Factories-Assembling-Applications-Frameworks/dp/0471202843/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1200059711&amp;amp;sr=1-1" mce_href="http://www.amazon.com/Software-Factories-Assembling-Applications-Frameworks/dp/0471202843/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1200059711&amp;amp;sr=1-1"&gt;http://www.amazon.com/Software-Factories-Assembling-Applications-Frameworks/dp/0471202843/ref=sr_1_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1200059711&amp;amp;sr=1-1&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Outro elemento importante nessa discussão são as DSL'S - Domaing-Specific Languages, que permitem a construção de ferramentas visuais para a composição de soluções, gerando código de forma automática e com grande controle sobre a qualidade do código gerado. O desenvolvimento de uma DSL passa pelo entendimento do negócio, assim como os artefatos de software que serão utilizados, como bibliotecas, templates, patterns de desenvolvimento, etc. &lt;/P&gt;
&lt;P&gt;Uma leitura recomendada sobre DSL's é o livro "Visual Studio DSL Tools", da série Microsoft .NET Development. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Domain-Specific Development with Visual Studio DSL Tools (Microsoft .NET Development Series)&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.amazon.com/Domain-Specific-Development-Visual-Studio-Microsoft/dp/0321398203/ref=pd_bbs_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1200059661&amp;amp;sr=8-1" mce_href="http://www.amazon.com/Domain-Specific-Development-Visual-Studio-Microsoft/dp/0321398203/ref=pd_bbs_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1200059661&amp;amp;sr=8-1"&gt;http://www.amazon.com/Domain-Specific-Development-Visual-Studio-Microsoft/dp/0321398203/ref=pd_bbs_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1200059661&amp;amp;sr=8-1&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Mas antes de avançarmos sobre Fábricas de Software ou DSL's, vamos falar um pouco sobre ferramentas de extensibilidade e guias de automação. Nesse ponto, a Microsoft oferece já há algum tempo o pacote GAT - Guidance Automation Toolkit, de fato o fundamento para o trabalho com Fábricas de Software e Linguagens de Domínio Específico. &lt;/P&gt;
&lt;P&gt;Veja os links para download abaixo (GAT/GAX são ambos necessários): &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;GAX - Guidance Automation Extensions - que fornece o núcleo de ferramentas, templates e assistentes para a criação de guias de automação; &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C0A394C0-5EEB-47C4-9F7B-71E51866A7ED&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=C0A394C0-5EEB-47C4-9F7B-71E51866A7ED&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=C0A394C0-5EEB-47C4-9F7B-71E51866A7ED&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;GAT - Guidance Automation Toolkit - que permite a construção de guias e navegadores sobre os artefatos utilizados em sua solução de automação. &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=E3D101DB-6EE1-4EC5-884E-97B27E49EAAE&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=E3D101DB-6EE1-4EC5-884E-97B27E49EAAE&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=E3D101DB-6EE1-4EC5-884E-97B27E49EAAE&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Os pacotes GAT/GAX adicionam ao ambiente do Visual Studio a infra-estrutura necessária de linguagens e ferramentas para a construção de pacotes de automação para geração de código. O objetivo é automatizar a codificação, baseando-se em templates e modelos de codificação que o arquiteto selecionou como melhores práticas para um nicho de solução específico. Por exemplo, podemos pensar na automação de um cenário para construção de aplicações ASP.NET, que faça uso de bibliotecas de um framework corporativo e que utilize templates de navegação otimizados e homologados pela equipe de arquitetura. O objetivo num cenário como esse é garantir que os desenvolvedores tenham produtividade durante a construção de novas aplicações, enquanto que as variações de soluções nesse mesmo domínio ficam sob controle. Essa geração dinâmica de código ocorre sobre uma linguagem de templates, a Text Templating Transformation Toolkit ou simplesmente T4. &lt;/P&gt;
&lt;P&gt;O exemplo abaixo em template T4 gera um código C# que implementa uma classe para escrever "Hello Iteration: n", onde n é o número de iterações que passamos como parâmetro para o template: &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/VisualStudioExtensibilityGuidanceAutoma_CD5E/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/VisualStudioExtensibilityGuidanceAutoma_CD5E/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=385 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/VisualStudioExtensibilityGuidanceAutoma_CD5E/image_thumb_1.png" width=592 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/VisualStudioExtensibilityGuidanceAutoma_CD5E/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Finalmente, como parte dessa preparação para tabalharmos com GAT/GAX, devemos instalar 2 pacotes importantes: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Enterprise Library 3.1 - May 2007 &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=4C557C63-708F-4280-8F0C-637481C31718&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=4C557C63-708F-4280-8F0C-637481C31718&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=4C557C63-708F-4280-8F0C-637481C31718&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Visual Studio 2005 SDK Version 4.0 &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?familyid=51A5C65B-C020-4E08-8AC0-3EB9C06996F4&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=51A5C65B-C020-4E08-8AC0-3EB9C06996F4&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=51A5C65B-C020-4E08-8AC0-3EB9C06996F4&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Nos próximos posts, vamos avançar no assunto, discutindo alguns aspectos importantes sobre GAT/GAX, enquanto evoluímos juntos rumo a DSL's de sucesso! :) &lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7076394" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/Frameworks/default.aspx">Frameworks</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/GAT+_2F00_+GAX/default.aspx">GAT / GAX</category></item></channel></rss>