KISS - Keep it simple, stupid!

Migrations, uma breve explicação

postado por João José Pedrini em 28/02/2009 15:38:21

Uma das grandes dificuldades dentro de um time de desenvolvimento WEB, sem dúvida, é manter o Banco de Dados atualizado entre todos ambientes de trabalho. Volta e meia um desenvolvedor faz alguma alteração no banco e não comunica o restante do grupo. Isto sempre causa retrabalho, bugs ou um programador arrancando o próprio cabelo.

Uma das causas deste problema é que em nenhum momento rastreamos as modificações do banco em nossos projetos. Para o código temos o SCM (source code management), para controlar as tarefas temos os gerenciadores de projetos, para os documentos temos o Google Docs, mas para o banco de dados? Foi pensando nesses problemas que se criou o técnica de Migrations. O Migrations é uma forma de manter organizadas as modificações na estrutura do banco de dados, permitindo, dentre algumas facilidades, construir seu banco incrementalmente, retroceder alteração que não sejam mais adequadas ou trabalhar em ambientes com diversos programadores.

O conceito básico de Migrations consiste em armazenar as modificações do banco em pequenos arquivos numa ordem cronológica. Esses arquivos devem conter informações que consigam construir ou destruir seu banco de uma versão para qualquer outra. Como se faz isto? Simples, indique no seu arquivo como proceder numa determinada atualização (UP) e como retroceder (DOWN), assim, quando quer ir para uma versão mais nova, execute todos os UPs dos arquivos mais recentes, e quando quer retroceder, execute os DOWNs até a versão mais antiga. Com ajuda de um programa auxiliar, que geralmente é um automatizador, você consegue executar facilmente tarefas como (re)construção de banco, atualização de alterações ou rollback’s de algo que não saiu como se devia.

Em algumas implementações de Migrations é possível fazer manipulação de dados. Esta é uma facilidade muito interessante e os DBA’s devem adorar. Imagine que você, em um determinado momento, queira fazer uma modificação no campo “nome_completo” quebrando-o em dois: “nome” e “sobrenome”. Com a manipulação você consegue fazer o tratamento dos dados e migrar, não só a estrutura do banco, mas também os dados que por ventura podem estar armazenados. Esta funcionalidade dá um pouco mais de poder ao Migrations, mas nem sempre esta presente em todas as implementações.

Como alguns podem estar acompanhando, eu e Juan Basso estamos criando uma implementação de Migrations para CakePHP. Numa iniciativa de não tentar reinventar a roda, estamos fazendo alguns estudos sobre implementações de Migrations em PHP. No momento temos três implementações que acreditamos ser interessantes: CakeSchema, Migrations do JoelMoss para Cake e o Ruckusing. Cada um possui qualidades e defeitos, por isso tivemos a idéia de convidar a comunidade para discutir a necessidade de se criar uma nova implementação. Quem puder nos ajudar testando estas implementações e nos falando seus pontos pró e contras, ou mesmo apontando outras implementações, agradecemos.

Bem, está ai uma breve explicação de Migrations, espero que você tenham entendido um pouco e estamos esperando a participação de todos na discussão.

Tags: , , ,
Topo

1 Comentário

Sobre JavaScript e Simplicidade

postado por Gabriel Gilini em 10/11/2008 15:39:38

Assistindo à apresentação de Christian HeilmannMaintainable JavaScript — me dei conta da quantidade de código JavaScript que escrevi inutilmente ao longo dos últimos meses. Não é segredo que gosto muito da linguagem, e sempre penso em soluções mirabolantes para resolver todo tipo de problema com algumas linhas de código. Porém percebi como o advento das bibliotecas JavaScript tem feito com que os desenvolvedores pensem menos.

Explico. Suponhamos que você tenha vários elementos que gostaria de esconder em sua interface. Se você é um purista, não utiliza nenhuma biblioteca, teremos algo como (código adaptado da apresentação do Heilmann):

Quatorze linhas de código. Se todos os browsers utilizados suportassem getElementsByClassName seriam apenas 5, um dia chegamos lá ;)

Se você utiliza Prototype, jQuery, ou outra das inúmeras bibliotecas existentes, o código fica bem menor para o mesmo resultado final.

Simples, não é? Se você é designer, só escreve JavaScript aqui e ali, vai perceber que é a solução para todos seus problemas. Mas se você é desenvolvedor, deveria parar para pensar em quantas chamadas de função vão acontecer para que você consiga esconder alguns elementos, uma das tarefas mais triviais em JavaScript. “Ah, mas os computadores conseguem processar isso sem maiores problemas hoje em dia, eles são rápidos”. Se você pensou nisso, devo citar uma frase que vi no comp.lang.javascript há alguns dias.

“Computers are fast” so it is okay to waste all of their
resources. Who are you now, Bill Gates?
– David Mark

E quer saber? Ele está certo. Não podemos tomar nossas próprias máquinas como parâmetro de recurso, devemos escrever código que dê uma ótima experiência de uso a todos e não apenas aos que têm “computadores rápidos”. Mas escrever 14 linhas de JavaScript para esconder alguns elementos? SIM, é isso que devemos fazer, mas não nesse caso. Aqui devemos nos lembrar que o CSS deve cuidar do visual. Tudo o que foi feito até agora, com esses três pedaços de código, foi setar a propriedade “display” como “none” para todos os elementos que tenham a classe “esconder”. Lembrando que a letra “C” de CSS significa Cascading, podemos atingir o mesmo resultado com uma solução muito mais elegante e rápida.

Para encerrar gostaria de enfatizar que não adianta dominar completamente JavaScript, saber o ECMA-262 de cabo a rabo, se você não analisa o requisito antes de sair utilizando todas as facilidades da sua biblioteca favorita. Se você precisa cavar um balde de areia não faz sentido usar uma retro escavadeira.

Abaixo você pode assistir as duas partes da apresentação do Christian Heilmann no Fronteers Conference ‘08


Presentation: Christian Heilmann: Maintainable JavaScript, part 1 from Bachelor-ict.nl on Vimeo.


Presentation: Christian Heilmann: Maintainable JavaScript, part 2 from Bachelor-ict.nl on Vimeo.

Tags: ,
Topo

2 Comentários

Creative Commons License
Sou Ágil: KISS em http://kiss.souagil.com.br está licenciado sobre
Creative Commons Attribution-Share Alike 2.5 Brazil License.

souÁgil