sexta-feira, 5 de novembro de 2010

HMVC


O padrão MVC, que todos frameworks modernos utilizam a abordagem de Model-View-Controller para separar o acesso ao banco de dados, a apresentação e o controle de toda a aplicação; e também vimos como models, views e controllers trabalham juntos no CodeIgniter. Essa é a base de funcionamento doCodeIgniter. Nada além, nada aquém.

Mas, além do MVC, existem uma abordagem diferente, considerada, por alguns, como uma evolução a esse consagrado padrão. Trata-se do Hierarquical Model-View-Controller(Model-View-Controller Hierárquico), mais conhecido como HMVC!

O CodeIgniter 1.7.2 não apresenta suporte nativo ao padrão HMVC e, caso se queira usufruir de seus benefícios, é preciso se valer de códigos da comunidade. Neste artigo, ensinaremos como dar suporte ao HMVC no CodeIgniter usando o Modular Extensions.

Sobre o HMVC

O HMVC é tido como uma evolução do MVC. Basicamente, é como se a estrutura básica de funcionamento do CodeIgniter tivesse um nível hierárquico acima, “englobando” cada tríade MVC, tornando-a modular e, até certo ponto, independente das demais.

Em outras palavras: com HMVC é possível ter “pacotinhos” de models, views e controllers independentes, que funcionam separadamente de outros “pacotinhos”, mas que podem se comunicar com todos eles. É como mostra a seguinte imagem:


HMVC no CodeIgniter

A primeira coisa a se fazer para implementar o HMVC no CodeIgniter 1.7.2 é fazer download do Modular Extensions. Depois de baixá-lo, você verá que existem 2 pastas no arquivo compactado: “core” e “third_party“. Proceda da seguinte maneira:

§ Coloque a pasta “third_part” dentro da pasta “application”

§ Coloque os 3 arquivos da pasta “core” (não a própria pasta!) dentro de “application/libraries”

§ Crie a pasta “modules” dentro da pasta “application”

Pronto, agora você já tem uma estrutura pronta de HMVC no CodeIgniter!

Atenção para algo muito importante: ao implementar a estrutrura de HMVC no CodeIgniter com o Modular Extensions, você abre mão da estrutura tradicional do CI. A partir de agora, você deve criar subdiretórios dentro de “modules” com seus “pacotinhos” de tríades MVC. Ou seja, a partir de agora, os diretórios “models”, “views” e “controllers”, que ficam dentro da pasta “application”, não mais necessitam ser usados.

Por exemplo, vamos supor que você utilize uma tríade para exibição de livros de um site ou sistema virtual, qualquer. Neste caso, poderia usar uma estrutura como esta:

§ application/modules/livros/

§ application/modules/livros/controllers/

§ application/modules/livros/models/

§ application/modules/livros/views/

E, dentro dessa estrutura, mexer normalmente com os models, views e controllers. Em relação à estrutura de URLs, nada se altera; dentro do exemplo, se tivéssemos um controller “listar” dentro de application/modules/livros/controllers/, este seria acessado via (usando a técnica explicada no artigo Dicas básicas de configuração do CodeIgniter para retirar o segmento “index.php”):

Quanto à configuração de $route['default_controller'] em application/config/routes.php, pode ficar tranquilo, já que, também, nada se altera: coloque o nome do controller e pronto.

Conclusão sobre HMVC no CodeIgniter

Talvez as maiores vantagens da abordagem HMVC sejam a praticidade e facilidade de reaproveitamento de códigos. Para o caso de um módulo desenvolvido precisar ser usado em outro projeto, simplesmente copie o módulo em questão e cole na nova instalação do CodeIgniter (provida de HMVC e mesma estrutura de banco de dados, obviamente) e pronto! Nada mais precisa ser feito!

Não é só porque o HMVC é considerado como uma “evolução” por alguns que seja preciso utilizá-lo em todo e qualquer projeto. Entretanto, a praticidade de se usar módulos prontos de outros projetos é notável e pode, sim, fazer a diferença num cumprimento de um prazo mais apertado! Se for o caso, não hesite em se valer da praticidade do padrão HMVC!



Um comentário:

  1. Ótimo post...

    Essa estrutura eu tinha em mente desde quando comecei a desenvolver... Imaginemos da seguinte forma: toda aplicação é composta por partes que juntas formam a aplicação...Quando dividimos, trabalhamos com mais atenção em cada parte, sem falar que pode ser aproveitada,como também ajuda na formação do profissional, pois nos dá a possibilidade de desenvolvermos módulos sem ter uma aplicação definida...

    ResponderExcluir