Conteúdo
- 1. Nesting
- 2. Referências
Dry é a sigla para o termo "Dont repeat yourself" (Nao repita a si mesmo), sendo uma filosofia de um processo que visa a nao repetição de código, particularmente utilizado em computação. Essa filosofia enfatiza que informação nao deve ser duplicada, porque duplicação aumenta dificuldades nas mudanças, pode diminuir a clareza, e leva a oportunidades de um codigo nao coeso.
Coesao: O termo coesao nos parece simples, porem o efeito de sua ausencia provoca bastante dor-de-cabeça. Coesão representa o quão uma classe é específica para desempenhar um papel em um contexto. Porem um projeto coeso nao significa que os codigos de suas classes nao serão reutilizáveis . (Lembrando que coesão é diferente de acoplamento. Acoplamento é o nível de interligação entre duas classes, ou seja, o quanto uma classe conhece da outra. A repetição de código corre o risco do sistema ter um acoplamento maior, pois a reutilização de um mesmo código em diferentes classes faz com que uma classe conheça a outra, porém um acoplamento forte usado com cuidado é essencial, pois se todo acoplamento fosse evitado, não haveria métodos sobrepostos, não haveria herança e com isso não haveria orientação a objetos.)
Reutilização: Ao criar código reutilizável estamos facilitando nossa vida no longo prazo. Se uma alteração importante é necessária para aumentar a segurança de seu sistema de autenticação, será muito mais fácil realizá-la se você estiver usando uma biblioteca única para este fim em todos os seus projetos. Mas imagine o trabalho que terá se cada projeto em sua empresa utilizar um sistema único de autenticação criado especialmente para ele.
DRY em RAILS:
Em Rails existem varias ferramentas para tornar o código mais coeso e reutilizável ao mesmo tempo, consequentemente tornando-o "mais DRY":
SASS: Sass é uma meta linguagem implementada em cima de CSS com que é usada para descrever o style de um documento de maneira limpa e estrutural. Resumindo faz com que o texto em CSS seja escrito de maneira mais simples e elegante. O ponto de SASS mais importante para este artigo está no Nesting, veja abaixo:
Nesting
Sass evita repetições através dos seletores Nesting dentro uns dos outros. The same thing works with properties.
// Sass table.hl margin: 2em 0 td.ln text-align: right li font: family: serif weight: bold size: 1.2em
/* CSS */ table.hl { margin: 2em 0; } table.hl td.ln { text-align: right; } li { font-family: serif; font-weight: bold; font-size: 1.2em; }
Outro exemplo está nesse simples código em Haml, uma ferramenta que facilita os scripts em ERB:
ERB
<div id='content'>
<div class='left column'>
<h2>Welcome to our site!</h2>
<p><%= print_information %></p>
</div>
<div class="right column">
<%= render :partial => "sidebar" %>
</div>
</div>
Haml
#content
.left.column
%h2 Welcome to our site!
%p= print_information
.right.column
= render :partial => "sidebar"
Porém não só de não repetição de código fonte vive o DRY, temos também a não repetição de atividades feitas pelo próprio usuário, como o próprio nome diz: " Não repita as si mesmo". Esse é o exemplo do Capistrano.
Capistrano: Capistrano é uma ferramenta que executa códigos paralelos em servidores alvo. Um bom caso da utilização de Capistrano é o caso de pessoas ocupadas, que compartilham uma mesma maquina com outros pessoas. Com Capistrano não precisa logar e deslogar toda vez, pois sua maior função é automatizar tarefas. Ex, com o comando `cap deploy` ele conecta no servidor, baixa a ultima versao do repositório, cria e symlinka diretorios, reinicia os servidores.
Partials: Uma das partes mais interessantes disponnivel em ruby, seguindo a filosofia Dry eh o partials. Partials são pedaços de página que podem ser reutilizados pra evitar replicação de código. Abaixo tem-se um exemplo de utilizacao de partials na view de um index, encontrado em um scaffold:
- <% for reading in @readings %>
- <tr>
- <td><%=h reading.url %></td>
- <td><%=h reading.text %></td>
- <td><%=h reading.page %></td>
- <td><%=h reading.time %></td>
- <td><%= link_to ‘Show’, reading %></td>
- <td><%= link_to ‘Edit’, edit_reading_path(reading) %></td>
- <td><%= link_to ‘Destroy’, reading, :confirm => ‘Are you sure?’, :method => :delete %></td>
- </tr>
- <% end %>
Eu gostaria de reutilizar o trecho que está exibindo cada “reading”, então, eu vou retirar e colocar este trecho de código em uma Partial, assim eu posso chamá-la em qualquer outro lugar da minha aplicação, onde eu queira exibir as informações da mesma maneira.
Uma partial é um arquivo que começa com um “_”, underscore, underline…., criando um arquivo com o nome _readinhg.html pegando todo o código que estava dentro for. Este será o conteúdo da partial:
#_reading.html.erb
- <tr>
- <td><%=h reading.url %></td>
- <td><%=h reading.text %></td>
- <td><%=h reading.page %></td>
- <td><%=h reading.time %></td>
- <td><%= link_to ‘Show’, reading %></td>
- <td><%= link_to ‘Edit’, edit_reading_path(reading) %></td>
- <td><%= link_to ‘Destroy’, reading, :confirm => ‘Are you sure?’, :method => :delete %></td>
- </tr>
OK! Agora que temos um partial com o nome _reading, basta agora lincarmos esse partials com a classe index.
- <%= render :partial => 'reading', :collection => @readings%>
A partial receberá a collection “readings” como parâmetro.
Comentários