Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Laravel 5

O padrão Repositório no Laravel 5

Read Time:4 minsLanguages:

Portuguese (Português) translation by João Paulo (you can also view the original English article)

O padrão repositório (repository) foi introduzido pela primeira vez pelo Eric Evans em seu livro de Design orientado a domínios (Domain-Driven Design). O repositório é, de fato, o ponto de entrada da aplicação para acessar a camada de domínio.

De maneira simples, o repositório permite que o seu código utilize objetos sem que tenha a necessidade de saber como eles são persistidos. O repositório contem toda a lógica de persistência, incluindo o mapeamento das tabelas para os objetos.  Com isso a camada de persistência cria uma visão mais orientada a objeto e deixa o código de mapeamento mais encapsulado.

A única maneira de fazer o seu repositório funcionar no Laravel (como um verdadeiro repositório - Eric Evans Domain-Drive Design) é alterando a ORM padrão do active record para data mapper (mapeamento de dados). O melhor substituto é o Doctrine.

O ORM Doctrine

Doctrine é um ORM (mapeamento de objetos relacionais, do inglês object-relacional mapping) que implementa o padrão de mapeamento de dados e permite que você faça uma separação limpa entre as regras de negócio da aplicação  e a camada de persistência do banco de dados. O Doctrine utiliza DQL, ao invés do SQL. O DQL traz uma linguagem de consulta a objeto, isso significa que ao invés de uma tradicional linguagem de consulta relacional, as consultas serão feitas em termos referente ao objeto.

Isso permite que você escreva as consultas ao banco de dados orientadas a objeto o que ajuda quando a consulta ao banco de dados necessária não seria possível utilizando métodos padrões do repositório. Na minha opinião, o DQL é a maneira mais poderosa de manter uma conexão com o banco de dados.

Doctrine vs. Eloquent

Entidades do Doctrine são apenas uma classe pura do PHP e não criam nenhuma sobrecarga a nenhuma herança do ORM. O Doctrine gerencia suas múltiplas requisições de consulta com a mesma herança sem necessitar chamar o banco de dados, logo, a entidade do objeto existe durante toda a requisição.

Um outro recurso interessante do Doctrine é que ao invés de arquivos de migração para a criação do esquema do banco de dados, o banco de dados é automaticamente criado a partir do reflexo dos metadados em anotações nas entidades. Por outro lado, o Eloquent é menos complicado e bem fácil de se usar.

Uma comparação completa entre eles dois iria necessitar de um artigo separado. Como você pode ver, um objecto Doctrine é mais leve e mais abstrato. Entretanto, o Doctine irá apenas servir para projetos específicos, isso pode te trazer dor de cabeça de vez em quando. Eu acredito que de depende do programador a escolha do melhor ORM para o app.

Criando um Blog

Chegou a hora de criar uma aplicação de blog com o Laravel. Primeiro, vamos instalar o Doctrine. Existe uma ponte que permite a utilização junto com as configurações do Laravel 5. Para instalar o Doctrine 2 no seu projeto Laravel precisamos rodar o seguinte comando:

Como de costume o pacote deve ser adicionado ao arquivo de configuração app/config.php, como um service provider.

O alias também deve ser configurado:

Por fim, temos que publicar a configuração do pacote rodando:

Finalizamos a instalação.

Entidades são uma parte importante da aplicação App\Entities\Post.php:

Agora é hora de criar o Repositório, que foi comentando antes. App/Repositories/PostRepo.php:

O controlador App/Http/Controllers/PostController.php:

Como pode ver, eu utilizei o helper Flash para gerenciar as mensagens (você pode utilizar o do Laravel). Quanto ao Validator, eu preciso acrescentar que você pode criar o seu (como eu fiz) ou utilizar o padrão do Laravel, depende da sua preferência. 

Arquivos de view são os mesmos de sempre. Nessa view de exemplo, o arquivo parece com resources/views/admin/edit.blade.php:

As rotas e outros operadores serão como sempre.

Conclusão

Agora você sabe como criar facilmente um repositório baseado no Doctrine dentro do Laravel 5.0, o que irá trazer diversos benefícios.

Para os que estão apenas começando no Laravel ou estão procurando expandir o conhecimento, site, ou aplicação com extensões, nós temos uma variedade de assuntos que você pode estudar no Mercado da Envato.

Seja o primeiro a saber sobre novas traduções–siga @tutsplus_pt no Twitter!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.