<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Laércio Queiroz</title>
	<atom:link href="http://laercioqueiroz.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://laercioqueiroz.wordpress.com</link>
	<description>Meu dia-a-dia...</description>
	<lastBuildDate>Fri, 27 Jan 2012 03:26:57 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='laercioqueiroz.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Laércio Queiroz</title>
		<link>http://laercioqueiroz.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://laercioqueiroz.wordpress.com/osd.xml" title="Laércio Queiroz" />
	<atom:link rel='hub' href='http://laercioqueiroz.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Specifications (DDD) com SAP Business Rules Management</title>
		<link>http://laercioqueiroz.wordpress.com/2009/05/06/specifications-ddd-com-sap-business-rules-management/</link>
		<comments>http://laercioqueiroz.wordpress.com/2009/05/06/specifications-ddd-com-sap-business-rules-management/#comments</comments>
		<pubDate>Wed, 06 May 2009 14:56:24 +0000</pubDate>
		<dc:creator>Laércio Queiroz</dc:creator>
				<category><![CDATA[Desenvolvimento de Software]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[SAP NetWeaver]]></category>
		<category><![CDATA[ddd]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[rules engines]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[sap brm]]></category>
		<category><![CDATA[sap business rules management]]></category>

		<guid isPermaLink="false">http://laercioqueiroz.wordpress.com/?p=31</guid>
		<description><![CDATA[Este post é apenas uma dica. Ontem, um amigo me questionou sobre como ele poderia facilitar a manutenção de regras de negócio que, apesar de simples, são alteradas com muita freqüência no seu projeto. Ele não conhecia rules engines, tampouco sabia que a SAP, no Composition Environment, disponibilizou a Business Rules Management (BRM). BRM é [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=laercioqueiroz.wordpress.com&amp;blog=634405&amp;post=31&amp;subd=laercioqueiroz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Este post é apenas uma dica. Ontem, um amigo me questionou sobre como ele poderia facilitar a manutenção de regras de negócio que, apesar de simples, são alteradas com muita freqüência no seu projeto. Ele não conhecia <a href="http://www.martinfowler.com/bliki/RulesEngine.html" target="_blank">rules engines</a>, tampouco sabia que a SAP, no Composition Environment, disponibilizou a <a href="https://www.sdn.sap.com/irj/sdn/nw-rules-management" target="_blank">Business Rules Management</a> (BRM).</p>
<p>BRM é um mecanismo de processamento que permite que business experts declarem e gerenciem regras de negócio sem ter de programá-las numa linguagem imperativa. Essencialmente, este ambiente encapsula e desacopla as regras das aplicações que as utilizam, provendo um conveniente grau de flexibilidade.</p>
<p>Isolar as regras de negócio das aplicações, permite que business experts e os autores das regras façam atualizações de forma dinâmica sem quaisquer alterações nas demais aplicações ou processos.</p>
<p>Particularmente, acredito ser um recurso bastante útil para regras que representam fórmulas, cálculos e classificações, por exemplo. Nada mais que isso, creio. Recentemente, identifiquei algumas situações onde essa solução se encaixaria e uma delas é a definição de <a href="http://www.martinfowler.com/apsupp/spec.pdf" target="_blank">Specifications</a>.</p>
<p>Specification é um conceito que ganhou a “menção honrosa” de pattern depois que <a href="http://www.infoq.com/minibooks/domain-driven-design-quickly" target="_blank">Domain-Driven Design</a> se alastrou rapidamente em sites, blogs e fóruns. Contudo, podemos dizer que Specification é algo utilizado para testar se um objeto satisfaz a um critério. Verificar se um cliente tem direito a um desconto diferenciado, por exemplo.</p>
<p>A maioria das engines provê recursos que facilitam bastante o dia-a-dia de quem escreve/mantêm as regras, tais como: <a href="http://laercioqueiroz.wordpress.com/2008/01/28/entrevista-sobre-domain-specific-languages-com-phillip-calcado/" target="_self">DSLs</a>, IDEs e recursos de avaliação como Decision tables (que te livra de escrever uma montanha de if-then).</p>
<p>Apesar de ser mais utilizada para controlar o fluxo de processos executáveis (BPM), as regras podem ser invocadas de dentro de outras aplicações, através de uma casca EJB ou Web Service.</p>
<p>Finalizo com uma pergunta sobre o maior impeditivo na tentativa de alcançar os reais benefícios desse tipo de solução: Quantos consultores e <a href="https://www.sdn.sap.com/irj/bpx/gettingstarted?rid=/webcontent/uuid/207b8cd9-024a-2a10-8697-8708af508113" target="_blank">business expert</a> estão capacitados nesse tipo de recurso?</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/laercioqueiroz.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/laercioqueiroz.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/laercioqueiroz.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/laercioqueiroz.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/laercioqueiroz.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/laercioqueiroz.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/laercioqueiroz.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/laercioqueiroz.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/laercioqueiroz.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/laercioqueiroz.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/laercioqueiroz.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/laercioqueiroz.wordpress.com/31/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/laercioqueiroz.wordpress.com/31/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/laercioqueiroz.wordpress.com/31/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=laercioqueiroz.wordpress.com&amp;blog=634405&amp;post=31&amp;subd=laercioqueiroz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://laercioqueiroz.wordpress.com/2009/05/06/specifications-ddd-com-sap-business-rules-management/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19a956425a4f96c9b339ddf09f1f8c9c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">laercioqueiroz</media:title>
		</media:content>
	</item>
		<item>
		<title>Respostas sobre SAP para desenvolvedores</title>
		<link>http://laercioqueiroz.wordpress.com/2008/04/29/respostas-sobre-sap-para-desenvolvedores/</link>
		<comments>http://laercioqueiroz.wordpress.com/2008/04/29/respostas-sobre-sap-para-desenvolvedores/#comments</comments>
		<pubDate>Tue, 29 Apr 2008 20:29:13 +0000</pubDate>
		<dc:creator>Laércio Queiroz</dc:creator>
				<category><![CDATA[Desenvolvimento de Software]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[SAP NetWeaver]]></category>
		<category><![CDATA[consultor sap]]></category>
		<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://laercioqueiroz.wordpress.com/?p=22</guid>
		<description><![CDATA[Com este post eu tentarei esclarecer as dúvidas mais recorrentes de desenvolvedores de software interessados em seguir carreira como consultor SAP. Tenho visto em fóruns e recebido alguns e-mails com estas perguntas, então vou dar a minha contribuição (com base em minhas experiências e opiniões) para nortear algumas pessoas sobre quais caminhos seguir. Consultor especialista [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=laercioqueiroz.wordpress.com&amp;blog=634405&amp;post=22&amp;subd=laercioqueiroz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Com este post eu tentarei esclarecer as dúvidas mais recorrentes de desenvolvedores de software interessados em seguir carreira como consultor SAP. Tenho visto em fóruns e recebido alguns e-mails com estas perguntas, então vou dar a minha contribuição (com base em minhas experiências e opiniões) para nortear algumas pessoas sobre quais caminhos seguir.</p>
<blockquote><p>Consultor especialista em que?</p></blockquote>
<p>A principal dúvida é sempre a diferença entre os “tipos de consultores SAP”, ou seja, suas áreas de atuação. A primeira coisa que precisamos ter em mente quando nos interessamos pelas soluções SAP é que existem duas linhas de profissionais: os consultores funcionais e os consultores de tecnologia &#8211; a diferença é clara, mesmo que existam áreas onde possamos mesclar o funcional com o técnico.</p>
<p>Os consultores funcionais são profissionais que detém o conhecimento sobre os processos de uma determinada linha de negócio, e como estes estão mapeados nos aplicativos. Em geral, um consultor funcional é especialista em um módulo do SAP &#8211; que são identificados por aquelas siglas que vemos em anúncios de empregos <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  (ex.: FI, MM, SD, PP e etc.) &#8211; e trabalha mais próximo ao cliente na definição dos processos de negócio e utilização do sistema. Resumindo, os consultores funcionais sabem como trabalhar as informações dentro das soluções SAP e estão mais ligados ao negócio do que a tecnologia.</p>
<p>Os consultores de tecnologias SAP são os que conhecem a estrutura técnica das soluções e sabem como customiza-las e integra-las com outras aplicações. Resumindo: implantar, manter, customizar, desenvolver e compor novas soluções é o papel deste tipo de consultor. Como em qualquer processo de automatização, o trabalho dos consultores de tecnologia é tão importante quanto o dos funcionais.</p>
<p>Outra dúvida que eu gostaria de pontuar é como aprender e começar a trabalhar com SAP. Depois de definido o caminho que se deseja traçar (funcional ou técnico), a forma mais comum de aprender a utilizar as soluções da SAP é participar de uma academia ministrada pela própria empresa ou por parceiras educacionais. As academias são treinamentos focados em um módulo ou tecnologia SAP. São caras! Por isso é importante estar seguro daquilo que pretende fazer.</p>
<p>O que está mais próximo do seu perfil? Quais são as oportunidades profissionais após o treinamento? Qual a demanda do mercado na sua região? Que outros conhecimentos além da academia são necessários para atuar como consultor?</p>
<p>Estas questões devem ser observadas com cuidado antes de pagar caro por um treinamento desses. Como eu havia dito, existem também outras formas de obter conhecimento. Entretanto, seja por dificuldade em encontrar materiais, traçar um roteiro de estudos ou até mesmo contato com o próprio ambiente, ser um autodidata é difícil (e às vezes desestimulante). Nestes casos, as experiências anteriores são de grande importância na formação deste profissional.</p>
<blockquote><p>Sou programador e quero atuar em projetos na plataforma SAP. Vou ter que aprender ABAP?</p></blockquote>
<p>Depende. Esta resposta está ligada a área que você pretende atuar. Hoje é perfeitamente possível escrever soluções relacionadas a SAP usando linguagens mais populares (como Java e .NET) com uma curva de aprendizagem reduzida. Por outro lado, alguns recursos ainda são feitos usando-se apenas a linguagem da SAP.</p>
<blockquote><p>E as certificações? É um requisito para atuar como consultor?</p></blockquote>
<p>Sem querer entrar no mérito de que certificações provam ou não que você está apto a desenvolver alguma atividade (<strong>que a maioria delas não prova mesmo</strong>), eu diria que é bastante complicado iniciar ou conseguir algo interessante sem elas. Quem é experiente na área sabe o quanto este pensamento é mesquinho, mas é assim que funciona &#8211; alguns profissionais usam suas certificações como forma de ter reconhecimento por intimidação . Em alguns momentos, as empresas precisarão de profissionais certificados e as melhores oportunidades exigem isso. IMHO, o caminho é: aprender, pôr em prática e depois se certificar.</p>
<blockquote><p>Pergunta de um desenvolvedor/arquiteto Java: Vale a pena estudar SAP Netweaver ou devo continuar me especializando em Java apenas?</p></blockquote>
<p>Sim, vale a pena! O primeiro motivo é que você vai continuar desenvolvendo software da mesma forma que antes, vai continuar escrevendo código Java usando padrões de mercado e frameworks da moda. Em última análise, o Netweaver é composto por um servidor JEE como qualquer outro. O segundo motivo é que o mercado de SAP tem uma demanda grande por desenvolvedores qualificados e experientes. É ai que você entra! E é aqui que sua experiência em desenvolvimento de software é um diferencial (pois uma academia, por melhor que seja, não substitui anos de experiência).</p>
<blockquote><p>Quanto ganha um consultor SAP?</p></blockquote>
<p>Creio que este seja o ponto de maior interesse para a maioria. A variação de remuneração é grande e depende de uma série de fatores: localização, qualificação, experiência, os mesmos de sempre. O que devemos condierar é que, como qualquer profissional especialista em alguma coisa, o consultor é, em geral, bem pago. Agora não se iluda! Quem se limita apenas à criação de relatórios não terá a mesma relevância (e conseqüentemente remuneração) que um consultor funcional ou especialista técnico.</p>
<p>A cada dia cresce mais a demanda por profissionais da área de SAP, e para nós desenvolvedores isso se tornou cada vez mais atrativo. Agora além de &#8220;obter o cadastro de produtos do ERP&#8221;,&#8230; estamos trabalhando em soluções com um maior valor agregado, e o melhor de tudo: aproveitando tudo o que sabemos fazer!</p>
<p>Fica ai a dica para os interessados&#8230;</p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/laercioqueiroz.wordpress.com/22/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/laercioqueiroz.wordpress.com/22/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/laercioqueiroz.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/laercioqueiroz.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/laercioqueiroz.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/laercioqueiroz.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/laercioqueiroz.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/laercioqueiroz.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/laercioqueiroz.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/laercioqueiroz.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/laercioqueiroz.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/laercioqueiroz.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/laercioqueiroz.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/laercioqueiroz.wordpress.com/22/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/laercioqueiroz.wordpress.com/22/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/laercioqueiroz.wordpress.com/22/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=laercioqueiroz.wordpress.com&amp;blog=634405&amp;post=22&amp;subd=laercioqueiroz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://laercioqueiroz.wordpress.com/2008/04/29/respostas-sobre-sap-para-desenvolvedores/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19a956425a4f96c9b339ddf09f1f8c9c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">laercioqueiroz</media:title>
		</media:content>
	</item>
		<item>
		<title>SAP NetWeaver Developer Day para desenvolvedores JEE/ABAP</title>
		<link>http://laercioqueiroz.wordpress.com/2008/03/09/sap-netweaver-developer-day/</link>
		<comments>http://laercioqueiroz.wordpress.com/2008/03/09/sap-netweaver-developer-day/#comments</comments>
		<pubDate>Sun, 09 Mar 2008 21:09:58 +0000</pubDate>
		<dc:creator>Laércio Queiroz</dc:creator>
				<category><![CDATA[Desenvolvimento de Software]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[SAP NetWeaver]]></category>
		<category><![CDATA[Eventos]]></category>
		<category><![CDATA[NetWeaver]]></category>
		<category><![CDATA[SAP]]></category>
		<category><![CDATA[SAP NetWeaver Developer Day]]></category>

		<guid isPermaLink="false">http://laercioqueiroz.wordpress.com/?p=15</guid>
		<description><![CDATA[No primeiro dia do SAP Forum &#8211; maior evento sobre SAP do país - a SAP promoverá o SAP NetWeaver Developer Day para desenvolvedores JavaEE e ABAP. Mais detalhes sobre o evento no convite abaixo: As vagas são limitadas, então quem quiser conferir as palestras sobre a plataforma SAP NetWeaver deve inscrever-se o quanto antes! Até lá&#8230; Inscrições: [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=laercioqueiroz.wordpress.com&amp;blog=634405&amp;post=15&amp;subd=laercioqueiroz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p style="margin:0;" class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">No primeiro dia do SAP Forum &#8211; maior evento sobre SAP do país - a SAP promoverá o SAP NetWeaver Developer Day para desenvolvedores JavaEE e ABAP. Mais detalhes sobre o evento no convite abaixo:</span></p>
<p style="margin:0;" class="MsoNormal"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><a href="http://laercioqueiroz.files.wordpress.com/2008/03/conviteeventosapnw.jpg" title="conviteeventosapnw.jpg"></a></span></span><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><a href="http://laercioqueiroz.files.wordpress.com/2008/03/conviteeventosapnw.jpg" title="conviteeventosapnw.jpg"></a></span></span><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><a href="http://laercioqueiroz.files.wordpress.com/2008/03/conviteeventosapnw.jpg" title="conviteeventosapnw.jpg"></a></span></span><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><a href="http://laercioqueiroz.files.wordpress.com/2008/03/conviteeventosapnw.jpg" title="conviteeventosapnw.jpg"></a></span></span><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><a href="http://laercioqueiroz.files.wordpress.com/2008/03/conviteeventosapnw.jpg" title="conviteeventosapnw.jpg"></a></span></span><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><a href="http://laercioqueiroz.files.wordpress.com/2008/03/conviteeventosapnw.jpg" title="conviteeventosapnw.jpg"></a></span></span><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><a href="http://laercioqueiroz.files.wordpress.com/2008/03/conviteeventosapnw.jpg" title="conviteeventosapnw.jpg"></p>
<div style="text-align:center;"><a href="http://laercioqueiroz.files.wordpress.com/2008/03/conviteeventosapnw.jpg" title="conviteeventosapnw.jpg"></a><a href="http://laercioqueiroz.files.wordpress.com/2008/03/conviteeventosapnw.jpg" title="conviteeventosapnw.jpg"></a></div>
<p></a><span style="font-size:10pt;font-family:Arial;"><a href="http://laercioqueiroz.files.wordpress.com/2008/03/conviteeventosapnw.jpg" title="conviteeventosapnw.jpg"></p>
<div style="text-align:center;"><img src="http://laercioqueiroz.files.wordpress.com/2008/03/conviteeventosapnw.thumbnail.jpg?w=468" alt="conviteeventosapnw.jpg" /></div>
<p></a></span></p>
<p><span style="font-size:10pt;font-family:Arial;">As vagas são limitadas, então quem quiser conferir as palestras sobre a plataforma SAP NetWeaver deve inscrever-se o quanto antes! Até lá&#8230;</span></p>
<p><span style="font-size:10pt;font-family:Arial;"></span><span style="font-size:10pt;font-family:Arial;">Inscrições: <a target="_blank" href="http://www.sap.com.br/sapnwdd/ficha.php">http://www.sap.com.br/sapnwdd/ficha.php</a></span></p>
<p></span></span></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/laercioqueiroz.wordpress.com/15/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/laercioqueiroz.wordpress.com/15/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/laercioqueiroz.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/laercioqueiroz.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/laercioqueiroz.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/laercioqueiroz.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/laercioqueiroz.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/laercioqueiroz.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/laercioqueiroz.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/laercioqueiroz.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/laercioqueiroz.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/laercioqueiroz.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/laercioqueiroz.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/laercioqueiroz.wordpress.com/15/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/laercioqueiroz.wordpress.com/15/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/laercioqueiroz.wordpress.com/15/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=laercioqueiroz.wordpress.com&amp;blog=634405&amp;post=15&amp;subd=laercioqueiroz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://laercioqueiroz.wordpress.com/2008/03/09/sap-netweaver-developer-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19a956425a4f96c9b339ddf09f1f8c9c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">laercioqueiroz</media:title>
		</media:content>

		<media:content url="http://laercioqueiroz.files.wordpress.com/2008/03/conviteeventosapnw.thumbnail.jpg" medium="image">
			<media:title type="html">conviteeventosapnw.jpg</media:title>
		</media:content>
	</item>
		<item>
		<title>Namespaces vs. Assemblies o dilema na separação de interesses</title>
		<link>http://laercioqueiroz.wordpress.com/2008/02/18/namespaces-vs-assemblies-o-dilema-na-separacao-de-interesses/</link>
		<comments>http://laercioqueiroz.wordpress.com/2008/02/18/namespaces-vs-assemblies-o-dilema-na-separacao-de-interesses/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 18:11:38 +0000</pubDate>
		<dc:creator>Laércio Queiroz</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Arquitetura de Software]]></category>
		<category><![CDATA[Desenvolvimento de Software]]></category>
		<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[Separation of concerns]]></category>

		<guid isPermaLink="false">http://laercioqueiroz.wordpress.com/?p=14</guid>
		<description><![CDATA[Mais um recente dilema na plataforma .NET. Desta vez a questão é: Os namespaces são suficientes para distinguir e organizar as camadas da minha aplicação ou, além disso, devo separá-las em assemblies diferentes? Tenho visto um número cada vez maior de projetos .NET com uma quantidade exagerada de assemblies. IMHO, os namespaces são subutilizados. De [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=laercioqueiroz.wordpress.com&amp;blog=634405&amp;post=14&amp;subd=laercioqueiroz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Mais um recente dilema na plataforma .NET. Desta vez a questão é: Os <i>namespaces</i> são suficientes para distinguir e organizar as <b>camadas </b>da minha aplicação ou, além disso, devo separá-las em</span><span style="font-size:10pt;font-family:Arial;"> <i><span>assemblies</span></i></span><span style="font-size:10pt;font-family:Arial;"> diferentes?</span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Tenho visto um número cada vez maior de projetos .NET com uma quantidade exagerada de</span><span style="font-size:10pt;font-family:Arial;"> assemblies</span><span style="font-size:10pt;font-family:Arial;">. IMHO, os</span><span style="font-size:10pt;font-family:Arial;"> <i><span>namespaces</span></i></span><span style="font-size:10pt;font-family:Arial;"> são subutilizados. De forma geral, eu usaria mais</span><span style="font-size:10pt;font-family:Arial;"> namespaces</span><span style="font-size:10pt;font-family:Arial;"> e menos</span><span style="font-size:10pt;font-family:Arial;"> assemblies</span><span style="font-size:10pt;font-family:Arial;">! Vou expor o meu sentimento em relação a isto:</span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Um exemplo típico é a camada de persistência (no jargão .NET: uma DAL, <i>Data Access</i></span><i><span style="font-size:10pt;font-family:Arial;"> Layer</span></i><span style="font-size:10pt;font-family:Arial;">). Se eu estou criando uma camada de persistência<span> </span>específica para minha aplicação, ou seja, <b>que é capaz apenas de manipular os modelos do domínio em questão</b>; então qual o problema em distribuí-la juntamente com minha camada de negócio em um único</span><span style="font-size:10pt;font-family:Arial;"> assembly</span><span style="font-size:10pt;font-family:Arial;">? O fato de duas camadas diferentes estarem num mesmo</span><span style="font-size:10pt;font-family:Arial;"> assembly</span><span style="font-size:10pt;font-family:Arial;"> não torna o meu design menos coeso.</span></p>
<p>Estamos falando de um limite &#8211; conceito-chave da separação de interesses <span style="font-size:10pt;font-family:Arial;">(<a href="http://en.wikipedia.org/wiki/Separation_of_concerns"><i>Separation</i></a></span><a href="http://en.wikipedia.org/wiki/Separation_of_concerns"><i><span style="font-size:10pt;font-family:Arial;"> of</span></i><i><span style="font-size:10pt;font-family:Arial;"> Concern</span></i></a><i><span style="font-size:10pt;font-family:Arial;">) -</span></i><span style="font-size:10pt;font-family:Arial;"> que delineia os interesses de um conjunto de classes da aplicação. A escolha entre um limite físico </span><span style="font-size:10pt;font-family:Arial;">(assemblies</span><span style="font-size:10pt;font-family:Arial;">) ou lógico </span><span style="font-size:10pt;font-family:Arial;">(namespaces</span><span style="font-size:10pt;font-family:Arial;">) dependerá das reais necessidades, vantagens e desvantagens. </span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Por exemplo, se um componente será reutilizado por várias aplicações, ou então uma equipe separada é responsável por desenvolvê-lo, é necessário defini-lo num</span><span style="font-size:10pt;font-family:Arial;"> assembly</span><span style="font-size:10pt;font-family:Arial;"> específico.</span><span style="font-size:10pt;font-family:Arial;"> <i><span>Load on-demand</span></i></span><span style="font-size:10pt;font-family:Arial;"> também é um bom cenário para recursos em</span><span style="font-size:10pt;font-family:Arial;"> assemblies</span><span style="font-size:10pt;font-family:Arial;">.</span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Separar camadas mutuamente dependentes em</span><span style="font-size:10pt;font-family:Arial;"> assemblies</span><span style="font-size:10pt;font-family:Arial;"> diferentes causa um problema de design conhecido como <i>Circular</i></span><i><span style="font-size:10pt;font-family:Arial;"> Dependency</span></i><span style="font-size:10pt;font-family:Arial;">. Isso quer dizer que os dois</span><span style="font-size:10pt;font-family:Arial;"> assemblies</span><span style="font-size:10pt;font-family:Arial;"> não podem depender diretamente um do outro. Um ponto interessante citado no artigo do <a target="_blank" href="http://www.theserverside.net/tt/articles/showarticle.tss?id=ControllingDependencies">Smacchia </a>é que esta dependência resulta no que ele chama de “super componentes”. Se um</span><span style="font-size:10pt;font-family:Arial;"> assembly</span><span style="font-size:10pt;font-family:Arial;"> A depende diretamente do</span><span style="font-size:10pt;font-family:Arial;"> assembly</span><span style="font-size:10pt;font-family:Arial;"> B, e este depende do</span><span style="font-size:10pt;font-family:Arial;"> assembly</span><span style="font-size:10pt;font-family:Arial;"> C, é impossível executar algo no primeiro</span><span style="font-size:10pt;font-family:Arial;"> assembly</span><span style="font-size:10pt;font-family:Arial;"> sem ao menos ter que carregar os dois últimos.</span></p>
<p>Para resolvermos este impasse devemos retirar a ligação direta entre os<span style="font-size:10pt;font-family:Arial;"> assemblies</span><span style="font-size:10pt;font-family:Arial;"> com algum tipo de mapeamento ou interceptação. O que é mais comum (e indicado em alguns textos) é criarmos um terceiro</span><span style="font-size:10pt;font-family:Arial;"> assembly</span><span style="font-size:10pt;font-family:Arial;"> onde definiremos estruturas e interfaces comuns para persistência e negócio. É comum nestes casos ver modelos anêmicos usando o conjunto <a target="_blank" href="http://laercioqueiroz.wordpress.com/2007/12/10/voce-usa-dtotovo-em-aplicacoes-nao-distribuidas/">BO/DTO-VO-TO/DAO</a>. Então fica a pergunta:</span></p>
<p>Se eu não consigo aproveitar minha lógica de persistência em outros cenários – já que ela depende da interface dos DTOs (ahrg!) e este deve refletir os atributos dos meus objetos de negócio (ou nos <b>piores casos</b> refletem as tabelas do banco) &#8211; Qual a vantagem da separação dos objetos de negócio e da persistência em<span style="font-size:10pt;font-family:Arial;"> assemblies</span><span style="font-size:10pt;font-family:Arial;"> diferentes?</span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Já tentou abrir e executar um</span><span style="font-size:10pt;font-family:Arial;"> solution</span><span style="font-size:10pt;font-family:Arial;"> com muitos projetos relacionados? É demorado, o</span><span style="font-size:10pt;font-family:Arial;"> build</span><span style="font-size:10pt;font-family:Arial;"> é lento (e às vezes exige que uma ordem de compilação dos projetos seja seguida) e propenso a erros de output e etc. Já imaginou o problema na distribuição? Voltamos aos tempos de <a target="_blank" href="http://en.wikipedia.org/wiki/DLL_hell#DLL_hell_as_motivation_for_.NET">DLL</a></span><a target="_blank" href="http://en.wikipedia.org/wiki/DLL_hell#DLL_hell_as_motivation_for_.NET"><span style="font-size:10pt;font-family:Arial;"> Hell</span></a><span style="font-size:10pt;font-family:Arial;"> – programadores Win32 já ouviram falar muito nisso!</span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Talvez você esteja se perguntando se deveria distribuir a sua aplicação inteira num único e onipotente</span><span style="font-size:10pt;font-family:Arial;"> assembly</span><span style="font-size:10pt;font-family:Arial;">. Mas como dito anteriormente, essa questão vai depender dos seus requisitos de arquitetura – principalmente em como as camadas se comunicarão – e de muito bom senso. Eu procuro sempre refletir esta célebre frase do gênio Albert Einstein: </span><span style="font-size:10pt;font-family:Arial;">“Make everything</span><span style="font-size:10pt;font-family:Arial;"> as</span><span style="font-size:10pt;font-family:Arial;"> simple</span><span style="font-size:10pt;font-family:Arial;"> as</span><span style="font-size:10pt;font-family:Arial;"> possible</span><span style="font-size:10pt;font-family:Arial;">,</span><span style="font-size:10pt;font-family:Arial;"> but not simpler</span><span style="font-size:10pt;font-family:Arial;">&#8221; </span></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;">Referências</span></b><span style="font-size:10pt;"></span></p>
<p class="MsoNormal"><span style="font-size:10pt;"></span></p>
<p class="MsoNormal"><a target="_blank" href="http://www.theserverside.net/tt/articles/showarticle.tss?id=ControllingDependencies"><b><span style="font-size:10pt;font-family:Arial;"></span></b></a><span style="font-size:10pt;font-family:Arial;"><a target="_blank" href="http://www.theserverside.net/tt/articles/showarticle.tss?id=ControllingDependencies">http://www.theserverside.net/tt/articles/showarticle.tss?id=ControllingDependencies</a><br />
<a target="_blank" href="http://articles.techrepublic.com.com/5100-22-1044871.html">http://articles.techrepublic.com.com/5100-22-1044871.html</a><br />
<a target="_blank" href="http://www.msdners.com//dev-archive/88/12-39-881434.shtm">http://www.msdners.com//dev-archive/88/12-39-881434.shtm</a></span><span style="font-size:10pt;font-family:Arial;"><a target="_blank" href="http://codebetter.com/blogs/david.hayden/archive/2005/07/23/129745.aspx"></p>
<p>http://codebetter.com/blogs/david.hayden/archive/2005/07/23/129745.aspx</a></span></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/laercioqueiroz.wordpress.com/14/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/laercioqueiroz.wordpress.com/14/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/laercioqueiroz.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/laercioqueiroz.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/laercioqueiroz.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/laercioqueiroz.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/laercioqueiroz.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/laercioqueiroz.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/laercioqueiroz.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/laercioqueiroz.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/laercioqueiroz.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/laercioqueiroz.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/laercioqueiroz.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/laercioqueiroz.wordpress.com/14/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/laercioqueiroz.wordpress.com/14/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/laercioqueiroz.wordpress.com/14/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=laercioqueiroz.wordpress.com&amp;blog=634405&amp;post=14&amp;subd=laercioqueiroz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://laercioqueiroz.wordpress.com/2008/02/18/namespaces-vs-assemblies-o-dilema-na-separacao-de-interesses/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19a956425a4f96c9b339ddf09f1f8c9c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">laercioqueiroz</media:title>
		</media:content>
	</item>
		<item>
		<title>Entrevista sobre Domain-Specific Languages com Phillip Calçado</title>
		<link>http://laercioqueiroz.wordpress.com/2008/01/28/entrevista-sobre-domain-specific-languages-com-phillip-calcado/</link>
		<comments>http://laercioqueiroz.wordpress.com/2008/01/28/entrevista-sobre-domain-specific-languages-com-phillip-calcado/#comments</comments>
		<pubDate>Mon, 28 Jan 2008 14:03:08 +0000</pubDate>
		<dc:creator>Laércio Queiroz</dc:creator>
				<category><![CDATA[Arquitetura de Software]]></category>
		<category><![CDATA[Desenvolvimento de Software]]></category>
		<category><![CDATA[Entrevistas]]></category>
		<category><![CDATA[Domain-Driven Design]]></category>
		<category><![CDATA[Domain-Specific Languages]]></category>
		<category><![CDATA[DSL]]></category>
		<category><![CDATA[Language Adaptation]]></category>

		<guid isPermaLink="false">http://laercioqueiroz.wordpress.com/?p=13</guid>
		<description><![CDATA[Tirando a poeira do blog com um conteúdo bem bacana. Segue o primeiro post (de muitos, eu espero) que visam discutir temas interessantes, em português, com profissionais que se destacam sobre o assunto. O tema de hoje é: Domain-Specific Language. E quem vai responder as perguntas é ninguém mais que Phillip Calçado. Baseado em Melbourne, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=laercioqueiroz.wordpress.com&amp;blog=634405&amp;post=13&amp;subd=laercioqueiroz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal"><span style="font-size:10pt;">Tirando a poeira do blog com um conteúdo bem bacana. Segue o primeiro post (de muitos, eu espero) que visam discutir temas interessantes, em português, com profissionais que se destacam sobre o assunto.</span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">O tema de hoje é: <b>Domain-Specific Language</b>. E quem vai responder as perguntas é ninguém mais que <a href="http://fragmental.tw/" target="_blank">Phillip Calçado</a>. Baseado em </span><span style="font-size:10pt;font-family:Arial;">Melbourne, Austrália,</span><span style="font-size:10pt;font-family:Arial;"> Phillip é um experiente arquiteto e desenvolvedor de softwares atuando em grandes projetos na </span><span style="font-size:10pt;font-family:Arial;"><a href="http://www.thoughtworks.com/" target="_blank">ThoughtWorks</a>.</span><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal" style="margin-left:18pt;"><b><span style="font-size:10pt;font-family:Arial;"></span></b></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;">Laércio Queiroz: Vamos começar pelas definições. Como você define uma Domain-Specific Language?</span></b></p>
<p class="MsoNormal" style="margin-left:18pt;"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;">Phillip Calçado</span></b><span style="font-size:10pt;font-family:Arial;">: Uma DSL é uma linguagem estritamente relacionada com um domínio de aplicação. Por ser tão ligada a um domínio em específico ela é muito poderosa dentro dele e, provavelmente, muito ineficiente quando se trata de coisas que fogem a este domínio. Um bom exemplo é HTML. É uma linguagem específica para o domínio de definição de documentos em hipertexto. Se você for descrever um documento em hipertexto para a web utilizar HTML te dá poder e possibilidades; mas se você quiser,digamos, construir uma interface desktop ela não te ajuda muito.</span></p>
<p class="MsoNormal" style="margin-left:18pt;"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Da mesma forma Java e C# são linguagens genéricas (GPLs – General Purpose Languages). Com estas linguagens você consegue descrever vários tipos de domínios com relativa eficiência mas elas não são particularmente excepcionais em nenhum deles.<br />
<b></b></span></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;">lqueiroz: O conceito de DSLs não é novo. Na sua opinião o que fez o mercado dar maior atenção a este técnica agora?<br />
</span></b></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;">pcalcado</span></b><span style="font-size:10pt;font-family:Arial;">: Sim, DSLs são utilizadas há décadas em diversas plataformas de desenvolvimento. O interesse ressurgiu basicamente por dois motivos, creio. O primeiro deles foi à popularização de linguagens que tornam a criação de DSLs algo mais fácil, como Ruby. Hoje usamos dezenas de frameworks e bibliotecas que são -ou dizem ser -DSLs para esta plataforma e cada vez mais as pessoas estão ficando habituadas com e recebendo os benefícios desta abordagem. Engraçado que algumas pessoas estão usando termos como “Ruby-style” para estas técnicas, algo que não faz justiça ao fato que Ruby é apenas um usuário destas técnicas, que foram criadas, definidas, nomeadas e estão presentes de maneira mais profunda em outras plataformas. </span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Outro motivo é a necessidade de modelar o domínio com ferramentas mais poderosas. Nós usamos técnicas como Domain-Driven Design para tornar o nosso modelo de objetos mais próximo aos conceitos que estamos modelando –o <i>negócio</i>- mas ainda existe muito ruído causado por limitações técnicas. Um passo a frente é nos livramos dos objetos –ou qualquer outro conceito de engenharia de software- como unidade utilizada para modelagem. Objetos são um conceito artificial, não existem no domínio modelado são apenas uma ferramenta. Ao invés de usar a linguagem para modelar objetos que por sua vez modelam o domínio nós modelamos o domínio diretamente na linguagem utilizada.</span></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;"></span></b></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;">lqueiroz: As DSLs podem ser classificadas em dois grandes grupos: Textual DSLs e Graphical DSLs. Considerando-se que as duas abordagens têm a mesma intenção, quais as motivações que definem qual o tipo mais adequado de DSL numa determinada situação?<br />
</span></b></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;">pcalcado</span></b><span style="font-size:10pt;font-family:Arial;">: Linguagens de programação, sejam DSLs ou GPLs, podem ser de diversos tipos. Nada impede que você programe utilizando musica ou braile ao invés de texto ou gráficos.</span></p>
<p class="MsoNormal" style="margin-left:18pt;"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">A escolha entre usar (ou criar) uma DSL gráfica ou textual depende do que se quer fazer. Durante décadas nós construímos mecanismos fantásticos para lidar com programas escritos em texto, então uma DSL textual se aproveita disso. Da mesma forma uma DSL gráfica pode ser amigável e/ou representar melhor um dado domínio. </span></p>
<p class="MsoNormal" style="margin-left:18pt;"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Não existem muitas regras aqui, geralmente a decisão é focada em quem vai usar a linguagem. Se sua DSL vai ser utilizada por programadores profissionais geralmente eles são mais eficientes e lidam melhor com ferramentas textuais, se for usada por clientes e pessoas não tão qualificadas tecnicamente o ideal pode ser uma estrutura de assistentes e editores gráficos.<b><br />
</b></span></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;">lqueiroz: Outra interpretação que vem causando confusão é a diferença entre os dois tipos de Textual DSLs: Internal x External. Qual a diferença entre as duas? Em qual momento deve-se escolher por um tipo?</span></b></p>
<p><b>pcalcado: </b><span style="font-size:10pt;font-family:Arial;">DSLs Internas são aquelas que são criadas dentro de uma linguagem, uma DSL interna está limitada pela sintaxe da linguagem hospedeira. Uma DSL externa e uma linguagem gerada para ser processada por um <i>parser</i> e interpretada ou compilada para um formato executável.<b></b></span></p>
<p class="MsoNormal" style="margin-left:18pt;"><b><span style="font-size:10pt;font-family:Arial;"></span></b></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Existem vantagens e desvantagens nas duas estratégias. Se você<span>  </span>utiliza uma DSL Interna não precisa criar um parser, compilador ou interpretador: usa os da linguagem hospedeira, o que facilita muito as coisas.<span>  </span>Por outro lado, com esta estratégia você perde a liberdade de sintaxe: sua DSL tem que ter uma sintaxe compatível com a linguagem hospedeira. Considere por exemplo o JMock, um framework de mock objects em Java. Apesar do JMock lidar com conceitos bem diferentes de Java o código que você escreve utilizando sua DSL ainda deve ser compilável pelo compilador Java.</span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Da mesma forma, se você utiliza uma DSL externa vai precisar escrever algum programa que leia e interprete essa linguagem. Ainda que ferramentas como o ANTLR tornem este processo bem simples o trabalho ainda existe e é considerável. A vantagem é que sua linguagem pode ser definida na sintaxe que você quiser já que quem escreve o parser é você.</span></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;"></span></b></p>
<p class="MsoNormal" style="margin-left:18pt;"><b><span style="font-size:10pt;font-family:Arial;"></span></b></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;">lqueiroz: Um esforço considerável é exigido quando se pretende criar uma Textual DSL decente. Talvez por isso é mais freqüente a adaptação de uma linguagem (como: Ruby, Java ou C#) usando-a como base para emular as características de uma DSL. Os casos de uso dessas adaptações, em geral, limitam-se a facilitar a configuração de um framework ou subsistema (o que é conhecido também por <i>configuration code</i>). Este é a único contexto onde uma <i>language adaptation</i> se encaixa?<br />
</span></b><b><span style="font-size:10pt;font-family:Arial;"></span></b></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;">pcalcado</span></b><span style="font-size:10pt;font-family:Arial;">: Você adapta uma linguagem para diversas coisas. Uma delas é criar uma DSL interna, neste caso você apenas usa a linguagem como base para criar outra, você não está preocupado em obedecer a convenções ou manter conceitos. Por exemplo você pode criar uma DSL procedural utilizando como base uma linguagem orientada a objetos.</span></p>
<p class="MsoNormal" style="margin-left:18pt;"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Outra maneira é quando você não está interessado em criar uma outra linguagem, apenas em torna-la mais eficiente e/ou legível em um certo contexto. Um bom exemplo é Criteria API no Hibernate. Essa API usa um estilo chamado <i>method chaining</i>, algo que é comum em outras linguagens mas não faz parte do estilo que usamos em Java. Seria possível utilizar o estilo de Java mas com a adaptação os usuários da linguagem –nós- podem descrever em uma linha o que necessitaria de uma dezena se seguíssemos o estilo normal. Ainda assim ao utilizar Criteria API estamos preocupados em usar corretamente os conceitos da linguagem Java como objetos, classes e métodos.</span></p>
<p class="MsoNormal" style="margin-left:18pt;"><span style="font-size:10pt;font-family:Arial;"><span> </span><b></b></span></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;">lqueiroz: Tem sido comum ver exemplos de <i>Fluent Interfaces </i>que servem apenas para tornar o código mais legível. Esta legibilidade é uma conseqüência ou é o principal intento desta técnica?</span></b></p>
<p class="MsoNormal" style="margin-left:18pt;"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;">pcalcado</span></b><span style="font-size:10pt;font-family:Arial;">: Eu considero o termo Fluent Interface algo bem confuso.<span>  </span>Segundo um de seus autores e principal evangelista, Martin Fowler, Fluent Interfaces são basicamente sinônimos de DSLs internas. Eu não consigo aceitar muito bem essa definição e usava o termo para algo diferente. Como lutar contra o autor não é algo muito inteligente devo passar a chamar minha visão sobre Fluent Interfaces –adaptações feitas na linguagem apenas para torna-la mais legível/eficiente- de outra coisa. Na verdade estou em busca de um nome.</span></p>
<p class="MsoNormal" style="margin-left:18pt;"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Falando sobre legibilidade e DSLs, não existe uma reação real direta. Uma DSL não precisa ser parecida com linguagem natural ou mesmo sem algo facilmente legível. Mesmo quando a DSL é entendida pelos especialistas no domínio isso não quer dizer que será legível para todos.</span></p>
<p class="MsoNormal" style="margin-left:18pt;"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Claro que o ideal é termos o máximo de legibilidade sempre mas isso não é necessariamente uma obrigação nas DSLs.</span></p>
<p class="MsoNormal" style="margin-left:18pt;"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;">lqueiroz: Uma DSL pode ser utilizada para abstrair as regras de negócio de uma linguagem específica através de metadados, interpretadores<i> </i>e geração de algum tipo de artefato. Qual o seu sentimento sobre essa abordagem?<br />
</span></b></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;">pcalcado</span></b><span style="font-size:10pt;font-family:Arial;">: Esta abordagem é difundida pela Microsoft sob o nome de Software Factories, alem de alguns outros fornecedores com produtos mais antigos nessa linha. Eu considero a idéia que motiva tudo muito boa, mas não creio que esteja pronta para ser vendida como um produto de prateleira. As técnicas de transformação automatizada de modelo, como DSL Tools e MDA, ainda precisam passar por alguns passos importantes para que entendamos quando e como utiliza-las.</span></p>
<p class="MsoNormal" style="margin-left:18pt;"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;">lqueiroz: As ferramentas de MDA que usam diagramas UML (ou de outro tipo que contenha notações que descrevam os comportamentos dos objetos) podem ser consideradas Graphical DSLs Tools?</span></b></p>
<p class="MsoNormal" style="margin-left:18pt;"><b><span style="font-size:10pt;font-family:Arial;"></span></b></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;">pcalcado</span></b><span style="font-size:10pt;font-family:Arial;">: Sim e não. Ferramentas de MDA em si trabalham com metamodelos em UML, uma GPL, por isso não são usuárias da técnica de DSLs. Entretanto -sem cair na polêmica sobre se UML serve para fazer este tipo de coisa- alguns fornecedores de MDA juram que você pode colocar uma DSL no topo da UML ou até como seu substituto. Eu nunca vi isso acontecer, nem em pratica nem em teoria, então não posso falar muito sobre este assunto.<br />
</span></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;">lqueiroz: Existem diversas ferramentas que implementam DSLs gráficas como alternativa (às vezes a única forma) a uma declaração textual. A diferença básica entre as duas formas, textual e gráfica, é a forma como os conceitos do domínio são mapeados – utilizando wrappers/idiomas ou elementos visuais. Você concorda que o escopo dessas DSLs gráficas está sendo limitado ao uso em IDEs?</span></b></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;"></span></b></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;">pcalcado</span></b><span style="font-size:10pt;font-family:Arial;">: Uma DSL não tem obrigação de ser abrangente ou de não estar vinculada a uma ferramenta. O fato da IDE XYZ definir sua própria linguagem gráfica não é um problema do ponto de vista de engenharia de DSLs. Pode ser um problema para quem for comprar a ferramenta e ficar preso a ela mas de engenharia não é.</span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">O problema que estas ferramentas geralmente trazem é que elas, como descreve Joel Spolsky, possuem abstrações com muitos vazamentos. Você não consegue se livrar completamente do código em função de um assistente gráfico, sempre vai precisar editar texto. Quando se está ciente disso e a ferramenta é utilizada apenas para produtividade os benefícios podem ser maiores que os problemas, mas geralmente essas coisas são vendidas como “a ferramenta que vai substituir todo o seu time de programadores e vai acabar com a escrita de linhas de código” e aí muitas empresas perdem dinheiro e muitos projetos falham. </span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;">lqueiroz: Além do Fragmental.tw quais as outras fontes de informação sobre o tema você recomendaria?</span></b></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;"></span></b></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;">pcalcado</span></b><span style="font-size:10pt;font-family:Arial;">: Existem algumas fontes excelentes mas são poucas. Martin Fowler está publicando um livro sobre o assunto e disponibiliza seu <a href="http://martinfowler.com/dslwip/" target="_blank">rascunho gratuitamente</a>. Eu tenho pontos de discordância com o Fowler mas ainda considero a referência mais atual. Existem dezenas de papers na internet publicados desde os anos 70 sobre o assunto, a maioria trabalha questões muito relevantes ainda hoje. Para encontrar outras fontes eu criei alguns filtros no Google para me avisar todas as vezes que algo com o termo DSL é indexado, tem sido bastante útil. Algumas leituras sobre Lisp e Scheme são fundamentais porque muitos textos descrevem os conceitos usando essas linguagens.</span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">No geral para um conceito que ainda está sendo estudado o melhor é escrever bastante, brincar com DSLs que não fazem nada ou até mesmo que são úteis, e ler como as DSLs atuais são implementadas.</span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Phillip, muito obrigado pela participação e pelos esclarecimentos. Até o próximo post.</span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;">Referências:</span></b></p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;"></span></b></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;"><a href="http://fragmental.tw/" target="_blank">Fragmental.tw</a></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;"><a href="http://www.fragmental.com.br/" target="_blank">Fragmental.com.br</a></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;"><a href="http://www.martinfowler.com/" target="_blank">Martin Fowler</a></span></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/laercioqueiroz.wordpress.com/13/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/laercioqueiroz.wordpress.com/13/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/laercioqueiroz.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/laercioqueiroz.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/laercioqueiroz.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/laercioqueiroz.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/laercioqueiroz.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/laercioqueiroz.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/laercioqueiroz.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/laercioqueiroz.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/laercioqueiroz.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/laercioqueiroz.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/laercioqueiroz.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/laercioqueiroz.wordpress.com/13/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/laercioqueiroz.wordpress.com/13/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/laercioqueiroz.wordpress.com/13/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=laercioqueiroz.wordpress.com&amp;blog=634405&amp;post=13&amp;subd=laercioqueiroz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://laercioqueiroz.wordpress.com/2008/01/28/entrevista-sobre-domain-specific-languages-com-phillip-calcado/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19a956425a4f96c9b339ddf09f1f8c9c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">laercioqueiroz</media:title>
		</media:content>
	</item>
		<item>
		<title>Evite o uso excessivo de DataSets</title>
		<link>http://laercioqueiroz.wordpress.com/2008/01/16/evitando-o-uso-excessivo-de-datasets/</link>
		<comments>http://laercioqueiroz.wordpress.com/2008/01/16/evitando-o-uso-excessivo-de-datasets/#comments</comments>
		<pubDate>Wed, 16 Jan 2008 04:14:07 +0000</pubDate>
		<dc:creator>Laércio Queiroz</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Arquitetura de Software]]></category>
		<category><![CDATA[Desenvolvimento de Software]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[DataSet]]></category>

		<guid isPermaLink="false">http://laercioqueiroz.wordpress.com/2008/01/16/evitando-o-uso-excessivo-de-datasets/</guid>
		<description><![CDATA[Nos últimos meses tenho tido a oportunidade de participar de alguns projetos com a plataforma .NET de forma mais intensa. O que me chamou atenção quando observei o design de algumas dessas soluções foi o uso exagerado de DataSets, o que incide em diversos problemas que comprometem tanto a performance quanto a flexibilidade. Antes de [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=laercioqueiroz.wordpress.com&amp;blog=634405&amp;post=12&amp;subd=laercioqueiroz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="font-size:10pt;font-family:Arial;">Nos últimos meses tenho tido a oportunidade de participar de alguns projetos com a plataforma .NET de forma mais intensa. O que me chamou atenção quando observei o design de algumas dessas soluções foi o uso exagerado de DataSets, o que incide em diversos problemas que comprometem tanto a performance quanto a flexibilidade.</span><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p><span style="font-size:10pt;font-family:Arial;"></span><span style="font-size:10pt;font-family:Arial;">Antes de qualquer coisa, é importante admitir que o DataSet é um mecanismo de manipulação de dados com diversas funcionalidades e que ocupa um importante papel dentro do ADO.NET. Porém, devemos analisar com cautela os casos onde devemos utilizá-lo.</span><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p><span style="font-size:10pt;font-family:Arial;"></span><span style="font-size:10pt;font-family:Arial;">Usar um DataSet em <u>todas</u> as situações onde você precisa manter algo em memória não é, nem de longe, uma boa prática. Se você pretende desenvolver uma aplicação OO, separando de forma coerente as suas camadas, dificilmente terá um DataSet em outra camada que não seja a responsável pela persistência. </span><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p><span style="font-size:10pt;font-family:Arial;"></span><span style="font-size:10pt;font-family:Arial;">Lembre-se de que o DataSet é, em última análise, um conjunto de dados desconectado. Uma cópia em memória das principais características da fonte de dados. Dessa forma, manipular os registros de um DataSet ao invés de objetos de negócio no cliente tem um forte <b>sabor procedural </b>e uma tendência à <b>repetição de código</b>. É altamente considerável evitar isto!</span><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p><span style="font-size:10pt;font-family:Arial;"></span><span style="font-size:10pt;font-family:Arial;">Desempenho. Você já parou para pensar que na maioria dos casos você não precisaria de um DataSet? O fato de o DataReader ser um cursor </span><i><span style="font-size:10pt;font-family:Arial;">forward-only</span></i><i><span style="font-size:10pt;font-family:Arial;"> </span></i><span style="font-size:10pt;font-family:Arial;">(não mantendo os registros em memória) o torna mais performático que o DataSet. Levando-se em consideração que numa aplicação OO, de uma forma geral, você apenas usa o DataSet para recuperar o estado dos seus objetos, substituí-lo por um DataReader aumentará consideravelmente a performance da aplicação.</span><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p><span style="font-size:10pt;font-family:Arial;"></span><span style="font-size:10pt;font-family:Arial;">Estes e outros motivos nos mostram mais um caso de utilização equivocada de um recurso. O problema não é o DataSet (muito pelo contrário), mas sim o desconhecimento ou uma interpretação errada das motivações e intenções do componente. Enfim, aí estão minhas considerações pessoais sobre o uso de DataSet em aplicações ASP.NET. Veja as referências abaixo e tire suas próprias conclusões!</span><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p><span style="font-size:10pt;font-family:Arial;"></span><span style="font-size:10pt;font-family:Arial;"><b>Referências</b></span></p>
<p><span style="font-size:10pt;font-family:Arial;"></span><span style="font-size:10pt;font-family:Arial;"><a href="http://aspnet.4guysfromrolla.com/articles/050405-1.aspx" target="_blank">http://aspnet.4guysfromrolla.com/articles/050405-1.aspx</a></span><span style="font-size:10pt;font-family:Arial;"><br />
<a href="http://www.simple-talk.com/dotnet/.net-framework/should-you-use-ado.net-datareader-or-dataset/" target="_blank">http://www.simple-talk.com/dotnet/.net-framework/should-you-use-ado.net-datareader-or-dataset/</a></span></p>
<p><font face="Times New Roman"></font></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/laercioqueiroz.wordpress.com/12/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/laercioqueiroz.wordpress.com/12/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/laercioqueiroz.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/laercioqueiroz.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/laercioqueiroz.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/laercioqueiroz.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/laercioqueiroz.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/laercioqueiroz.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/laercioqueiroz.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/laercioqueiroz.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/laercioqueiroz.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/laercioqueiroz.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/laercioqueiroz.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/laercioqueiroz.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/laercioqueiroz.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/laercioqueiroz.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=laercioqueiroz.wordpress.com&amp;blog=634405&amp;post=12&amp;subd=laercioqueiroz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://laercioqueiroz.wordpress.com/2008/01/16/evitando-o-uso-excessivo-de-datasets/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19a956425a4f96c9b339ddf09f1f8c9c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">laercioqueiroz</media:title>
		</media:content>
	</item>
		<item>
		<title>Continuous Integration Environment com o SAP NWDI</title>
		<link>http://laercioqueiroz.wordpress.com/2008/01/11/continuous-integration-environment-com-o-sap-nwdi/</link>
		<comments>http://laercioqueiroz.wordpress.com/2008/01/11/continuous-integration-environment-com-o-sap-nwdi/#comments</comments>
		<pubDate>Fri, 11 Jan 2008 14:19:48 +0000</pubDate>
		<dc:creator>Laércio Queiroz</dc:creator>
				<category><![CDATA[Certificação]]></category>
		<category><![CDATA[Desenvolvimento de Software]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[SAP NetWeaver]]></category>
		<category><![CDATA[Continuous Integration]]></category>
		<category><![CDATA[NetWeaver]]></category>
		<category><![CDATA[NWDI]]></category>
		<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://laercioqueiroz.wordpress.com/2008/01/11/continuous-integration-environment-com-o-sap-nwdi/</guid>
		<description><![CDATA[Após o post “Dicas para Certificação SAP Netweaver focus Java” tenho recebido diversos e-mails com questionamentos sobre os tópicos do exame e vou procurar responder as perguntas mais reincidentes com posts. Dentre os tópicos mais discutidos nos e-mails está o Netweaver Development Infrastructure. A minha indicação é estudar o NWDI como um Continuous Integration Environment [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=laercioqueiroz.wordpress.com&amp;blog=634405&amp;post=10&amp;subd=laercioqueiroz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="font-size:10pt;font-family:Arial;">Após o post “</span><span style="font-size:10pt;font-family:Arial;"><a href="http://laercioqueiroz.wordpress.com/2007/12/22/dicas-para-certificacao-sap-netweaver-focus-java/">Dicas para Certificação SAP Netweaver focus Java</a>” tenho recebido diversos e-mails com questionamentos sobre os tópicos do <a href="https://websmp101.sap-ag.de/%7Esapidp/011000358700003595742004E">exame</a> e vou procurar responder as perguntas mais reincidentes com posts. Dentre os tópicos mais discutidos nos e-mails está o Netweaver Development Infrastructure. A minha indicação é </span><span style="font-size:10pt;font-family:Arial;">estudar o NWDI como um Continuous Integration Environment e reconhecer como seus componentes se encaixam nos requisitos desta estratégia de desenvolvimento. </span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Mas o que é Continuous Integration? Continuous Integration (Integração Contínua)<b> </b>é um conjunto de práticas que visam diminuir os riscos de integração durante o processo de desenvolvimento de um software em equipe. Adotando-se estas práticas conseguimos evitar (ou pelo menos diminuir a incidência de) diversos problemas comuns durante a produção de um software.</span></p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">CI é uma técnica de desenvolvimento clara e objetiva – faça corretamente os procedimentos e dificilmente você terá problemas de integração – e suas principais características são tão óbvias que certamente já devemos tê-las incorporadas em nosso cotidiano. O ponto chave da integração contínua é resolver os possíveis problemas de uma porção de código assim que eles ocorram. Para atingirmos este objetivo devemos seguir uma série de procedimentos, tais como: manter um repositório central, commits freqüentes (no mínimo todos os dias), builds e testes constantes, e uma máquina de integração.</span></p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Manter um ambiente de integração contínua manualmente lhe exigirá, na maioria dos casos, um esforço considerável. Contudo, para evitarmos ter de executar uma série de passos a cada commit, podemos automatizar essas tarefas usando um Continuous Integration Server.</span></p>
<p class="MsoNormal">&nbsp;</p>
<p class="MsoBodyText">Em geral, após configurar seu projeto num CI Server, o mesmo será responsável pela execução de boa parte das etapas do processo de build de forma assíncrona e reportará o resultado do build ao desenvolvedor.</p>
<p style="margin:0 0 0.0001pt;"><b><span style="font-size:10pt;font-family:Arial;"> </span></b></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Assim como no ABAP a SAP disponibiliza uma infra-estrutura de apoio ao desenvolvimento de software para a plataforma Java. Esta infra-estrutura é composta de:</span></p>
<p style="text-indent:-18pt;margin:0 0 0.0001pt 36pt;"><span style="font-size:10pt;font-family:Arial;"><span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;">          </span></span><span style="font-size:10pt;font-family:Arial;">-</span><span style="font-size:7pt;font-family:'Times New Roman';">          </span><span style="font-size:10pt;font-family:Arial;">Uma IDE – Windows, menus e uma perspectiva no NetWeaver Developer Studio;</span></p>
<p style="text-indent:-18pt;margin:0 0 0.0001pt 36pt;"><span style="font-size:10pt;font-family:Arial;"><span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;">          </span></span><span style="font-size:10pt;font-family:Arial;">-</span><span style="font-size:7pt;font-family:'Times New Roman';">          </span><span style="font-size:10pt;font-family:Arial;">Um repositório central – com o DTR,<i> Design Time Repository</i>;</span></p>
<p style="text-indent:-18pt;margin:0 0 0.0001pt 36pt;"><span style="font-size:10pt;font-family:Arial;"><span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;">          </span></span><span style="font-size:10pt;font-family:Arial;">-</span><span style="font-size:7pt;font-family:'Times New Roman';">          </span><span style="font-size:10pt;font-family:Arial;">Builds automatizados – com o CBS, <i>Component Build Service</i>;</span></p>
<p style="text-indent:-18pt;margin:0 0 0.0001pt 36pt;"><span style="font-size:10pt;font-family:Arial;"><span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;">          </span></span><span style="font-size:10pt;font-family:Arial;">-</span><span style="font-size:7pt;font-family:'Times New Roman';">          </span><span style="font-size:10pt;font-family:Arial;">Definição de um fluxo de concepção de um componente – desenvolvimento, integração, quality assurance e deploy – com o CMS, <i>Change Management Service</i>;</span></p>
<p style="text-indent:-18pt;margin:0 0 0.0001pt 36pt;"><span style="font-size:10pt;font-family:Arial;"><span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;">          </span></span><span style="font-size:10pt;font-family:Arial;">-</span><span style="font-size:7pt;font-family:'Times New Roman';">          </span><span style="font-size:10pt;font-family:Arial;">Ferramentas para deploy – SDM, <i>Software Deployment Manager</i>.</span></p>
<p style="text-indent:-18pt;margin:0 0 0.0001pt 36pt;"><span style="font-size:10pt;font-family:Arial;"><span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;">          </span></span><span style="font-size:10pt;font-family:Arial;">-</span><span style="font-size:7pt;font-family:'Times New Roman';">          </span><span style="font-size:10pt;font-family:Arial;">Um diretório central de informações sobre os softwares, componentes, serviço de namespace e etc.</span></p>
<p style="text-indent:-18pt;margin:0 0 0.0001pt 36pt;"><span style="font-size:10pt;font-family:Arial;"><span style="font-family:'Times New Roman';font-style:normal;font-variant:normal;font-weight:normal;font-size:7pt;line-height:normal;">          </span></span><span style="font-size:10pt;font-family:Arial;">-</span><span style="font-size:7pt;font-family:'Times New Roman';">          </span><span style="font-size:10pt;font-family:Arial;">Um modelo de componentes que proporcionam maior coesão, dependências declarativas, relacionamentos unidirecionais e agilidade no desenvolvimento/manutenção dos elementos do software.</span></p>
<p style="margin:0 0 0.0001pt 18pt;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p style="margin:0 0 0.0001pt;"><span style="font-size:10pt;font-family:Arial;">Conforme descrito acima o SAP NWDI compreende a maioria dos requisitos de um Continuous Integration Server e pode também ser utilizado para o desenvolvimento de <b>soluções sem componentes específicos SAP</b>. </span></p>
<p style="margin:0 0 0.0001pt;"><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p style="margin:0 0 0.0001pt;"><span style="font-size:10pt;font-family:Arial;">IMHO, se você nunca trabalhou com um servidor de integração, poderá absorver melhor o assunto estudando as práticas da integração contínua e depois como os componentes do NWDI trabalham juntos em cada etapa e nos diferentes cenários do desenvolvimento em equipe (nesta ordem).</span></p>
<p style="margin:0 0 0.0001pt;">&nbsp;</p>
<p class="MsoNormal"><b><span style="font-size:10pt;font-family:Arial;">Referências:<br />
</span></b><span style="font-size:10pt;font-family:Arial;">SDN NWDI</span><span>: </span><a href="https://www.sdn.sap.com/irj/sdn/wiki?path=/display/Java/NetWeaver%2bDevelopment%2bInfrastructure%2b%28NWDI"><span style="font-size:10pt;font-family:Arial;">https://www.sdn.sap.com/irj/sdn/wiki?path=/display/Java/NetWeaver%2bDevelopment%2bInfrastructure%2b(NWDI</span></a><span>)<br />
</span><span style="font-size:10pt;font-family:Arial;">Integration Unit testing on SAP Web AS (Java): <a href="https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/9ef1967a-0901-0010-6c86-ed2251898764">https://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/9ef1967a-0901-0010-6c86-ed2251898764</a></span></p>
<p class="MsoNormal"><span><br />
</span><span style="font-size:10pt;font-family:Arial;">Para maiores informações sobre integração contínua recomendo a leitura destes textos:<br />
Martin Fowler: <a href="http://www.martinfowler.com/articles/continuousIntegration.html"><span>http://www.martinfowler.com/articles/continuousIntegration.html</span></a>.<br />
</span><span style="font-size:10pt;font-family:Arial;">Wikipedia: </span><span style="font-size:10pt;font-family:Arial;"><a href="http://en.wikipedia.org/wiki/Continuous_integration"><span>http://en.wikipedia.org/wiki/Continuous_integration</span></a></span><span style="font-size:10pt;font-family:Arial;"><br />
Continuous Integration Server Matrix: <a href="http://damagecontrol.codehaus.org/Continuous+Integration+Server+Feature+Matrix"><span>http://damagecontrol.codehaus.org/Continuous+Integration+Server+Feature+Matrix</span></a><b></b></span></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/laercioqueiroz.wordpress.com/10/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/laercioqueiroz.wordpress.com/10/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/laercioqueiroz.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/laercioqueiroz.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/laercioqueiroz.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/laercioqueiroz.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/laercioqueiroz.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/laercioqueiroz.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/laercioqueiroz.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/laercioqueiroz.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/laercioqueiroz.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/laercioqueiroz.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/laercioqueiroz.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/laercioqueiroz.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/laercioqueiroz.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/laercioqueiroz.wordpress.com/10/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=laercioqueiroz.wordpress.com&amp;blog=634405&amp;post=10&amp;subd=laercioqueiroz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://laercioqueiroz.wordpress.com/2008/01/11/continuous-integration-environment-com-o-sap-nwdi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19a956425a4f96c9b339ddf09f1f8c9c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">laercioqueiroz</media:title>
		</media:content>
	</item>
		<item>
		<title>ASP.NET MVC Framework</title>
		<link>http://laercioqueiroz.wordpress.com/2008/01/03/aspnet-mvc-framework/</link>
		<comments>http://laercioqueiroz.wordpress.com/2008/01/03/aspnet-mvc-framework/#comments</comments>
		<pubDate>Thu, 03 Jan 2008 13:50:43 +0000</pubDate>
		<dc:creator>Laércio Queiroz</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Arquitetura de Software]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[dotnet]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://laercioqueiroz.wordpress.com/2008/01/03/aspnet-mvc-framework/</guid>
		<description><![CDATA[Após a liberação da primeira versão do ASP.NET MVC Framework, mesmo com pouquíssimo tempo livre, não pude deixar de conferir a novidade e procurei mais informações sobre o projeto, curioso para saber quais seriam as mudanças feitas pela Microsoft neste framework MVC e torcendo que não fosse um “NStruts” (comparação às versões do Struts 1.x). [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=laercioqueiroz.wordpress.com&amp;blog=634405&amp;post=9&amp;subd=laercioqueiroz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;color:black;">Após a liberação da primeira versão do <a href="http://www.asp.net/downloads/3.5-extensions/" target="_blank">ASP.NET MVC Framework</a>, mesmo com pouquíssimo tempo livre, não pude deixar de conferir a novidade e procurei mais informações sobre o projeto, curioso para saber quais seriam as mudanças feitas pela Microsoft neste framework MVC e torcendo que não fosse um “NStruts” (comparação às versões do Struts 1.x).</span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;color:black;">Certamente algumas perguntas ficam no ar&#8230; coisas do tipo:</span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;color:black;">Não é possível implementar o padrão <i>Model-View-Controller</i> na arquitetura WebForms?</span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;color:black;">Sim, é possível. O MVC nos diz como as camadas de uma aplicação ou componente devem interagir, visando à coesão e o baixo acoplamento, mantendo clara a separação dos interesses dos objetos de cada camada. Sendo assim, usar o modelo WebForms – ASPX, CS (CodeBehind), Model &#8211; mesmo com algumas limitações características do <i>event-driven</i>, pode ser considerada uma implementação válida do padrão. </span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;color:black;"></span><span style="font-size:10pt;font-family:Arial;"> Já que é possível trabalhar com MVC na forma atual, porque desenvolver um framework MVC para ASP.NET?</span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;color:black;">Essa é uma questão chave. Com WebForms, podemos retirar a dependência entre visualização e o modelo de forma satisfatória. Contudo, quando analisamos a relação entre o controlador e a visualização podemos constatar que não existe uma independência entre os dois acarretando numa série de problemas como por exemplo: Efetuar testes unitários nos seus controladores;<br />
Controladores dependentes de visualização, uma relação de um-para-um, e principalmente do ambiente de execução &#8211; Um controlador pode ser aproveitado em diferentes ambientes como: Web e Desktop.  </span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;color:black;">Alguns frameworks MVC <b>decentes</b> para Java já resolvem boa parte destes problemas de forma bastante elegante como o WebWork, (Struts 2?) e o brasileiro VRaptor.  </span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;color:black;"></span><span style="font-size:10pt;font-family:Arial;">Então, as principais vantagens que vejo nesta iniciativa da Microsoft (mesmo sem ter usado o framework ainda) são: </span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Controladores independentes de visualização e até mesmo de ambiente de execução (usando-se um container de <u>injeção de dependências,</u> como: <a href="http://kohari.org/projects/ninject/">Ninject</a> e o <a href="http://structuremap.sourceforge.net/Default.htm">StructureMap</a>); </span><span style="font-size:10pt;font-family:Arial;"></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Habilita o desenvolvedor a escrever testes unitários para seus controladores substituindo facilmente as dependências de uma visualização ou quaisquer outros objetos com stubs (TDD, <a href="http://en.wikipedia.org/wiki/Test-driven_development"><i>Test-Driven Development</i></a>); </span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;"></span><span style="font-size:10pt;font-family:Arial;">Profissionais acostumados com desenvolver com uma estrutura semelhante em outras plataformas se sentirão mais à vontade para utilizar o ASP.NET MVC.</span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;color:black;"></span></p>
<p>  <span style="font-size:10pt;font-family:Arial;">Agora temos de usar, acompanhar a sua evolução e a resposta da comunidade .NET. </span></p>
<p><span style="font-size:10pt;font-family:Arial;">Referências:<br />
</span></p>
<p class="MsoNormal">&nbsp;</p>
<p><span style="font-size:10pt;font-family:Arial;"></span><span style="font-family:Arial;"> </span>  <span style="font-size:10pt;font-family:Arial;">ASP.NET – </span><span style="font-size:10pt;font-family:Arial;"><a href="http://www.asp.net"><span>www.asp.net</span></a><br />
</span>  <span style="font-size:10pt;font-family:Arial;color:black;">ScottGu&#8217;s Blog</span><span style="font-size:10pt;font-family:Arial;"> &#8211; <a href="http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx">http://weblogs.asp.net/scottgu/archive/2007/10/14/asp-net-mvc-framework.aspx</a></span></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/laercioqueiroz.wordpress.com/9/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/laercioqueiroz.wordpress.com/9/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/laercioqueiroz.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/laercioqueiroz.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/laercioqueiroz.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/laercioqueiroz.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/laercioqueiroz.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/laercioqueiroz.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/laercioqueiroz.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/laercioqueiroz.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/laercioqueiroz.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/laercioqueiroz.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/laercioqueiroz.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/laercioqueiroz.wordpress.com/9/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/laercioqueiroz.wordpress.com/9/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/laercioqueiroz.wordpress.com/9/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=laercioqueiroz.wordpress.com&amp;blog=634405&amp;post=9&amp;subd=laercioqueiroz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://laercioqueiroz.wordpress.com/2008/01/03/aspnet-mvc-framework/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19a956425a4f96c9b339ddf09f1f8c9c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">laercioqueiroz</media:title>
		</media:content>
	</item>
		<item>
		<title>Dicas para Certificação SAP Netweaver focus Java</title>
		<link>http://laercioqueiroz.wordpress.com/2007/12/22/dicas-para-certificacao-sap-netweaver-focus-java/</link>
		<comments>http://laercioqueiroz.wordpress.com/2007/12/22/dicas-para-certificacao-sap-netweaver-focus-java/#comments</comments>
		<pubDate>Sat, 22 Dec 2007 23:33:49 +0000</pubDate>
		<dc:creator>Laércio Queiroz</dc:creator>
				<category><![CDATA[Certificação]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[SAP NetWeaver]]></category>
		<category><![CDATA[NetWeaver]]></category>
		<category><![CDATA[SAP]]></category>

		<guid isPermaLink="false">http://laercioqueiroz.wordpress.com/2007/12/22/dicas-para-certificacao-sap-netweaver-focus-java/</guid>
		<description><![CDATA[Semana difícil,&#8230; intervalo grande desde o último post. Contudo, tenho o intuito de manter este espaço com conteúdos bacanas e úteis (!), e prepará-los ou simplesmente escreve-los leva tempo! (tempo que nos falta às vezes ) Vamos ao que interessa! Depois de ter participado do T3 (train the trainer) de SAP NetWeaver em Recife este [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=laercioqueiroz.wordpress.com&amp;blog=634405&amp;post=8&amp;subd=laercioqueiroz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><!--  /* Font Definitions */ @font-face 	{font-family:Wingdings; 	panose-1:5 0 0 0 0 0 0 0 0 0; 	mso-font-charset:2; 	mso-generic-font-family:auto; 	mso-font-pitch:variable; 	mso-font-signature:0 268435456 0 0 -2147483648 0;} @font-face 	{font-family:"Arial Unicode MS"; 	panose-1:2 11 6 4 2 2 2 2 2 4; 	mso-font-charset:128; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-1 -369098753 63 0 4129023 0;} @font-face 	{font-family:"\@Arial Unicode MS"; 	panose-1:2 11 6 4 2 2 2 2 2 4; 	mso-font-charset:128; 	mso-generic-font-family:swiss; 	mso-font-pitch:variable; 	mso-font-signature:-1 -369098753 63 0 4129023 0;}  /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal 	{mso-style-parent:""; 	margin:0cm; 	margin-bottom:.0001pt; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Times New Roman"; 	mso-fareast-font-family:"Times New Roman";} a:link, span.MsoHyperlink 	{color:blue; 	text-decoration:underline; 	text-underline:single;} a:visited, span.MsoHyperlinkFollowed 	{color:purple; 	text-decoration:underline; 	text-underline:single;} p 	{margin-right:0cm; 	mso-margin-top-alt:auto; 	mso-margin-bottom-alt:auto; 	margin-left:0cm; 	mso-pagination:widow-orphan; 	font-size:12.0pt; 	font-family:"Arial Unicode MS";} @page Section1 	{size:612.0pt 792.0pt; 	margin:72.0pt 90.0pt 72.0pt 90.0pt; 	mso-header-margin:36.0pt; 	mso-footer-margin:36.0pt; 	mso-paper-source:0;} div.Section1 	{page:Section1;}  /* List Definitions */ @list l0 	{mso-list-id:199980490; 	mso-list-type:hybrid; 	mso-list-template-ids:935113012 -1938888036 522227098 -606562044 -1407054634 -515988678 1445886008 1806358450 1294116658 -1315782828;} @list l0:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:36.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	mso-ansi-font-size:10.0pt; 	font-family:Symbol;} @list l1 	{mso-list-id:669873926; 	mso-list-type:hybrid; 	mso-list-template-ids:200981024 -143346716 -642102342 -2125671844 -1560920084 -1254042206 758028338 1247079158 1836115976 896321484;} @list l1:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:36.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	mso-ansi-font-size:10.0pt; 	font-family:Symbol;} @list l2 	{mso-list-id:863253953; 	mso-list-type:hybrid; 	mso-list-template-ids:-1332819340 1409732660 96003392 -2137474106 312623828 1050738086 -2063989418 134917926 -1154585928 -1995167756;} @list l2:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:36.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	mso-ansi-font-size:10.0pt; 	font-family:Symbol;} @list l3 	{mso-list-id:1252660189; 	mso-list-type:hybrid; 	mso-list-template-ids:1661124068 1398715304 -991784370 909272002 1944586468 -1896809206 -287410378 -482986586 1940954488 -1945442304;} @list l3:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:36.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	mso-ansi-font-size:10.0pt; 	font-family:Symbol;} @list l4 	{mso-list-id:1932349060; 	mso-list-type:hybrid; 	mso-list-template-ids:-636088848 60602356 2034005750 981362984 -1586440518 954217142 -525020088 1216242068 27692940 -1954385068;} @list l4:level1 	{mso-level-number-format:bullet; 	mso-level-text:; 	mso-level-tab-stop:36.0pt; 	mso-level-number-position:left; 	text-indent:-18.0pt; 	mso-ansi-font-size:10.0pt; 	font-family:Symbol;} ol 	{margin-bottom:0cm;} ul 	{margin-bottom:0cm;} --><span style="font-size:10pt;font-family:Arial;">Semana difícil,&#8230; intervalo grande desde o último post. Contudo, tenho o intuito de manter este espaço com conteúdos bacanas e úteis (!), e prepará-los ou simplesmente escreve-los leva tempo! (tempo que nos falta às vezes <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) </span><span style="font-family:Arial;"></span><span style="font-size:10pt;font-family:Arial;"></span></p>
<p><span style="font-size:10pt;font-family:Arial;">Vamos ao que interessa! Depois de ter participado do T3 (<i>train the trainer</i>) de SAP NetWeaver em Recife este ano e de ter feito a certificação, gostaria de deixar algumas dicas para quem está se preparando para fazer o <a href="https://websmp101.sap-ag.de/~sapidp/011000358700003595742004E" target="_blank">exame</a>. </span></p>
<p><span style="font-size:10pt;font-family:Arial;">O mais interessante de todo esse processo foi a desmistificação da plataforma SAP e saber que podemos aproveitar nossas experiências JEE com o SAP Netweaver minimizando consideravelmente as dificuldades na aprendizagem. </span><span style="font-family:Arial;"></span></p>
<p><span style="font-size:10pt;font-family:Arial;">Antes de qualquer coisa, é importante afirmar que as principais fontes de informação sobre os tópicos explorados no exame são – adivinha? – os treinamentos e conteúdos disponíveis nos portais SAP. A prova é bastante clara, objetiva e difícil (!), então esteja preparado. Vale observar estas dicas que separei pelos tópicos da prova: </span><span style="font-family:Arial;"> </span></p>
<ul>
<li class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">J2EE</span><span style="font-family:Arial;"></span></li>
</ul>
<p style="margin:0 0 0.0001pt;"><span style="font-size:10pt;font-family:Arial;">Segundo maior tópico em número de perguntas. Nenhuma surpresa, aqui é o bom e velho J2EE que conhecemos. Se você já prestou os exames SCWCD e/ou SCBCD ou tem conhecimentos equivalentes, não sentirá dificuldades. </span></p>
<p style="margin:0 0 0.0001pt;">&nbsp;</p>
<p style="margin:0 0 0.0001pt;"><span style="font-size:10pt;font-family:Arial;">Entretanto uma boa revisada em Servlets/JSPs e EJBs &#8211; principalmente no ciclo de vida e nas interfaces para acesso local, remoto ou ambos &#8211; é essencial e garantir uma boa pontuação neste tópico lhe ajudará a passar na prova. </span><span style="font-family:Arial;"></span></p>
<ul>
<li class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Open Integration</span><span style="font-family:Arial;"></span></li>
</ul>
<p style="margin:0 0 0.0001pt;"><span style="font-size:10pt;font-family:Arial;">Este tópico é um mix de questões sobre temas específicos de tecnologias SAP e temas já conhecidos. A grande sacada em relação a estes temas independentes da SAP é identificar as diferenças de implementação e as nomenclaturas usadas principalmente no SAP NetWeaver Developer Studio. </span></p>
<p style="margin:0 0 0.0001pt;">&nbsp;</p>
<p style="margin:0 0 0.0001pt;"><span style="font-size:10pt;font-family:Arial;">Quanto aos temas mais específicos, procure dar uma atenção especial ao SAP Enterprise Connector (JCo), e a comunicação Java-&gt;R/3 e R/3-&gt;Java. Questões sobre Web Services certamente aparecerão&#8230; </span><span style="font-family:Arial;"></span></p>
<ul>
<li class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">J2EE Persistence</span><span style="font-family:Arial;"></span></li>
</ul>
<p style="margin:0 0 0.0001pt;"><span style="font-size:10pt;font-family:Arial;">Este tópico, em geral, tem o mesmo número de questões que o anterior. Nesta parte da prova um entendimento sobre OpenSQL e operações básicas com SQLJ são suficientes. Os quesitos mais explorados dentro deste tópico foram SQLJ e os Entity Beans. </span><span style="font-family:Arial;"></span></p>
<ul>
<li class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Java Development Infrastructure</span><span style="font-family:Arial;"></span></li>
</ul>
<p style="margin:0 0 0.0001pt;"><span style="font-size:10pt;font-family:Arial;">Chegamos ao primeiro tópico totalmente específico SAP. Porém, não precisa temê-lo. Este tópico aborda um conjunto de procedimentos e tecnologias &#8211; utilizados no “mundo ABAP” e que foram migrados para o “mundo Java” &#8211; que são aplicadas em diversos momentos no ciclo de vida do software. Ex.: <i>modelar</i>, versionar e distribuir os componentes que compõem um produto.</span></p>
<p style="margin:0 0 0.0001pt;">&nbsp;</p>
<p style="margin:0 0 0.0001pt;"><span style="font-size:10pt;font-family:Arial;">Não são temas complicados, muito pelo contrário, só exigem uma vivência em desenvolvimento de software em equipe. Sendo assim, a principal dica para esta parte da prova é decorar as siglas dos componentes (como: DTR, CBS, CMS e etc.) e entender o papel de cada um dentro do NWDI. </span><span style="font-family:Arial;"></span></p>
<ul>
<li class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Web Dynpro</span><span style="font-family:Arial;"></span></li>
</ul>
<p style="margin:0 0 0.0001pt;"><span style="font-size:10pt;font-family:Arial;">Chegamos ao temido Web Dynpro! O maior tópico em número de perguntas. Infelizmente, para esta parte da prova a única dica é estudar bastante, ficar atento às convenções e a estrutra dos componentes Web Dynpro e, se possível, praticar muito! A maioria das questões deste tópico são sobre Dynamic Programming, Hook Methods (callbacks) e os papéis do MVC abordados num componente Web Dynpo. </span><span style="font-family:Arial;"></span></p>
<p style="margin:0 0 0.0001pt;">&nbsp;</p>
<p style="margin:0 0 0.0001pt;"><span style="font-size:10pt;font-family:Arial;">Fiquem atentos também as diferenças entre componentes visuais e não-visuais, e os elementos básicos de todo componente Web Dynpro.</span></p>
<p style="margin:0 0 0.0001pt;">&nbsp;</p>
<p style="margin:0 0 0.0001pt;"><span style="font-size:10pt;font-family:Arial;">Pronto. Estas são as minhas considerações sobre os tópicos do exame. Outra coisa que gostaria de ressaltar é o estilo das respostas. Todas as perguntas têm no mínimo 4 respostas e, diferente do estilo Prometric, o enunciado não informa o número de questões corretas.  Todas as respostas têm dois radiobuttons que indicam True/False. Você precisa informar corretamente True ou False para todas as respostas da pergunta, o que eleva o grau de dificuldade da prova. </span><span style="font-family:Arial;"></span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Espero ter ajudado. Boa sorte a todos!</span></p>
<p class="MsoNormal"><span style="font-size:10pt;font-family:Arial;">Referências:</span><span style="font-family:Arial;"></span></p>
<p><span style="font-size:10pt;font-family:Arial;">Detalhes Exame &#8211; <a href="https://websmp101.sap-ag.de/~sapidp/011000358700003595742004E">https://websmp101.sap-ag.de/~sapidp/011000358700003595742004E</a></span><span style="font-family:Arial;"></span><span style="font-size:10pt;font-family:Arial;"><br />
SDN &#8211; </span><span style="font-size:10pt;font-family:Arial;"><a href="https://www.sdn.sap.com/"><span>https://www.sdn.sap.com/</span></a></span><span style="font-family:Arial;"></span><span style="font-size:10pt;font-family:Arial;"><br />
Help SAP &#8211; </span><span style="font-size:10pt;font-family:Arial;"><a href="http://help.sap.com/"><span>http://help.sap.com/</span></a></span></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/laercioqueiroz.wordpress.com/8/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/laercioqueiroz.wordpress.com/8/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/laercioqueiroz.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/laercioqueiroz.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/laercioqueiroz.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/laercioqueiroz.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/laercioqueiroz.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/laercioqueiroz.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/laercioqueiroz.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/laercioqueiroz.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/laercioqueiroz.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/laercioqueiroz.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/laercioqueiroz.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/laercioqueiroz.wordpress.com/8/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/laercioqueiroz.wordpress.com/8/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/laercioqueiroz.wordpress.com/8/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=laercioqueiroz.wordpress.com&amp;blog=634405&amp;post=8&amp;subd=laercioqueiroz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://laercioqueiroz.wordpress.com/2007/12/22/dicas-para-certificacao-sap-netweaver-focus-java/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19a956425a4f96c9b339ddf09f1f8c9c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">laercioqueiroz</media:title>
		</media:content>
	</item>
		<item>
		<title>Você usa DTO/TO/VO em aplicações não distribuídas ?</title>
		<link>http://laercioqueiroz.wordpress.com/2007/12/10/voce-usa-dtotovo-em-aplicacoes-nao-distribuidas/</link>
		<comments>http://laercioqueiroz.wordpress.com/2007/12/10/voce-usa-dtotovo-em-aplicacoes-nao-distribuidas/#comments</comments>
		<pubDate>Mon, 10 Dec 2007 17:16:54 +0000</pubDate>
		<dc:creator>Laércio Queiroz</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Arquitetura de Software]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[DTO]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[TO]]></category>
		<category><![CDATA[VO]]></category>

		<guid isPermaLink="false">http://laercioqueiroz.wordpress.com/2007/12/10/voce-usa-dtotovo-em-aplicacoes-nao-distribuidas/</guid>
		<description><![CDATA[Esta semana eu estava discutindo com alguns colegas de trabalho, sobre a arquitetura de alguns sistemas J2EE que tínhamos (o desprazer) de manter. Até certo momento estávamos concordando em todos os pontos fracos da abordagem utilizada nestes sistemas. Quando de repente um deles me surpreende com: “Um projeto J2EE bem feito, pra mim, tem que [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=laercioqueiroz.wordpress.com&amp;blog=634405&amp;post=6&amp;subd=laercioqueiroz&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="font-size:10pt;font-family:Arial;"><a href="http://laercioqueiroz.files.wordpress.com/2007/12/comsemtransferobject.png" title="ComSemTransferObject"></a>Esta semana eu estava discutindo com alguns colegas de trabalho, sobre a arquitetura de alguns sistemas J2EE que tínhamos (o desprazer) de manter. Até certo momento estávamos concordando em todos os pontos fracos da abordagem utilizada nestes sistemas. Quando de repente um deles me surpreende com: “Um projeto J2EE bem feito, pra mim, tem que ter no mínimo&#8230;”.</span><span style="font-size:10pt;font-family:Arial;"> </span><span style="font-size:10pt;font-family:Arial;">Começou então a discussão:</span><span style="font-size:10pt;font-family:Arial;"> <span style="font-size:10pt;font-family:Arial;"><a href="http://laercioqueiroz.files.wordpress.com/2007/12/comsemtransferobject.png" title="ComSemTransferObject"></a></span></span></p>
<p><span style="font-size:10pt;font-family:Arial;"></span><b><span style="font-size:10pt;font-family:Arial;">Colega A</span></b><span style="font-size:10pt;font-family:Arial;">: Um projeto J2EE bem feito, para mim, tem que haver no mínimo um Façade, tem que ter DAOs e &#8230; DTOs.</span><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p><span style="font-size:10pt;font-family:Arial;"></span><span style="font-size:10pt;font-family:Arial;"><b><span style="font-size:10pt;font-family:Arial;">Eu</span></b><span style="font-size:10pt;font-family:Arial;">: DTOs? Depende&#8230;</span></span><span style="font-size:10pt;font-family:Arial;"> <span style="font-size:10pt;font-family:Arial;"><a href="http://laercioqueiroz.files.wordpress.com/2007/12/comsemtransferobject.png" title="ComSemTransferObject"></a><a href="http://laercioqueiroz.files.wordpress.com/2007/12/comsemtransferobject.png" title="ComSemTransferObject"></a></span></span></p>
<p><span style="font-size:10pt;font-family:Arial;"></span><span style="font-size:10pt;font-family:Arial;"><b><span style="font-size:10pt;font-family:Arial;">Colega A</span></b><span style="font-size:10pt;font-family:Arial;">: Como assim depende? Um projeto sem DTO?</span></span><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><b><span style="font-size:10pt;font-family:Arial;"> </span></b></span></span></p>
<p><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><b><span style="font-size:10pt;font-family:Arial;">Eu</span></b><span style="font-size:10pt;font-family:Arial;">: Sim, sem DTO! Não há motivo para utilizarmos um DTO (Na verdade falávamos de Transfer Objects) na maioria das aplicações que desenvolvemos.</span></span></span></p>
<p><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"></span></span></span><span style="font-size:10pt;font-family:Arial;"><b><span style="font-size:10pt;font-family:Arial;">Colega B</span></b><span style="font-size:10pt;font-family:Arial;">: Eu devo ou não usar DTOs,&#8230; TOs,&#8230; (arrg!) isso aí que vcs estão falando?<br />
</span></span><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><br />
</span></span><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><b>Colega B</b>: Decidam-se&#8230;</span></span><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p><span style="font-size:10pt;font-family:Arial;"></span><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"></span><span style="font-size:10pt;font-family:Arial;"><b><span style="font-size:10pt;font-family:Arial;">Colega A</span></b><span style="font-size:10pt;font-family:Arial;">:<b> </b>Ele deve ter visto isso em algum lugar e acha que pode escrever uma aplicação J2EE sem usar um DTO. </span><span style="font-size:10pt;font-family:Arial;"> </span><span style="font-size:10pt;font-family:Arial;">Neste momento eu percebi que meu colega não havia gostado muito da idéia de ter seu modelo de arquitetura questionado. Vamos seguindo&#8230;</span><br />
<span style="font-size:10pt;font-family:Arial;"> </span></span></span></p>
<p><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><b><span style="font-size:10pt;font-family:Arial;">Eu</span></b><span style="font-size:10pt;font-family:Arial;">: Alto lá! Eu sei para que servem os Transfer Objects e uma aplicação web onde as camadas residem na mesma JVM (a maioria dos projetos) não é um caso onde devemos implementá-los. </span><span style="font-size:10pt;font-family:Arial;"> </span><span style="font-size:10pt;font-family:Arial;">Acompanhe meu raciocínio: A intenção do padrão Transfer Object é transferir dados entre <b>tiers</b> (e não <b>layers</b>) visando reduzir os custos das chamadas remotas num cenário distribuído. Logo, nossa aplicação não precisa de TOs!</span><br />
</span><span style="font-size:10pt;font-family:Arial;"><b><span style="font-size:10pt;font-family:Arial;"><br />
Colega B</span></b><span style="font-size:10pt;font-family:Arial;">: hmmmm</span><br />
</span><span style="font-size:10pt;font-family:Arial;"><b><span style="font-size:10pt;font-family:Arial;"><br />
Colega A</span></b><span style="font-size:10pt;font-family:Arial;">: Tudo bem, mas então como iremos mapear as entidades do banco? O Hibernate precisa de objetos para serem mapeados&#8230; e aí?</span><span style="font-size:10pt;font-family:Arial;"> </span><span style="font-size:10pt;font-family:Arial;">Cara,&#8230; eu aprendi e sempre trabalhei criando uma classe que é um espelho de uma tabela do banco (TO) e uma classe contendo as regras de negócio, as validações (BO).</span><span style="font-size:10pt;font-family:Arial;"> </span></span></span></p>
<p><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"></span><span style="font-size:10pt;font-family:Arial;"></span><b><span style="font-size:10pt;font-family:Arial;">Eu</span></b><span style="font-size:10pt;font-family:Arial;">: Sim, concordo com você! O Hibernate precisa de <b>objetos</b>, e objetos “de verdade” têm <b>dados + comportamento</b>. Ao criar a dupla ClienteTO + ClienteBO você está dividindo o domínio (objeto) Cliente em duas classes desnecessariamente. Veja a definição de um <a href="http://www.martinfowler.com/bliki/AnemicDomainModel.html" target="_blank" title="Anemic Domain Model">Acemic Domain Model</a> do Matin Fowler. </span><span style="font-size:10pt;font-family:Arial;"> </span></span></span></p>
<p><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"></span><span style="font-size:10pt;font-family:Arial;">Você trabalha com os TO como se fossem registros de uma tabela (um resultSet) as regras de negócio e as validações você escreve no BO (Business Object) e repete onde quer que você precise tratar dados do seu TO. Isso é programação estruturada, não é OOP!</span><span style="font-size:10pt;font-family:Arial;"> </span></span></span><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"></span> </span><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"></span><span style="font-size:10pt;font-family:Arial;">Eu não sei o porquê, mas entendo que este não seja um pensamento só seu. Já vi diversos profissionais programarem dessa forma (por uma interpretação errada dos padrões, ou muitas vezes obrigados a seguir uma arquitetura de referência adotada em sua empresa), eu mesmo já programei assim!</span><span style="font-size:10pt;font-family:Arial;"> </span></span></p>
<p><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"></span></span><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"></span><b><span style="font-size:10pt;font-family:Arial;">Colega A</span></b><span style="font-size:10pt;font-family:Arial;">: É verdade&#8230;</span><span style="font-size:10pt;font-family:Arial;"> </span></span></p>
<p><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"></span></span><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"></span><b><span style="font-size:10pt;font-family:Arial;">Eu</span></b><span style="font-size:10pt;font-family:Arial;">: Já li diversos textos e discussões em fóruns onde algumas pessoas ainda tentam, mas sem sucesso, justificar o uso de TO numa aplicação não distribuída. É a febre dos patterns! Às vezes você cria situações para justificar a injeção (palavra na moda </span><span style="font-size:10pt;font-family:Wingdings;"><span> <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </span></span><span style="font-size:10pt;font-family:Arial;">) de um pattern em seu design? Evite isso.</span><span style="font-size:10pt;font-family:Arial;"> </span></span><span style="font-size:10pt;font-family:Arial;"> </span></p>
<p><span style="font-size:10pt;font-family:Arial;"></span><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"></span><b><span style="font-size:10pt;font-family:Arial;">Colega A</span></b><span style="font-size:10pt;font-family:Arial;">: Sim,&#8230; e o que vc passa para sua camada de apresentação? Se não tenho mais DTOs eu vou passar os objetos de domínio?</span><span style="font-size:10pt;font-family:Arial;"> </span></span><span style="font-size:10pt;font-family:Arial;"> </span><span style="font-size:10pt;font-family:Arial;"><span style="font-size:10pt;font-family:Arial;"></span><b><span style="font-size:10pt;font-family:Arial;"> </span></b></span></p>
<p><span style="font-size:10pt;font-family:Arial;"><b><span style="font-size:10pt;font-family:Arial;">Eu</span></b><span style="font-size:10pt;font-family:Arial;">: Sim! Você tem algum bom motivo para não passar os “BOs” ?</span><span style="font-size:10pt;font-family:Arial;"> </span><span style="font-size:10pt;font-family:Arial;">Se for por questões de acoplamento, observe que um diagrama com TOs é mais complexo e tem mais acoplamento do que uma versão sem TOs. Se a questão é proteção de alguns dados e/ou métodos, se você programou sua View para interfaces e não para classes concretas, pode usar interfaces de negócio mais restritivas em relação à API do seu componente expondo somente o necessário (Lembrei das Virtual Interfaces de Web Services do SAP NW <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ). </span></span><span style="font-size:10pt;font-family:Arial;"></span><span style="font-size:10pt;font-family:Arial;"></span></p>
<p style="text-align:center;"><a href="http://laercioqueiroz.files.wordpress.com/2007/12/comsemtransferobject.png" title="ComSemTransferObject"><img src="http://laercioqueiroz.files.wordpress.com/2007/12/comsemtransferobject.thumbnail.png?w=363&#038;h=144" alt="ComSemTransferObject" style="width:367px;height:152px;" height="144" width="363" /></a></p>
<p style="text-align:left;">Os colegas citados acima existem (!) e foram convidados a comentar este post, veremos se eles continuam pensando da mesma forma <img src='http://s0.wp.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  &#8230;</p>
<p style="text-align:left;">Fontes sobre o assunto:<br />
Martin Fowler, <a href="http://www.martinfowler.com" target="_blank">http://www.martinfowler.com</a><br />
<a href="http://www.amazon.com/exec/obidos/ASIN/0471146153/theantipatterngr" target="_blank">J2EE AntiPatterns</a><br />
Phillip Calçado &#8220;Shoes&#8221; (ThoughtWorks), <a href="http://fragmental.com.br/wiki/index.php?title=Fantoches">http://fragmental.com.br/wiki/index.php?title=Fantoches</a><br />
Discussão no GUJ: <a href="http://www.guj.com.br/posts/list/28889.java" target="_blank">http://www.guj.com.br/posts/list/28889.java</a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/laercioqueiroz.wordpress.com/6/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/laercioqueiroz.wordpress.com/6/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/laercioqueiroz.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/laercioqueiroz.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/laercioqueiroz.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/laercioqueiroz.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/laercioqueiroz.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/laercioqueiroz.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/laercioqueiroz.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/laercioqueiroz.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/laercioqueiroz.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/laercioqueiroz.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/laercioqueiroz.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/laercioqueiroz.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/laercioqueiroz.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/laercioqueiroz.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=laercioqueiroz.wordpress.com&amp;blog=634405&amp;post=6&amp;subd=laercioqueiroz&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://laercioqueiroz.wordpress.com/2007/12/10/voce-usa-dtotovo-em-aplicacoes-nao-distribuidas/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/19a956425a4f96c9b339ddf09f1f8c9c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">laercioqueiroz</media:title>
		</media:content>

		<media:content url="http://laercioqueiroz.files.wordpress.com/2007/12/comsemtransferobject.thumbnail.png" medium="image">
			<media:title type="html">ComSemTransferObject</media:title>
		</media:content>
	</item>
	</channel>
</rss>
