O mínimo que você deveria saber sobre Active Record

Se você já usou alguma vez o framework Rails, é bem provavel que tenha utilizado o seu ORM Active Record.

Talvez você não saiba, mas Active Record é um pouco mais que a forma que o Rails se comunica com o banco de dados, ele é uma implementação ruby de um padrão de design de projeto que leva o mesmo nome do ORM (Mapeamento Relacional de Objetos) do Rails.

Afinal, que padrão de design é esse!?

O Padrão de design do Active Record é relativamente simples de se explicar.

Neste design, cada objeto representa uma linha de uma tabela de seu banco de dados. Ou seja, cada linha da tabela abaixo é representada por um objeto.

Game of thrones phone book

Além disso, uma model Active Record deve possuir um método para cada atributo de sua tabela. Na tabela acima a classe teria os méteodos: id, name e phone.

Em pseudo código, nossa model ficaria mais ou menos assim:

Active Record model example

CRUD Basicão

O Active Record também deve incluir em sua classe os métodos básicos de operações do CRUD. Então nossa classe deve ter mais os seguintes métodos: find, insert, update, delete.

Uma feature problema

No padrão Active Record qualquer método de regra de negócios deve ser adicionado ao seu modelo. Exemplo: Se para implementar a função “Ligar para contato” neste modelo de lista telefônica, o método “telefonar” ficaria em sua classe Active Record.

Este modelo de implementação tem diversos problemas de design. Dentre eles a violação da responsabilidade única do SOLID, o forte acoplamento da sua aplicação ao banco de dados, impedindo qualquer chance de você fazer um real teste unitário, pois você irá precisar estar conectado a um banco de dados para rodar sua suite de testes. E além disso sua model tenta a ficar muito mais complexa do que deveria.

Existem diversas formas de resolver este problema do Active Record e prometo que farei um post falando sobre isso. Mas é importante saber que apesar da praticidade do AR, ele não é uma bala de prata e deve ser escolhido preferencialmente para resolver problemas não muito complexos, como criar, ler, atualizar e excluir um registro.

One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.