<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Código fluente</title>
	<atom:link href="http://log4dev.com/2009/12/07/codigo-fluente/feed/" rel="self" type="application/rss+xml" />
	<link>http://log4dev.com/2009/12/07/codigo-fluente/</link>
	<description></description>
	<lastBuildDate>Fri, 25 Nov 2011 22:30:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
	<item>
		<title>By: Mr. Bean</title>
		<link>http://log4dev.com/2009/12/07/codigo-fluente/comment-page-1/#comment-147798</link>
		<dc:creator>Mr. Bean</dc:creator>
		<pubDate>Wed, 20 Jan 2010 21:23:16 +0000</pubDate>
		<guid isPermaLink="false">http://log4dev.com/?p=690#comment-147798</guid>
		<description>&lt;p&gt;Acho interessante a idéia do Uncle Bob de que os métodos tem que ter o mesmo nível de abstração.&lt;/p&gt;

&lt;p&gt;Quando você fala nos detalhes sórdidos (&quot;bases de dados, queries, estruturas de dados, rede, integrações com outra bibliotecas, etc…&quot;),  você está falando de um nível de abstração mais próximo das estranhas da tecnologia.&lt;/p&gt;

&lt;p&gt;Por exemplo:
O Vendedor pode ter um um método efetuaPedido() que verificaEstoque() e que  gravaPedido(). Se você não estiver interessado na implementação da efetuação de pedido isso basta. &lt;/p&gt;

&lt;p&gt;Mas se você estiver corrigindo um bug nesse código pode te interessar ver como a verificação de estoque é feita ou a gravação de pedido. Aí, você vê que verificaEstoque() chama um Webservice e que a gravaPedido() manda uma mensagem para um Mainframe. Ou outras coisas sórdidas do gênero...&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Acho interessante a idéia do Uncle Bob de que os métodos tem que ter o mesmo nível de abstração.</p>

