<?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/"
	>

<channel>
	<title>Gustavo Dutra &#187; porque</title>
	<atom:link href="http://gustavodutra.com/tag/porque/feed/" rel="self" type="application/rss+xml" />
	<link>http://gustavodutra.com</link>
	<description>Um pouco de tudo, nada de pouco</description>
	<lastBuildDate>Thu, 29 Jul 2010 22:57:57 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Tchelinux 2009 &#8211; Porto Alegre</title>
		<link>http://gustavodutra.com/post/309/tchelinux-2009-porto-alegre/</link>
		<comments>http://gustavodutra.com/post/309/tchelinux-2009-porto-alegre/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 15:28:29 +0000</pubDate>
		<dc:creator>Gustavo Dutra</dc:creator>
				<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Software Livre]]></category>
		<category><![CDATA[aumentar produtivade]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[palestra]]></category>
		<category><![CDATA[porque]]></category>
		<category><![CDATA[produtividade]]></category>
		<category><![CDATA[tchelinux]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://gustavodutra.com/?p=309</guid>
		<description><![CDATA[Para quem é do Sul, estarei em Porto Alegre no dia 14/11/2009 ministrando duas palestras no evento Tchelinux. A programação tem mais de 60 palestras sobre diversos temas e a entrada é apenas 2kg de alimentos não perecíveis. Aqueles que participarem recebem um atestado de 10h para usar como atividade complementar.
Para mais informações http://www.tchelinux.org/2009. As [...]]]></description>
			<content:encoded><![CDATA[<p>Para quem é do Sul, estarei em Porto Alegre no dia 14/11/2009 ministrando duas palestras no evento <a rel="nofollow" href="http://www.tchelinux.org">Tchelinux</a>. A programação tem mais de 60 palestras sobre diversos temas e a entrada é apenas 2kg de alimentos não perecíveis. Aqueles que participarem recebem um atestado de 10h para usar como atividade complementar.</p>
<p>Para mais informações <a rel="nofollow" href="http://www.tchelinux.org/2009">http://www.tchelinux.org/2009</a>. As palestras serão:</p>
<h3>VIM-de a mim, produtividade</h3>
<p>Uma palestra que mostra maneiras para um edição de texto efetiva e rápida usando o vim.</p>
<h3>jQuery &#8211; Introdução</h3>
<p>Apresenta o porquê do jQuery ser um excelente framework para desenvolvimento rápido com javascript.</p>
<p>Se alguém tiver assistido a alguma palestra, favor dar um feedback!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://gustavodutra.com/post/309/tchelinux-2009-porto-alegre/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dicas de como aumentar a produtividade usando autocmd no vim</title>
		<link>http://gustavodutra.com/post/153/dicas-de-como-aumentar-a-produtividade-usando-autocmd-no-vim/</link>
		<comments>http://gustavodutra.com/post/153/dicas-de-como-aumentar-a-produtividade-usando-autocmd-no-vim/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 02:06:11 +0000</pubDate>
		<dc:creator>Gustavo Dutra</dc:creator>
				<category><![CDATA[Nerd]]></category>
		<category><![CDATA[Vim]]></category>
		<category><![CDATA[abreviaturas]]></category>
		<category><![CDATA[aumentar produtivade]]></category>
		<category><![CDATA[autocmd]]></category>
		<category><![CDATA[como]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[gvimrc]]></category>
		<category><![CDATA[gzip]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[poo]]></category>
		<category><![CDATA[porque]]></category>
		<category><![CDATA[produtividade]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[reuso]]></category>
		<category><![CDATA[vim]]></category>
		<category><![CDATA[vimrc]]></category>

		<guid isPermaLink="false">http://gustavodutra.com/?p=153</guid>
		<description><![CDATA[Quantas vezes você faz um arquivo que é exatamente igual à um outro arquivo por dia? Quantas vezes você abre um arquivo só para copiar um trecho de código que é utilizado em vários arquivos? Quantas vezes você se vê fazendo a mesma coisa que fez em outro lugar?
E aquela palavra que você sempre escreve [...]]]></description>
			<content:encoded><![CDATA[<p>Quantas vezes você faz um arquivo que é exatamente igual à um outro arquivo por dia? Quantas vezes você abre um arquivo só para copiar um trecho de código que é utilizado em vários arquivos? Quantas vezes você se vê fazendo a mesma coisa que fez em outro lugar?</p>
<p>E aquela palavra que você sempre escreve errada? Aquela função que você sempre esquece o nome?</p>
<p>Conheça algumas dicas para aumentar a produtividade e diminuir o trabalho dessas coisas rotineiras.</p>
<p><span id="more-153"></span></p>
<h2>Lista de Abreviaturas</h2>
<p>Sabe aquelas palavras que a gente insiste em escrever errado? Principalmente quem trabalha com e-mails, códigos e comentários em outras línguas tem dificuldades com certas palavras. Por exemplo,</p>

<div class="wp_syntax"><div class="code"><pre class="plain" style="font-family:monospace;">vc -&gt; você
q -&gt; que
pq -&gt; porque
nao -&gt; não</pre></div></div>

<p>Agora a pergunta que não quer calar: Porque não usarmos algo para evitar esse tipo de coisa? Às vezes nem notamos os erros, mas eles estão lá. Mantenha uma lista de abreviaturas no Vim. Cuide dela, adicione novas abreviaturas assim que vierem à sua cabeça. A sintaxe é simples, basta adicionar no seu .vimrc:</p>

<div class="wp_syntax"><div class="code"><pre class="plain" style="font-family:monospace;">&quot;&quot; abbr ERRADO CORRETO, por exemplo:
abbr pq porque
abbr vc você</pre></div></div>

<p>O Vim ainda possibilita que você crie sintaxes diferentes para arquivos diferentes. Então, seus arquivos <strong>.txt</strong> podem ter abreviaturas diferentes das de <strong>.py</strong>. Ou seja, se o nome daquela função python é muito <strong>longa</strong> ou você insiste em escrevê-la errada, ela merece uma abreviatura, no formato descrito acima (abbr ERRADO CORRETO).</p>

<div class="wp_syntax"><div class="code"><pre class="plain" style="font-family:monospace;">$ mkdir -p ~/.vim/abreviaturas/
$ vim ~/.vim/abreviaturas/txt.vim</pre></div></div>

<p>Adicione ao txt.vim as abreviaturas utilizadas para arquivos texto. Mesmo que poucas, coloque algumas. Um pouco de disciplina fará com que sua produtividade aumente. Tenha certeza.</p>
<p>Ao seu .vimrc, basta acrescentar:</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #668080;">autocmd</span> BufNewFile,BufRead <span style="color: #000000;">*</span> source <span style="color: #000000;">$</span>HOME<span style="color: #000000;">/.</span>vim<span style="color: #000000;">/</span>abreviaturas<span style="color: #000000;">/</span>para_qualquer_linguagem<span style="color: #000000;">.</span>vim
<span style="color: #668080;">autocmd</span> BufNewFile,BufRead <span style="color: #000000;">*.</span>txt source <span style="color: #000000;">$</span>HOME<span style="color: #000000;">/.</span>vim<span style="color: #000000;">/</span>abreviaturas<span style="color: #000000;">/</span>txt<span style="color: #000000;">.</span>vim
<span style="color: #668080;">autocmd</span> BufNewFile,BufRead <span style="color: #000000;">*.</span>py source <span style="color: #000000;">$</span>HOME<span style="color: #000000;">/.</span>vim<span style="color: #000000;">/</span>abreviaturas<span style="color: #000000;">/</span>python<span style="color: #000000;">.</span>vim</pre></div></div>

<p>O <em>autocmd</em> funciona mais ou menos igual a uma <em>trigger</em>. É um sistema de eventos, basicamente. Ou seja, ao abrir um arquivo novo (BufNewFile) ou um arquivo já existente (BufRead), se o nome do arquivo casar com a expressão (no caso, *, *.txt ou *.py) irá executar o código a seguir.</p>
<p>Vou falar mais sobre o autocmd em outro post, tem muitoooo pano pra manga, hehehe.</p>
<h2>Templates de Arquivos</h2>
<p>Quando se fala em programação é meio que como na arte. Não só porque programar é uma arte, mas porque nada se cria, tudo se copia. Tudo bem que, hoje em dia, com técnicas de encapsulamento, oop, etc, fica mais difícil. Mas sempre há coisas em comum entre os arquivos. Vamos começar com algo simples.</p>
<p>Template básico para javascript, onde será utilizado jquery.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">onready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
<span style="color: #006600; font-style: italic;">// code here</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Simples, mas não é um saco ter que escrever isso sempre que abre um arquivo novo? Tome isso como regra: Faça uma, porém apenas uma vez. Não seria mais fácil abrir o arquivo e tcha-ram! Lá está o código que, em 90% dos casos, você irá utilizar?</p>
<p>Esse foi pequeninho, mas imagine um arquivo html. A trabalheira que é copiar todo o caçalho. E se você segue um padrão, pode usar inclusive o css junto. Observe:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt; !DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; xml:lang=&quot;pt&quot; lang=&quot;pt-br&quot; dir=&quot;ltr&quot;&gt;
	&lt;head&gt;
		&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
		&lt;meta http-equiv=&quot;Content-Style-Type&quot; content=&quot;text/css&quot; /&gt;
		&lt;meta name=&quot;keywords&quot; content=&quot;aqui,vai,as,keywords&quot; /&gt;
		&lt;link rel=&quot;stylesheet&quot; href=&quot;/style.css&quot; /&gt;
		&lt;link rel=&quot;shortcut icon&quot; href=&quot;/favicon.ico&quot; /&gt;
        &lt;/head&gt;
        &lt;body&gt;
        &lt;div id=&quot;wrapper&quot;&gt;
                &lt;div id=&quot;head&quot;&gt;&lt;/div&gt;
                &lt;div id=&quot;content&quot;&gt;&lt;/div&gt;
                &lt;div id=&quot;footer&quot;&gt;&lt;/div&gt;
        &lt;/div&gt;
&lt;/body&gt;&lt;/html&gt;</pre></td></tr></table></div>

<p>E o css:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="css" style="font-family:monospace;">html <span style="color: #00AA00;">*</span> <span style="color: #00AA00;">&#123;</span>
<span style="color: #00AA00;">&#125;</span>
body <span style="color: #00AA00;">&#123;</span>
<span style="color: #00AA00;">&#125;</span>
<span style="color: #cc00cc;">#wrapper</span> <span style="color: #00AA00;">&#123;</span>
<span style="color: #00AA00;">&#125;</span>
        <span style="color: #cc00cc;">#wrapper</span> <span style="color: #cc00cc;">#head</span> <span style="color: #00AA00;">&#123;</span>
        <span style="color: #00AA00;">&#125;</span>
        <span style="color: #cc00cc;">#wrapper</span> <span style="color: #cc00cc;">#content</span> <span style="color: #00AA00;">&#123;</span>
        <span style="color: #00AA00;">&#125;</span>
        <span style="color: #cc00cc;">#wrapper</span> <span style="color: #cc00cc;">#footer</span> <span style="color: #00AA00;">&#123;</span>
        <span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>Imagine um designers, aqueles que fazem o psd e depois passam pra xhtml, tendo que copiar isso vezes e vezes para todos os arquivos que ele faz. Faça apenas uma vez e siga o padrão!</p>
<p>Usuários de django, ao criar um model, precisam escrever sempre os imports ? Se são utilizados sempre, porque não criar um template?</p>
<p>Agora você me pergunta, como carregar o template automagicamente no Vim ? Fácil! Utilizando nosso autocmd =). Do mesmo modo que fizemos com as abreviaturas, vamos criar os diretórios:</p>

<div class="wp_syntax"><div class="code"><pre class="plain" style="font-family:monospace;">$ mkdir -p ~/.vim/templates/</pre></div></div>

<p>Criei lá os arquivos com os templates que você acha útil.</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #668080;">autocmd</span> BufNewFile <span style="color: #000000;">*.</span>html 0r <span style="color: #000000;">~/.</span>vim<span style="color: #000000;">/</span>templates<span style="color: #000000;">/</span>html<span style="color: #000000;">.</span>tpl
<span style="color: #668080;">autocmd</span> BufNewFile style<span style="color: #000000;">.</span>css 0r <span style="color: #000000;">~/.</span>vim<span style="color: #000000;">/</span>templates<span style="color: #000000;">/</span>cssstyle<span style="color: #000000;">.</span>tpl
<span style="color: #668080;">autocmd</span> BufNewFile jquery<span style="color: #000000;">.*.</span>js 0r <span style="color: #000000;">~/.</span>vim<span style="color: #000000;">/</span>templates<span style="color: #000000;">/</span>jqueryjs<span style="color: #000000;">.</span>tpl</pre></div></div>

<p>Agora, abra seu Vim e sinta a magia:</p>

<div class="wp_syntax"><div class="code"><pre class="plain" style="font-family:monospace;">vim index.html style.css jquery.initscript.js</pre></div></div>

<h2>Executando comandos externos</h2>
<h3>g(un)zip</h3>
<p>O manual do Vim tem um exemplo bem interessante, para abrir arquivos <strong>gzipados</strong>, editá-los, como se nada tivesse acontecido e salvá-lo no formato <strong>gzip</strong> de novo. Apesar de que aqui, não precisou acrescentar os códigos abaixo, ele já fez automático. Basta adicionar o .vimrc</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;">augroup gzip
  <span style="color: #668080;">autocmd</span><span style="color: #000000;">!</span>
  <span style="color: #668080;">autocmd</span> BufReadPre,FileReadPre	<span style="color: #000000;">*.</span>gz set bin
  <span style="color: #668080;">autocmd</span> BufReadPost,FileReadPost	<span style="color: #000000;">*.</span>gz <span style="color: #C5A22D;">'[,'</span><span style="color: #000000;">&#93;</span><span style="color: #000000;">!</span>gunzip
  <span style="color: #668080;">autocmd</span> BufReadPost,FileReadPost	<span style="color: #000000;">*.</span>gz set nobin
  <span style="color: #668080;">autocmd</span> BufReadPost,FileReadPost	<span style="color: #000000;">*.</span>gz <span style="color: #804040;">execute</span> <span style="color: #C5A22D;">&quot;:doautocmd BufReadPost &quot;</span> <span style="color: #000000;">.</span> <span style="color: #25BB4D;">expand</span><span style="color: #000000;">&#40;</span><span style="color: #C5A22D;">&quot;%:r&quot;</span><span style="color: #000000;">&#41;</span>
  <span style="color: #668080;">autocmd</span> BufWritePost,FileWritePost	<span style="color: #000000;">*.</span>gz <span style="color: #000000;">!</span>mv <span style="color: #000000;">&lt;</span>afile<span style="color: #000000;">&gt;</span> <span style="color: #000000;">&lt;/</span>afile<span style="color: #000000;">&gt;&lt;</span>afile<span style="color: #000000;">&gt;:</span>r
  <span style="color: #668080;">autocmd</span> BufWritePost,FileWritePost	<span style="color: #000000;">*.</span>gz <span style="color: #000000;">!</span>gzip <span style="color: #000000;">&lt;/</span>afile<span style="color: #000000;">&gt;&lt;</span>afile<span style="color: #000000;">&gt;:</span>r
&nbsp;
  <span style="color: #668080;">autocmd</span> FileAppendPre		<span style="color: #000000;">*.</span>gz <span style="color: #000000;">!</span>gunzip <span style="color: #000000;">&lt;/</span>afile<span style="color: #000000;">&gt;&lt;</span>afile<span style="color: #000000;">&gt;</span>
  <span style="color: #668080;">autocmd</span> FileAppendPre		<span style="color: #000000;">*.</span>gz <span style="color: #000000;">!</span>mv <span style="color: #000000;">&lt;/</span>afile<span style="color: #000000;">&gt;&lt;</span>afile<span style="color: #000000;">&gt;:</span>r <span style="color: #000000;">&lt;/</span>afile<span style="color: #000000;">&gt;&lt;</span>afile<span style="color: #000000;">&gt;</span>
  <span style="color: #668080;">autocmd</span> FileAppendPost		<span style="color: #000000;">*.</span>gz <span style="color: #000000;">!</span>mv <span style="color: #000000;">&lt;/</span>afile<span style="color: #000000;">&gt;&lt;</span>afile<span style="color: #000000;">&gt;</span> <span style="color: #000000;">&lt;/</span>afile<span style="color: #000000;">&gt;&lt;</span>afile<span style="color: #000000;">&gt;:</span>r
  <span style="color: #668080;">autocmd</span> FileAppendPost		<span style="color: #000000;">*.</span>gz <span style="color: #000000;">!</span>gzip <span style="color: #000000;">&lt;/</span>afile<span style="color: #000000;">&gt;&lt;</span>afile<span style="color: #000000;">&gt;:</span>r
augroup END
<span style="color: #000000;">&lt;/</span>afile<span style="color: #000000;">&gt;</span></pre></div></div>

<h3>Verificação por erro</h3>
<p>Já deve ter acontecido com você: você salva o arquivo e quando vai testar, faltou um ponto e vírgula, ou escrever o nome de uma função errada, ou algo similar&#8230; um erro bobo, mas que não deixou seu código ser executado e exige reparo.</p>
<p>Para ajudar contra esse trabalho desnecessário (teste + correção + teste), que pode se repetir inúmeras vezes, você pode usar o autocmd para alertá-lo, utilizando ferramentas externas. Por exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="vim" style="font-family:monospace;"><span style="color: #668080;">autocmd</span> BufWritePost <span style="color: #000000;">*.</span>pl <span style="color: #000000;">!</span>perl <span style="color: #000000;">-</span>c <span style="color: #000000;">%</span>
<span style="color: #668080;">autocmd</span> BufWritePost <span style="color: #000000;">*.</span>php <span style="color: #000000;">!</span>php <span style="color: #000000;">-</span>l <span style="color: #000000;">%</span>
<span style="color: #668080;">autocmd</span> BufWritePost <span style="color: #000000;">*.</span>java <span style="color: #000000;">!</span>javac <span style="color: #000000;">-</span>Xlint <span style="color: #000000;">%</span></pre></div></div>

<h2>Use a criativdade</h2>
<p>Utilize sua criatividade e seja mais produtivo na SUA rotina. Deixe as coisas serem automatizadas. Para mais eventos do autocmd, :help autocmd. Tem uma lista bem extensa. Leia a documentação e seja feliz =). Crítias, sugestões e CASES são bem vindos nos comentários =)</p>
]]></content:encoded>
			<wfw:commentRss>http://gustavodutra.com/post/153/dicas-de-como-aumentar-a-produtividade-usando-autocmd-no-vim/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Por que usar Clean URL&#8217;s?</title>
		<link>http://gustavodutra.com/post/115/por-que-usar-clean-urls/</link>
		<comments>http://gustavodutra.com/post/115/por-que-usar-clean-urls/#comments</comments>
		<pubDate>Sun, 01 Mar 2009 16:02:56 +0000</pubDate>
		<dc:creator>Gustavo Dutra</dc:creator>
				<category><![CDATA[Humor]]></category>
		<category><![CDATA[Nerd]]></category>
		<category><![CDATA[clean url]]></category>
		<category><![CDATA[como]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[exemplo]]></category>
		<category><![CDATA[hierarquia]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[pagerank]]></category>
		<category><![CDATA[pattern]]></category>
		<category><![CDATA[porque]]></category>
		<category><![CDATA[url]]></category>

		<guid isPermaLink="false">http://gustavodutra.com/?p=115</guid>
		<description><![CDATA[Olá! Este post é na verdade uma introdução para o próximo. Que trará formas de se trabalhar com Clean URL&#8217;s. Este, por sua vez, é mais teórico. Portanto, se você estiver em dúvida se usar ou não, qual os ganhos dela e etc, sinta-se a vontade de ler, comentar e criticar o post abaixo.

Patterns de [...]]]></description>
			<content:encoded><![CDATA[<p>Olá! Este post é na verdade uma introdução para o próximo. Que trará formas de se trabalhar com Clean URL&#8217;s. Este, por sua vez, é mais teórico. Portanto, se você estiver em dúvida se usar ou não, qual os ganhos dela e etc, sinta-se a vontade de ler, comentar e criticar o post abaixo.</p>
<p><span id="more-115"></span></p>
<h2>Patterns de URLS</h2>
<p>A primeira coisa a se pensar ao usar Clean URL&#8217;s é a modularização, estruturação ou hierarquisação dos conteúdos do site, para que se possa fazer algo interessante. Precisamos de algo único e que seja facilmente localizável. Afinal, um dos motivos do uso de Clean URL é este: que o conteúdo daquela página seja facilmente localizável (isso inclui memória do usuário, assimilação e, por que não, associação com outros assuntos. Além é claro de convenções, tais como: /about, /contact, etc).</p>
<p>Para blog, é muito interessante que o título de um post vire parte da URL. Ao ver o link, o usuário já sabe sobre o que se trata e o que vai encontrar neste post. Logo, se o vizinho da sua tia puser um link de um post seu no blog dele, torna-se muito mais fácil alguém clicá-lo. Nem sempre o link para o post conterá o título, talvez o link seja um mero &#8216;clique aqui&#8217;. Mas, passando o mouse sobre o link, o usuário vai ler o título do post. Para por o título na URL, existe um termo técnico chamado SLUG, que contém apenas letras, números, hífens e underlines. Por exemplo: &#8216;/artigo/como-usar-mod_rewrite&#8217; é muito mais prático e óbvio do que um &#8216;?categoria=article&#038;article_id=5433&#8242;.</p>
<p>Para buscadores isso é muito importante também. Note a diferença entre as URL&#8217;s do exemplo anterior: para usuários que não tem uma intimidade com Web, ver descrito o nome do título lhe dá muito mais segurança de clicar. Pessoas menos íntimas costumam julgar a periculosidade de uma URL pelo que consta nela. Constando &#8220;coisas do diabo&#8221; como &#8216;?id=343&#038;vid=3fdd&#038;hash=54dfsg===v3rgf&#8217; devem ser exorcizadas!</p>
<h2>Hierarquisando</h2>
<p>Hierarquisar o site, fazer a topologia, mapa do site. Vários termos! Mas para mim, são a mesma coisa. No momento em que refletimos aquelas velhas questões clássicas antes de montar um site:</p>
<ul>
<li>Qual o público alvo ?</li>
<li>Qual o objetivo ?</li>
<li>O que é preciso ?</li>
</ul>
<p>Já estamos montando mentalmente uma organização. Vamos pensar no blog deste que vos escreve e responder às perguntas.</p>
<blockquote><p>
Preciso de um blog. Onde eu escrevo posts sobre assuntos que me venham à cabeça para compartilhar um pouco da experiência que tenho e obtive lendo outros blogs, de pessoas que liam outros blogs. Ou seja, quero retribuir o que recebi (está aí o objetivo). Meu público alvo? Justamente aqueles que procuram por informações. Que programam, aprendem e crescem porque são apaixonados por tecnologias.
</p></blockquote>
<p>Agora vamos organizar essas informações:</p>
<p>No blog, além de posts (o que é totalmente indispensável), também deverá haver categorias, tags, etc. Pois o público alvo é um público sedento por informação. O público quer o máximo de informação possível e de forma rápida e simples. Não há tempo para se perder. Por isso se utiliza a categorização e as tags: fazem com que conteúdos relacionados cheguem muito mais rápido àqueles que as procuram.</p>
<p>Portanto é necessário que se consiga uma URL fácil para pesquisas no blog. Por exemplo: http://gustavodutra.com/categoria/GVim já lista todos os posts da categoria GVim. O que possibilita o &#8216;Joãozinho&#8217; favoritar a dada URL e, sempre que entrar, irá se deparar com posts da dita categoria.</p>
<p>À partir do momento que você junta informações sobre o site, você consegue estruturá-lo de forma com que fique claro e simples para o usuário onde ele está. E mais importante! Sempre coloca nomes em URL&#8217;s que tenham algum sentido lógico com o contéudo. Fazendo o contrário, faz com que o site perca credibilidade, tanto para buscadores como para usuários finais. A palavra chave é &#8216;contextualização&#8217;. Uma URL uma vez contextualizada junto ao seu conteúdo, fica mais visível na internet!</p>
<h2>Quais são os ganhos reais</h2>
<p>Muitos dos ganhos podem parecer bobos. Mas não são. Com URL&#8217;s bem definidas:</p>
<ul>
<li>Aumenta-se a segurança do site</li>
<li>Facilita a manutenção do site</li>
<li>Despreocupaçao com diretórios e nomes de arquivos</li>
<li>Facilita a navegação</li>
<li>Aumenta o pagerank em buscadores</li>
<li>Pode aumentar o número de visitas/page views</li>
</ul>
<p>Se você se perguntou &#8216;Como?&#8217;, aguarde o próximo post! Obrigado pela atenção, até mais!</p>
]]></content:encoded>
			<wfw:commentRss>http://gustavodutra.com/post/115/por-que-usar-clean-urls/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O que é? Como e Por quê usar? &#8211; Decorator Pattern</title>
		<link>http://gustavodutra.com/post/24/o-que-e-como-e-por-que-usar-decorator-pattern/</link>
		<comments>http://gustavodutra.com/post/24/o-que-e-como-e-por-que-usar-decorator-pattern/#comments</comments>
		<pubDate>Mon, 29 Dec 2008 01:46:18 +0000</pubDate>
		<dc:creator>Gustavo Dutra</dc:creator>
				<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[Nerd]]></category>
		<category><![CDATA[como]]></category>
		<category><![CDATA[decorator]]></category>
		<category><![CDATA[design pattern]]></category>
		<category><![CDATA[exemplo]]></category>
		<category><![CDATA[flexibilidade]]></category>
		<category><![CDATA[interface]]></category>
		<category><![CDATA[oo]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[oque]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[poo]]></category>
		<category><![CDATA[porque]]></category>
		<category><![CDATA[reuso]]></category>

		<guid isPermaLink="false">http://blog.gustavodutra.com/?p=24</guid>
		<description><![CDATA[Rá! Acá estou eu para explicar um pouco mais sobre o Decorator pattern, um deles que eu acho pouco usado, mas pode salvar vidas. Tem poder na mão. Alguns podem já ter noção do que seja, mas outros devem estar se perguntando: &#8216;WTF??&#8217;. Então vamos lá:
Decorator Pattern
É um pattern desenvolvido para modificar um determinado objeto [...]]]></description>
			<content:encoded><![CDATA[<p>Rá! Acá estou eu para explicar um pouco mais sobre o <strong>Decorator pattern</strong>, um deles que eu acho pouco usado, mas pode salvar vidas. Tem poder na mão. Alguns podem já ter noção do que seja, mas outros devem estar se perguntando: &#8216;WTF??&#8217;. Então vamos lá:<span id="more-24"></span></p>
<h2>Decorator Pattern</h2>
<p>É um pattern desenvolvido para modificar um determinado objeto (seja modificar alguma coisa já existente ou delegar uma nova responsabilidade) sem a necessidade de extendê-lo. O que é muito bom, assim, o reaproveitamento de código é maior ainda! Enfim, vou tentar dar uma explicada no pattern:</p>
<div id="attachment_25" class="wp-caption aligncenter" style="width: 573px"><img class="size-full wp-image-25" title="Diagrama de Classes" src="http://blog.gustavodutra.com/wp-content/uploads/2008/12/class-diagram.png" alt="Diagrama de Classes do Decorator Pattern" width="530" height="291" /><p class="wp-caption-text">Diagrama de Classes do Decorator Pattern</p></div>
<p>Abaixo segue o código usado:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Message <span style="color: #009900;">&#123;</span>
&nbsp;
	protected <span style="color: #000088;">$msg</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$msg</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setMsg</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$msg</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getMsg<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">msg</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setMsg<span style="color: #009900;">&#40;</span><span style="color: #000088;">$msg</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">msg</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$msg</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __toString<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMsg</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Success_Message <span style="color: #000000; font-weight: bold;">extends</span> Message <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$msg</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		parent<span style="color: #339933;">::</span>__construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$msg</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$msg</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DivClass_Decorator<span style="color: #009900;">&#40;</span>
			<span style="color: #000000; font-weight: bold;">new</span> Li_Decorator<span style="color: #009900;">&#40;</span>
				<span style="color: #000088;">$this</span>
			<span style="color: #009900;">&#41;</span>
			<span style="color: #339933;">,</span><span style="color: #0000ff;">'success-msg'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setMsg</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>String<span style="color: #009900;">&#41;</span><span style="color: #000088;">$msg</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Error_Message <span style="color: #000000; font-weight: bold;">extends</span> Message <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$msg</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		parent<span style="color: #339933;">::</span>__construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$msg</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$newmsg</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DivClass_Decorator<span style="color: #009900;">&#40;</span>
			<span style="color: #000000; font-weight: bold;">new</span> Li_Decorator<span style="color: #009900;">&#40;</span>
				<span style="color: #000088;">$this</span>
			<span style="color: #009900;">&#41;</span>
			<span style="color: #339933;">,</span><span style="color: #0000ff;">'error-msg'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setMsg</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>String<span style="color: #009900;">&#41;</span><span style="color: #000088;">$newmsg</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">interface</span> Msg_Decorator_Interface <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">function</span> render<span style="color: #009900;">&#40;</span>Message <span style="color: #000088;">$message</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
abstract <span style="color: #000000; font-weight: bold;">class</span> Msg_Decorator_Abstract <span style="color: #000000; font-weight: bold;">extends</span> Message <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span>Message <span style="color: #000088;">$msg</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">render</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$msg</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Li_Decorator <span style="color: #000000; font-weight: bold;">extends</span> Msg_Decorator_Abstract implements Msg_Decorator_Interface <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> render<span style="color: #009900;">&#40;</span>Message <span style="color: #000088;">$message</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$msg</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$message</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMsg</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setMsg</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'&lt;ul&gt;&lt;li&gt;'</span><span style="color: #339933;">.</span> <span style="color: #000088;">$msg</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;/li&gt;&lt;/ul&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Div_Decorator <span style="color: #000000; font-weight: bold;">extends</span> Msg_Decorator_Abstract implements Msg_Decorator_Interface <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> render<span style="color: #009900;">&#40;</span>Message <span style="color: #000088;">$message</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setMsg</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'&lt;div&gt;'</span><span style="color: #339933;">.</span> <span style="color: #000088;">$message</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMsg</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;/div&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> DivClass_Decorator <span style="color: #000000; font-weight: bold;">extends</span> Msg_Decorator_Abstract implements Msg_Decorator_Interface <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$class</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span>Message <span style="color: #000088;">$msg</span><span style="color: #339933;">,</span> <span style="color: #000088;">$class</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">class</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$class</span><span style="color: #339933;">;</span>
		parent<span style="color: #339933;">::</span>__construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$msg</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> render<span style="color: #009900;">&#40;</span>Message <span style="color: #000088;">$message</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setMsg</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'&lt;div class=&quot;'</span><span style="color: #339933;">.</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">null</span> <span style="color: #339933;">===</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">class</span>?<span style="color: #0000ff;">'default-class'</span><span style="color: #339933;">:</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">class</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&quot;&gt;'</span><span style="color: #339933;">.</span><span style="color: #000088;">$message</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMsg</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;/div&gt;'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>OK! Com o código em mãos, vamos pensar um pouquinho. Tenho uma cacetada de classes, todas fazendo praticamente a mesma coisa. E agora? Calma, Juvenal. Vamos analizar:</p>
<ol>
<li>Temos a classe Mensagem. Sabemos que ele representa uma mensagem. Métodos básicos para manipularmos a mensagem e um <em>__toString()</em> que irá retornar o valor em string pra classe quando for feito o cast.</li>
<li>Classe Msg_Decorator_Abstract que extende da classe Mensagem. Todos os nossos decoradores, por assim dizer, irão ser filhos desta classe. O exemplo é tão simples que a classe abstrata nem tem métodos abstratos. Mas a idéia é que tenha, caso necessário.</li>
<li>Msg_Decorator_Interface, essa interface obriga os programadores que quiserem criar decorators a escrever o método render(). Que é chamado pela nossa classe Abstract no construtor.</li>
<li><em>Li_Decorator, Div_Decorator e DivClass_Decorator</em> são exemplos de decorators.</li>
</ol>
<p>Vamos ver o negócio funcionando? Vamos escrever o seguinte código:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">   	<span style="color: #b1b100;">print</span> <span style="color: #000000; font-weight: bold;">new</span> Div_Decorator<span style="color: #009900;">&#40;</span>
			<span style="color: #000000; font-weight: bold;">new</span> Li_Decorator<span style="color: #009900;">&#40;</span>
				<span style="color: #000000; font-weight: bold;">new</span> Message<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Mensagem de teste!&quot;</span><span style="color: #009900;">&#41;</span>
			<span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Irá imprimir</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="xhtml" style="font-family:monospace;">&lt;div&gt;
&lt;ul&gt;
	&lt;li&gt;Mensagem de teste!&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</pre></td></tr></table></div>

<p>Viram? Simples e prático! Claro que o exemplo é bem simples e talvez nem seja tão útil. Mas é só pensar um pouquinho mais que logo surgem exemplos onde se usar o Decorator.</p>
<p>Entender agora fica mais fácil. Apenas comece olhando do meio para a esquerda. Primeiro nós instanciamos a classe Message com o mensagem &#8220;Mensagem de teste!&#8221;. O método <em>getMsg()</em> retornará exatamente isso: &#8220;Mensagem de teste!&#8221;. Porém, no momento em que é instanciado o <em>Li_Decorator</em>, ele vai mudar a mensagem usando o método <em>render()</em>, que deve ser implementado na <em>Msg_Decorator_Interface</em> e chamado na <em>Msg_Decorator_Abstract</em> pelo construtor. E assim acontece com o <em>Div_Decorator</em>.</p>
<p>Notem que eu decidi mudar o valor da mensagem usando o <em>setMsg</em>. Eu já li em alguns lugares onde fica armazenada a instância da classe anterior e então o método <em>getMsg</em> seria chamado em forma de cascata, fazendo com que a mensagem original nunca fosse alterada de verdade, e no fim ela é, igual a um método recursivo, retornada decorada e maquiada.</p>
<h2>Reutilizando o código</h2>
<p>Bom, como eu havia dito no começo, o Observer Pattern nos possibilita o <strong>reuso</strong>. O exemplo são aquelas duas classes das quais eu não cheguei a falar: <strong>Error_Message e Success_Message</strong>.</p>
<p>Observem que são simples e, utilizando os Decorators já existentes, mostram uma mensagem personalizada de Erro e de Sucesso! Para utilizá-las, basta usar:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">print</span> <span style="color: #000000; font-weight: bold;">new</span> Error_Message<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Erro! Você fez algo errado!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">print</span> <span style="color: #000000; font-weight: bold;">new</span> Success_Message<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Sucesso! Parabéns!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>O que imprimirá:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="xhtml" style="font-family:monospace;">&lt;div class=&quot;error-msg&quot;&gt;
&lt;ul&gt;
	&lt;li&gt;Error!&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;success-msg&quot;&gt;
&lt;ul&gt;
	&lt;li&gt;Sucesso! Parabéns!&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;</pre></td></tr></table></div>

<h3>Prós</h3>
<ul>
<li>Adiciona <strong>flexibilidade</strong> ao código.</li>
<li>Facilmente <strong>reutilizada</strong>.</li>
<li>Ótimo para sistemas que possibilitam o uso de <strong>plugins</strong>.</li>
</ul>
<h3>Contras</h3>
<ul>
<li>Gera um grande número de arquivos (se for pensar que cada arquivo é uma classe ou vice-versa).</li>
<li>Dependendo da quantidade de classes aloca muita memória.</li>
<li>Ruim para sistemas mais fechados e bitolados ou muito padronizados.</li>
</ul>
<p>Acho que é isto pessoal. O que acharam? Não é um bixo de sete cabeças, né?</p>
]]></content:encoded>
			<wfw:commentRss>http://gustavodutra.com/post/24/o-que-e-como-e-por-que-usar-decorator-pattern/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
