DBIx:Class — O ORM padrão para Perl 5

Leonardo Ruoso
Publicado em 01/03/2015

DBIx::Class — Uma rápida introduçã ao ORM padrão para Perl

Introdução

A DBIx::Class ])] é o Object Relational Mapper ou ORM padrão para o Perl 5 e compõe a caixa de ferramentas básicas de todo usuário de Modern Perl]]. Provavelmente os dois principais motivos para o usuário de Perl adquirir fluência na DBIx::Class são ① Object Oriented Programming ou OOP]) e em especial deve dedicar algum tempo para entender o que são Roles (https://www.metacpan.org/pod/Moose::Role)] é um paradígma amplamente aceito para desenvolvimento de software tanto no mercado (leia-se empregos) como na comunidade (leia-se CPAN) e ② grande parte das aplicações comerciais usam bancos de dados relacionais]) é a melhor opção tanto para quem deseja aprender mais sobre SQL como para quem precisa de um servidor de banco de dados confiável e versátil] como principal mecanismo de persistência para objetos de entidade.

A DBIx::Class é um ORM especialmente versátil, pois de maneira oposta à maioria dos ORM disponíveis a DBIx::Class oferece xsuma abstração moderada ]) ou Rose::DB::Object (https:://www.metacpan.org/pod/Rose::DB::Object), que não "esconde" do usuário sua natureza objeto-relacional, ou seja, que a camada inferior é um banco de dados relacional.

A DBIx::Class inova ao oferecer o conceito de ResultSetfn:: Abordaremos o DBIx::Class::ResultSet ([[https://www.metacpan.org/pod/DBIx::Class::ResultSet) em detalhes no capítulo 7], um objeto representando um grupo ou coleção de registros, reduzindo os casos para escrita de código SQL literal —e o esforço adicional para transpor o resultado de consultas ad hoc para objetos]) a ser usado no caso de consultas realmente complexas].

Implementada como uma camada de abstração sobre a DBI])] a DBIx::Class suporta os principais servidores de banco de dados disponíveis no mercado: PostgreSQL (https://metacpan.org/pod/DBD::Pg), SQLite (https://metacpan.org/pod/DBD::SQLite), DB2 (https://metacpan.org/pod/DBD::DB2), Oracle (https://metacpan.org/pod/DBD::Oracle), MySQL (https://metacpan.org/pod/DBD::mysql) etc..

Para que serve um ORM —Object Relational Mapper?

ORM pode ser a contração de Object Relational Mapper ou Object Relational Mapping, a depender do autor. Dessa forma a DBIx::Class é um ORM —Object Relational Mapper— por ser um framework que implementa o design pattern ORM —Object Relational Mapping— e assim oferece ao usuário os recursos de persistência em bancos de dados relacionais, com recursos para mitigar as imprecisões no mapeamento objeto-relational.

De forma bastante resumida a responsabilidade básica de um ORM consiste em persistir o estado de um conjunto de objetos, alterados durante uma transação, em um serviço externo —o servidor de banco de dados— usando SQL —a única linguagem de acesso a repositório de dados amplamente aceita e, naturalmente, de restaurar este estado no futoro.

O problema do casamento de impedências

Embora ORM seja um excelente campo para um debate virtuoso e interessante relacionado principalmente às diferenças ontológicas ente a Teoria dos Conjuntos —para alguns uma teoria fundante dos RDBMS— e a Teoria dos Grafos —para alguns uma teoria fundante da OOP— a maioria de nós, usuários das linguagens de programação e seus ecossistemas, tende a perceber as diferenças de impedância entre OOP e RDBMS como um fato da vida e a buscar na solução de ORM esse casamento de impedências]], algo que a DBIx::Class faz bem justamente por não tentar esconder do usuário este fato .

Para instalar a DBIx::Class em seu computador

A forma mais conveniente de instalar e manter atualizado sua instalação com a DBIx::Class e os drivers necessários ao banco de dados escolhido (DBD::*) é usar a solução de pacotes do seu sistema operacional ou distribuição, especialmente por conta da compatibilidade binária requerida entre os módulos DBD::* e a versão instalada do cliente de banco de dados.

Em um sistema Debian ou derivado, você teria o seguinte exemplo:

aptitude install libdbix-class-perl libdbd-pg-perl
Ou em um sistema OS/X:

sudo port install p5-dbix-class p5-dbd-pg
Por fim, se você não tem acesso administrativo ao sistema operacional ou não utiliza o Perl do SO:

cpanm DBIx::Class DBD::Pg
Lembrando que antes de rodar o comando acima você deverá configurar a localização dos headers do cliente do banco de dados.
blog comments powered by Disqus