<p>Quando você fala nos detalhes sórdidos (&#8220;bases de dados, queries, estruturas de dados, rede, integrações com outra bibliotecas, etc…&#8221;),  você está falando de um nível de abstração mais próximo das estranhas da tecnologia.</p>

<p>Por exemplo:
O Vendedor pode ter um um método efetuaPedido() que verificaEstoque() e que  gravaPedido(). Se você não estiver interessado na implementação da efetuação de pedido isso basta. </p>

<p>Mas se você estiver corrigindo um bug nesse código pode te interessar ver como a verificação de estoque é feita ou a gravação de pedido. Aí, você vê que verificaEstoque() chama um Webservice e que a gravaPedido() manda uma mensagem para um Mainframe. Ou outras coisas sórdidas do gênero&#8230;</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Bruno</title>
		<link>http://log4dev.com/2009/12/07/codigo-fluente/comment-page-1/#comment-138780</link>
		<dc:creator>Bruno</dc:creator>
		<pubDate>Fri, 11 Dec 2009 16:19:08 +0000</pubDate>
		<guid isPermaLink="false">http://log4dev.com/?p=690#comment-138780</guid>
		<description>&lt;p&gt;Conheço este conceito por: &lt;a href=&quot;http://bpfurtado.livejournal.com/17782.html&quot; rel=&quot;nofollow&quot;&gt;&quot;Human Interface&quot; operations&lt;/a&gt;, termo difundido (ou até cunhado) pelo Fowler já desde 2005. &lt;/p&gt;

&lt;p&gt;Aplico esta &#039;técnica&#039; sempre, sempre que possível, pois torna a leitura e compreensão do código não só mais fácil como agradável. Um exemplo simples está na &lt;a href=&quot;http://code.google.com/p/ljcolligo/source/browse/trunk/src/net/bpfurtado/ljcolligo/GetEvents.java&quot; rel=&quot;nofollow&quot;&gt;linha 104&lt;/a&gt; de uma classe do meu projeto &lt;a href=&quot;http://code.google.com/p/ljcolligo/&quot; rel=&quot;nofollow&quot;&gt;LJColligo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Um exemplo já bem melhor está &lt;a href=&quot;http://bpfurtado.livejournal.com/62061.html&quot; rel=&quot;nofollow&quot;&gt;em um código de testes&lt;/a&gt; que eu fiz algumas semanas atrás. &lt;/p&gt;

&lt;p&gt;E tem gente que acha que eu não codifico mais aqui na &lt;a href=&quot;http://www.fico.com&quot; rel=&quot;nofollow&quot;&gt;FICO&lt;/a&gt;... :-)&lt;/p&gt;

&lt;p&gt;PS: Creio que em muitos ‘momentos’ o bom e velho comentário é indispensável, mas usar nomes altamente descritivos (para identificadores em geral) são essenciais também.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Conheço este conceito por: <a href="http://bpfurtado.livejournal.com/17782.html" rel="nofollow">&#8220;Human Interface&#8221; operations</a>, termo difundido (ou até cunhado) pelo Fowler já desde 2005. </p>

<p>Aplico esta &#8216;técnica&#8217; sempre, sempre que possível, pois torna a leitura e compreensão do código não só mais fácil como agradável. Um exemplo simples está na <a href="http://code.google.com/p/ljcolligo/source/browse/trunk/src/net/bpfurtado/ljcolligo/GetEvents.java" rel="nofollow">linha 104</a> de uma classe do meu projeto <a href="http://code.google.com/p/ljcolligo/" rel="nofollow">LJColligo</a>.</p>

<p>Um exemplo já bem melhor está <a href="http://bpfurtado.livejournal.com/62061.html" rel="nofollow">em um código de testes</a> que eu fiz algumas semanas atrás. </p>

<p>E tem gente que acha que eu não codifico mais aqui na <a href="http://www.fico.com" rel="nofollow">FICO</a>&#8230; <img src='http://log4dev.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>

<p>PS: Creio que em muitos ‘momentos’ o bom e velho comentário é indispensável, mas usar nomes altamente descritivos (para identificadores em geral) são essenciais também.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Thiago Bartolomei</title>
		<link>http://log4dev.com/2009/12/07/codigo-fluente/comment-page-1/#comment-137702</link>
		<dc:creator>Thiago Bartolomei</dc:creator>
		<pubDate>Tue, 08 Dec 2009 14:57:46 +0000</pubDate>
		<guid isPermaLink="false">http://log4dev.com/?p=690#comment-137702</guid>
		<description>&lt;p&gt;Meu orientador me mandou um artigo interessante:&lt;/p&gt;

&lt;p&gt;What makes APIs hard to learn? Answers from Developers
http://www.computer.org/portal/web/computingnow/1109/whatsnew/software&lt;/p&gt;

&lt;p&gt;Apesar de em geral o termo API ser usado pra interfaces que você expõe à terceiros, eu gosto de considerar que toda interface de qualquer tipo de módulo é uma API (por exemplo, uma classe em Java, uma função em Haskell e assim por diante).&lt;/p&gt;

&lt;p&gt;Se você extrapolar os insights daquele artigo de APIs pra qualquer código, mesmo interno, então uma das coisas que mais importam é entender o motivo pra API funcionar de certa forma. Em geral é fácil de entender &quot;o que foi feito&quot; olhando pra interface, mas entender o porquê é bem mais difícil.&lt;/p&gt;

&lt;p&gt;E note que a solução do artigo não é escrever mais documentação pra cada método, mas sim escrever documentação da arquitetura e dos princípios gerais usados na API. Ou seja, se você entender a arquitetura geral do programa, vai ser mais fácil entender porque um método está se comportando de certa maneira.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Meu orientador me mandou um artigo interessante:</p>

<p>What makes APIs hard to learn? Answers from Developers
<a href="http://www.computer.org/portal/web/computingnow/1109/whatsnew/software" rel="nofollow">http://www.computer.org/portal/web/computingnow/1109/whatsnew/software</a></p>

<p>Apesar de em geral o termo API ser usado pra interfaces que você expõe à terceiros, eu gosto de considerar que toda interface de qualquer tipo de módulo é uma API (por exemplo, uma classe em Java, uma função em Haskell e assim por diante).</p>

<p>Se você extrapolar os insights daquele artigo de APIs pra qualquer código, mesmo interno, então uma das coisas que mais importam é entender o motivo pra API funcionar de certa forma. Em geral é fácil de entender &#8220;o que foi feito&#8221; olhando pra interface, mas entender o porquê é bem mais difícil.</p>

<p>E note que a solução do artigo não é escrever mais documentação pra cada método, mas sim escrever documentação da arquitetura e dos princípios gerais usados na API. Ou seja, se você entender a arquitetura geral do programa, vai ser mais fácil entender porque um método está se comportando de certa maneira.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Ronie Uliana</title>
		<link>http://log4dev.com/2009/12/07/codigo-fluente/comment-page-1/#comment-137385</link>
		<dc:creator>Ronie Uliana</dc:creator>
		<pubDate>Mon, 07 Dec 2009 19:29:42 +0000</pubDate>
		<guid isPermaLink="false">http://log4dev.com/?p=690#comment-137385</guid>
		<description>&lt;p&gt;Só acho que o ponto da interface fluente ficou em muito destaque, enquanto o ponto real é: &quot;comentário explicando o &lt;em&gt;motivo&lt;/em&gt; que levou ao código&quot;.&lt;/p&gt;

&lt;p&gt;E nisso concordo 100%.&lt;/p&gt;

&lt;p&gt;Mas é o comentário mais difícil de se escrever, pq vc só sabe se escreveu direito quando não lembra o porquê fez daquele jeito. Tipo da coisa que exige prática, o que implica em errar bastante antes de acertar =/&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Só acho que o ponto da interface fluente ficou em muito destaque, enquanto o ponto real é: &#8220;comentário explicando o <em>motivo</em> que levou ao código&#8221;.</p>

<p>E nisso concordo 100%.</p>

<p>Mas é o comentário mais difícil de se escrever, pq vc só sabe se escreveu direito quando não lembra o porquê fez daquele jeito. Tipo da coisa que exige prática, o que implica em errar bastante antes de acertar =/</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Rafael Naufal</title>
		<link>http://log4dev.com/2009/12/07/codigo-fluente/comment-page-1/#comment-137356</link>
		<dc:creator>Rafael Naufal</dc:creator>
		<pubDate>Mon, 07 Dec 2009 17:05:18 +0000</pubDate>
		<guid isPermaLink="false">http://log4dev.com/?p=690#comment-137356</guid>
		<description>&lt;p&gt;Na minha opinião, o comentário deve explicar &lt;b&gt;o que foi feito&lt;/b&gt; e &lt;b&gt;não como foi feito&lt;/b&gt;. Eu ainda sou fã da idéia que o comentário deve ser necessário &lt;b&gt;APENAS&lt;/b&gt; nos seguintes casos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Explicar uma computação/cálculo complicado&lt;/li&gt;
&lt;li&gt;API&#039;s liberadas para terceiros  (papel dos criadores de frameworks, bibliotecas)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nomes de métodos e variáveis devem ser auto-explicativos. Pequenos blocos devem ser extraídos em métodos (mesmo blocos de &lt;b&gt;uma&lt;/b&gt; linha!!!!!), tudo para auxiliar na legibilidade do código.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Na minha opinião, o comentário deve explicar <b>o que foi feito</b> e <b>não como foi feito</b>. Eu ainda sou fã da idéia que o comentário deve ser necessário <b>APENAS</b> nos seguintes casos:</p>

<ol>
<li>Explicar uma computação/cálculo complicado</li>
<li>API&#8217;s liberadas para terceiros  (papel dos criadores de frameworks, bibliotecas)</li>
</ol>

<p>Nomes de métodos e variáveis devem ser auto-explicativos. Pequenos blocos devem ser extraídos em métodos (mesmo blocos de <b>uma</b> linha!!!!!), tudo para auxiliar na legibilidade do código.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Miguel Galves</title>
		<link>http://log4dev.com/2009/12/07/codigo-fluente/comment-page-1/#comment-137338</link>
		<dc:creator>Miguel Galves</dc:creator>
		<pubDate>Mon, 07 Dec 2009 16:05:36 +0000</pubDate>
		<guid isPermaLink="false">http://log4dev.com/?p=690#comment-137338</guid>
		<description>&lt;p&gt;Vale pra C, C  , Python, Java, Brainfuck. Mas resumindo, é isso.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Vale pra C, C  , Python, Java, Brainfuck. Mas resumindo, é isso.</p>]]></content:encoded>
	</item>
	<item>
		<title>By: Raphael Lullis</title>
		<link>http://log4dev.com/2009/12/07/codigo-fluente/comment-page-1/#comment-137337</link>
		<dc:creator>Raphael Lullis</dc:creator>
		<pubDate>Mon, 07 Dec 2009 16:04:15 +0000</pubDate>
		<guid isPermaLink="false">http://log4dev.com/?p=690#comment-137337</guid>
		<description>&lt;p&gt;Péra aí...&lt;/p&gt;

&lt;p&gt;Você usou 3900 toques pra reclamar da falta de comentários em interfaces de código Java? É isso?&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Péra aí&#8230;</p>

<p>Você usou 3900 toques pra reclamar da falta de comentários em interfaces de código Java? É isso?</p>]]></content:encoded>
	</item>
</channel>
</rss>

