
Uma das filosofias mais adotadas por programadores Ruby no mundo todo e amplamente evangelizada pelos maiores nomes da programação, independente da linguagem ou comunidade com o qual está mais envolvido é o “Don’t Repeat Yourself” (Não se repita, ou simplesmente DRY).
DRY é mais do que apenas uma boa prática de desenvolvimento, é uma filosofia que envolve evitar repetições. Trechos de código repetidos na maior parte dos casos (se não em todos) somente tornam nosso código mais obscuro e inconsistente. Quando repetimos trechos de código em nosso projeto ou mesmo em projetos diferentes, estamos aumentando a complexidade de gerenciamento e dificultando mudanças.
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.
Quando DRY é aplicado com sucesso em seu projeto ou empresa, a modificação de um único elemento não afetará nenhuma outra parte do seu sistema, com exceção de elementos intrincadamente relacionados.
O simples fato de criar bibliotecas não necessariamente significa que você está sendo DRY. Sistemas como o Enterprise Java Beans embora não exijam que você repita código em Java, lhe obrigam a duplicar arquivos de configuração. Isto não é ser DRY. (Uma nota aqui: Estou totalmente por fora do mundo Java e é possível que isto tenha mudado ou melhorado. Minha intenção é apenas exemplificar.)
O ActiveRecord do Rails é um excelente exemplo de uma biblioteca DRY. Não é necessário criar nenhum tipo de arquivo de configuração, e nem mesmo copiar e colar código entre seus modelos.
“Don’t repeat yourself” não é somente sobre duplicar trechos de código, também tem muito a ver com o comportamento funcional do seu código. Composição e herança em linguagens orientadas a objetos foram criados exatamente para suportar este tipo de filosofia. A idéia por trás do DRY é não só evitar duplicações de código, mas também múltiplas e divergentes maneiras de se realizar a mesma tarefa.
DRY também diz que cada pedaço do seu sistema de informação deve possuir uma representação única e inequívoca. Estou falando do seu banco de dados, seu esquema de testes, seu dispositivo de deploy e até mesmo da documentação do seu sistema.
Um projeto de software é muito mais do que o seu código. Você deve encontrar uma forma única de representar cada um dos recursos envolvidos na criação de seus projetos, caso contrário você terá de manter múltiplas representações diferentes de cada recurso, e no caso de uma mudança se prepare para ter muita dor de cabeça. E mudanças acontecem o tempo todo. Não se repetir é importante se desejar ser flexível quanto às alterações em seu sistema.
Quando estamos falamos apenas de código, a criação de uma biblioteca ou um módulo pode ser o suficiente para evitar repetições. Mas no que diz respeito ao banco de dados, por exemplo, talvez seja necessário uma outra abordagem como a criação de uma ferramenta geradora de código ou um sistema de automação, apenas para citar alguns exemplos.
Obviamente DRY não é infalível, em alguns casos o esforço para manter uma biblioteca única para todos os seus projetos, ou para evitar determinados tipos de duplicações em seus códigos pode ser muito maior do que o esforço necessário ao manter cópias diferentes do mesmo código.
“Don’t Repeat Yourself” – Ruby on Rails foi criado com este conceito em mente. Quase tudo que o fazemos no desenvolvimento de projetos com Rails visa evitar duplicações e repetições, mesmo quando falamos de banco de dados e testes. Por este motivo é que “não se repetir” se tornou o principal lema dos desenvolvedores Rails.
3 Comentários
Trackbacks
- Criando o primeiro helper no Rails
- Um pouco mais sobre “Don’t Repeat Yourself” | Nome do Jogo
- Ortogonalidade | Nome do Jogo
Bem, mas até que ponto um iniciante vai ser DRY? Acho que aderir a filosofia DRY, envolve também a questão de tempo de desenvolvimento… Mas nada como sempre buscar essa filosofia, pois já dizia Dave Thomas programação é como o Kata no Karatê quanto mais se pratica mais mestre fica.
Ótimo post, o DRY é uma filosofia que eu acredito ser essencial para o desenvolvimento de qualquer aplicação. O não uso dessa filosofia leva a retrabalho, complicações futuras para manutenção, falta de flexibilidade, falta de padronização, entre outros.
Acredito que a filosifia Rails como um todo é um ótimo exemplo disso na prática.
Herminio: na minha opinião, iniciante ou não, um programador deveria tentar desenvolver de forma dry desde o início. As vezes tentar aprender a tecnologia de forma “errada” porque é mais simples no começo, pode gerar uma grande dificuldade depois para se adaptar as melhores práticas.
O bom é começar o quanto antes da forma certa.
Não é nenhum bicho de sete cabeças e, principalmente na comunidade Ruby que é um ótimo exemplo disso, o pessoal na internet ta sempre aí pra ajudar com ótimos artigos (como esse blog) e para tirar dúvidas.
Abraços!
Muito bom, acho que o conceito de DRY, tem uma relação bem estreita com o conceito de CoC (Convetion over Configuration) que também está muito presente no Rails.