Descomplicando o Zend Framework 2 – conceitos
Autor: Diego Sousa | Publicado: 2014-11-17T15:38:00-08:00


Primeiro artigo do “mestre dos padrões”, o ZF2 (de Zend Framework 2). E pra começar queria descomplicar as coisas para quem está começando, então vou escrever um pouco sobre Módulos, Eventos, Serviços e Abastração, quando eu falar sobre MVC vou entender que você já conheça o padrão,&nbsp;já falei sobre isso aqui no blog.

Vejo muita comparação sobre porque usar o ZF2 ao invés do CakePHP, ou o CI (Code Igniter) ao invés do Zend Framework, e não da pra você comparar simplesmente porque alguém falou que era melhor, afinal, até os melhores podem errar, cabe a você entender a fundo para poder escolher entre os muitos fatores que nem sempre se resumem ao código (ainda temos prazos, preços, preferência do patrão, preferência por questões didáticas e muitos outros fatores).

Antes de sair por ai tentando escrever códigos para o Zend Framework 2 (e quebrar a cara na maioria das vezes) devemos entender os “conceitos” por traz do framework.

Módulos

Módulos são conjuntos de MVC que resolvem um assunto específico, por exemplo, se você for criar um site para imobiliária teria os módulos:

Imoveis
Corretores
Usuários


Aonde cada um cuida exclusivamente do seu assunto e guarda as informações e configurações que lhe são pertinentes para trabalharem, esse conceito de modularidade é excelente porque além de organizar e facilitar a manutenção permite que você compartilhe seu módulo, use módulos de terceitos e delegue mais facilmente tarefas a sua equipe.

Então se você leu até aqui entendeu que módulo não tem nada a ver com Model (M do MVC).

Eventos

Se eventos não foi a grande sacada do ZF2 então não sei o que seria, o conceito de eventos é que quando algo acontece você deve tomar uma ação expecífica, para ver de uma forma mais simples vou usar o Jquery:



view plaincopy to clipboardprint?


$('seletor').click(function(){&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;alert('oi');&nbsp;&nbsp;
});&nbsp;&nbsp;



Este código diz que quando clicarmos no “seletor” ele deve exibir um alerta com o texto “oi”, isso é simples e ajuda a entender o conceito da coisa, vou explicar.

No nosso código o clique é um&nbsp;sujeito&nbsp;ou seja, ele fica olhando quando vamos clicar no seletor e quando fizermos ele avisa ao&nbsp;observador&nbsp;(neste caso ele mesmo) que vai fazer algo com essa informação, é simples e prático.

No Zend Framework o evento criado fica alí, esperando algo acontecer, e quando acontece o módulo avisa e algum observador (que pode ser um controller ou qualquer coisa) vai tomar as devidas providências.

O Evento em sí não é a solução para nada ele apenas informa que algo aconteceu.

Veja o que diz a documentação do Zend Framework 2 sobre isso:

O EventManager é um componente projetado para os seguintes casos de uso:

Implementar simples padrões sujeito/observador.Implementação de projetos Aspect-Oriented.Implementação de arquiteturas orientadas a eventos

A arquitetura básica permite ligar e desligar os ouvintes para eventos nomeados, tanto em uma base por exemplo, bem como através de coleções compartilhadas, desencadear eventos ou interromper a execução de ouvintes.

Aqui a página oficial com um exemplo de código.

Camada de serviços

A service layer (camada de serviços em english) é uma das camadas que formam o model no ZF2, é bem simples de entender e prática de se usar depois que pega o jeito. Os serviços no Zend Framework 2 guardam todas as regras de negócio da nossa aplicação, por exemplo, uma classe que cuide dos nossos dados no banco, ou seja, traga as funções de inserir, editar, ler ou remover um dado (famoso CRUD) no banco, mas claro existem muitos outros exemplos, mas este esta bom por enquanto.

Sempre que um serviço é criado no ZF2 e registrado, fica, por exemplo, disponível para o Controller (C do MVC) acessar e com isso executamos as “transações” no banco de dados, claro que o Model não se resume apenas nisso, ainda temos todo o processo de mapeamento do banco e outros passos, mas vou falar disso em um artigo exclusivo para o Doctrine.

Abstração

E eu deixei o mais legal pro final, abstração é (esquecendo programação) o processo de extrair do conteúdo algo que possa ser mais interessante, é sinônimo para retirar, entender, compreender, separar ou desaproximar. Em outras palavras é o processo de retirar (resumir) algo que ainda possa ser entendido. Em programação, abstração é criar uma classe com funções comuns a várias outras que possa ser reutilizada.

Imagine agora o nosso queridíssimo CakePHP, todos os controllers extendem a classe AppController e com isso podemos criar recursos úteis a todos os outros controllers, o mesmo com models e a AppModel, helpers, behaviors, components e quase tudo nele, embora não seja a mesma coisa o conceito é bem próximo e isso já é mais que o suficiente para você compreender abstração.

Isso te ajuda a não repetir código, a camada de abstração cuida de deixar os seus métodos prontinhos para serem usados apenas extendendo uma classe.

Quer ver um exemplo fantástico, serviços, imagine você ter um serviço para o CRUD de produtos de uma loja virtual, um para comentários nestes produtos, um para as imagens e outro para categoria, abstraindo os serviços você consegue criar uma classe genérica com todos os Creates, Reads, Updates e Removes, e apenas extender a cada uma das classes de serviços, você ganha tempo com isso, economiza código e com a classe de abstração correta você pode apenas reaproveitar em outros modulos.

Praticamente tudo no Zend Framework 2 pode ser abstraído.

Conclusão

Ainda não falamos de todos os conceitos e padrões que o Zend Framework 2 aborda, mas estes são os mais falados, com o tempo vamos construir aqui uma biblioteca de artigos tão boa quanto é a de CakePHP hoje, mas espero a contribuiçãod e vocês nisso, postem sugestões nos comentários ou me manda por email, e não esquece de se cadastrar no meu site de cursos, o&nbsp;WevDevBr.