segunda-feira, 13 de setembro de 2010

Módulos em Zend Framework

Estou gostando de estudar o Zend Framework.

Não que ele seja fácil de usar ou que ele tenha um grande material de apoio no site, muito pelo contrário, na minha opinião o material de apoio é fraco e o ZF "per se" é muito desacoplado para ser entendido assim, digamos,  numa olhada.

Entretanto, uma das coisas que me chamou atenção no ZF foram os módulos. Na teoria módulos são pequenas aplicações que fazem parte de sua aplicação maior mas que operam individualmente do todo. Podem ter acesso a todos os itens da estrutura básica e adicionam funcionalidades a aplicação mas devem ser configurados de forma a, caso não sejam necessários, possam ser retirados do todo sem que o todo pare de funcionar.

Como eu sofri um tempo tentando habilitar módulos em minha aplicação ZF resolvi passar a todos um pouco do que aprendi.

Observem a figura (figura 1) ao lado:
1 - Estrutura "padrão" de aplicação no Zend Framework

A estrutura recomendada de uma aplicação no Zend Framework pede que tenhamos um diretório de controladores, um de modelos e um de views. Temos também um de configs (application.ini é encontrado dentro dele).



2- Estrutura de um módulo
Seguindo nas instruções padrão do ZF temos que a estrutura de um módulo deve seguir o mesmo padrão. Ou pelo menos algo parecido com o que segue na nossa próxima figura (figura 2). Como vocês podem ver a idéia é que você sempre siga o conceito MVC.



3 - Exemplo de aplicação com módulos
Desta forma você pode desenvolver todos os módulos de uma aplicação separadamente e depois adicioná-los ao diretório de módulos (normalmente chamado modules) dentro da pasta de aplicação e ter acesso imediato a eles. Separando assim a aplicação em diversos pedaços menores e facilmente corrigidos e/ou habilitados e desabilitados conforme a necessidade. Na prática tendo cada módulo como se fosse uma aplicação menor e independente. 

A figura 3 ilustra um pouco de como uma aplicação com módulos deverá ser montada.

Teoricamente uma aplicação desta forma teria que imediatamente perceber que tem algo instalado e quando ela fosse chamada pelo link correto o controlador correto deveria ser instanciado.

Para que isto deixe de ser teoria e vire realidade, entretanto a configuração correta deve ser feita. Sem ela qualquer chamada para modulo1 ou modulo2 será procurada apenas dentro dos controladores principais da aplicação e não nos módulos que temos.

A minha solução, foi, dentro do config principal da aplicação (application/configs/application.ini). Logo após a linha que indica onde os controladores estão posicionados adicionar a opção "moduleDirectory" para indicar o path dos módulos

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"

Simples, claro e objetivo.
Lembrando que ainda faltam alguns testes quanto as configurações gerais. Li em algum lugar (infelizmente perdi o link) que para que as configurações específicas dos módulos sejam carregadas preciso de mais algumas configurações. Quando chegar lá, eu falo sobre o assunto.

segunda-feira, 6 de setembro de 2010

Início

Ou re-início, talvez.

Se tudo der certo, abaixo deste post estarão todos os outros que fiz no live da msn, não sei ao certo se vou conseguir importa-los, mas, whatever.

A idéia é conseguir um ambiente mais prático para postar textos, idéias e outras coisas.

Abracetas!