Boas Práticas em Rails
Tabela de Conteúdos
- Desenvolvimento orientado por testes
- Migrações
- SQLite
- Não Se Repita
- Convenções de nomes
- Controlo de versões
- Sistemas de autenticação
- Andaimes
- Leitura recomendada
Desenvolvimento orientado por testes
Isto é absolutamente essencial. A Rails torna a escrita de testes unitários e testes funcionais muito simples e assim é praticamente obrigatório usar testes para validar aquilo que se irá programar. Devem ser empregues tanto testes positivos como testes negativos: primeiro verificar que a aplicação faz o que deve fazer quando são passadas as variáveis adequadas para a acção correcta e depois verificar se passando variáveis incorrectas se passa a ocorrer o comportamento preferido.
Leitura recomendada
Teste Unitário
Como regra geral, os testes unitários devem testar todas as validações nos modelos assim como quaisquer métodos adiccionados a esses modelos.
Por exemplo, se tiver um modelo Utilizador
que valide a presença do nome e do apelido (validates_presence_of
...) nos respectivos campos e que tenha um método nomecompleto
que combina os dois, é provável encontrarem-se os seguintes casos de teste: test_validates_nomes
e test_nomecompleto
, que irá testar o modelo para se poder verificar se funciona de acordo com o previsto.
Teste Funcional
Os testes funcionais são usados para testar controladores. Como regra, deve haver, pelo menos, um caso de teste por cada acção sendo necessário empregar também aqui os testes pela positiva e pela negativa. Isto significa que se tivermos uma acção create
no nosso controlador de entradas PostsController
deve haver pelo menos os métodos test_create
e test_bad_create
nos testes funcionais que efectuam os testes pela positiva e pela negativa. Isto não significa que devam haver só dois testes por cada acção. No caso de haver casos excepcionais para além de um simples bom ou mau, um teste adequado implica cobrir também esses casos.
Leitura recomendada
- Um Guia para Testes em Rails
- Capítulo 12 do Agile Web Developement With Rails
Migrações
As migrações significam nunca se arrepender de destruir completamente a sua base de dados. Permitem criar esquemas de bases de dados que são agnósticas quanto aos sistema de gestão de bases de dados específico, o que significa que pode desenvolver a sua aplicação localmente com SQLite e depois distribuir a sua aplicação com MySQL sem problema. São mais limpas (e mais fáceis) de escrever do que os seus esquemas à medida e devem ser sempre que possíveis usadas.
NUNCA, NUNCA, NUNCA por nunca alterar o ficheiro schema.rb pois é uma reflexão da sua base de dados. As migrações devem ser usadas para fazer a evolução. Se não usar as migrações e em seu lugar alterar o schema.rb as coisas passaram a ficar pouco estáveis e os seus utilizadores (e clientes) ficaram deveras pouco satizfeitos.
Nota: Deve sempre executar um svn update
antes de gerar uma migração de modo a não ter que efectuar prefixos em colisões.
Leitura recomendada
- A Alegria das Migrações
- Manual abreviado sobre migrações em ActiveRecord
- Guia superfácil sobre de migrações
SQLite
SQLite é um motor de SQL que corre num único ficheiro em vez de num servidor. É normalmente tão rápido quando o MySQL e torna-se assim uma ferramente excelente para teste e desenvolvimento. De facto com a possibilidade de executar uma base de dados directamente e completamente da memória (uma pequena base de dados excepto se tiver muita memória RAM disponível) os testes são acelerados de forma significativa. Com o aparecimento das migrações, faz todo o sentido usar o SQL para teste pois não há trabalho adicional para a instalação da sua aplicação num ambiente MySQL.
DRY - Não se repita
A principal ideia da DRY (seca) é a de que se o código se repete é extraído para um ajudante (helper) ou uma função, assim passa a ter só um lugar para ver (e alterar se for caso disso) se algo correr mal. Se encontrar código similar em vários lugares poderá querer ler atentamente esse código e extraí-lo para uma função ou um parcial.
Leitura recomendada
Convenções dos nomes
Não use abreviaturas, em especial nos nomes das colunas de uma tabela. Deve ser óbvio qual o conteúdo de uma coluna (pelo menos qual o significado do nome) quando se lê o respectivo nome. além disso o sistema de erros da Rails sabe como humanizar os nomes das colunas, quando usar um nome que descreva bem o conteúdo de uma coluna será mais fácil a apresentação de erros.
Se os nomes forem demasiado compridos, pense noutra expressão (palavra ou frase) com o mesmo significado, mas que seja óbvia.
Controlo de Versões (Subversion)
Deve ser usado algum modo de controlo de versões de forma contínua. Isto permite voltar atrás de forma fácil se algo correr mal, assim como a possibilidade de nos referir-mos a código antigo se necessário. A Rails tem alguns ficheiros que não devem ser incluidos no repositório central de fontes (gosto mais da palavra originais mas estou em minoria) e assim deve consultar esta página do wiki sobre preparação da importação inicial.
Sistemas de autenticação
Já foram escritos vários módulos para autenticação para Rails, alguns são melhores que os outros.
- acts_as_authenticated
- Deve ser o suplemento de autenticação preferido. É facilmente instalável via
script/plugin
, é fácil de ampliar e pode tratar de todos os aspectos dos restantes módulos de autenticação. Além disso o código de teste é excelente o que o torna fácil de alterar - login_generator
login_generator
é o gem gerador de login original desenvolvido por Tobias Luetke. A desvantagem é que se surgir um erro que danifica a palavra de passe se gravar um utilizador já existente. Não deve ser usado por esta razão. Foi substituído e ultrapassado poracts_as_authenticated
- SaltedHashLoginGenerator
- Foi a primeira tentativa de criar um gerador de login (sem transporte da palavra de passe a descoberto) que conseguia alterar senhas e fazer activações. Foi extraído para
login_generator
. É excessivo e difícil de alterar. Deve ser evitado. - login_engine
- É uma extração do
SaltedHashLoginGenerator
e como tal tem as suas desvantagens. Além disso usa o sistema de Rails Engines que deve ser evitado pois está quase a ser descontinuado. Se necessitar mais do que de uma pequena alteração deve ser evitado.
Sobre andaimes
Os andaimes podem ser uma forma de poupar tempo ou um verdadeiro aborrecimento. Quando os usar assegure-se de que compreende exactamente o que é que o código está a fazer e porquê. Uma fez alcançado tal pode tornar-se mais fácil e rápido escrever o seu próprio código pois é frequente ter que se alterar cada uma das secções que o scaffolding nos oferece.
Sem comentários:
Enviar um comentário