Logomarca Downs Master

Utilizando o DRouter em maior escala.

08/11/2016 Artigos 806

Desde que criei o DRouter, tenho tido vontade de colocá-lo em uso em uma aplicação de médio a largo porte, mas não tive a oportunidade até então.

Foi só recentemente com a criação a lumistudio - a agencia digital que abri juntamente com meu amigo Michel -, que pude finalmente realizar meu desejo.

Tratava-se de um site de agencia de viagens em que seriam criadas varias funcionalidades, como reserva de pacotes, integração com pagseguro, promoções relâmpago, painel administrativo, painel do cliente dentre muitas outras coisas. 

Como essa descrição já da a entender, obviamente seria necessária a criação de uma estrutura robusta e organizada para que futuramente a manutenção do projeto fosse feita com facilidade. Foi então que me veio a idéia de usar o DRouter. Afinal de contas ele torna fácil a criação de estruturas MVC. Principalmente se você iniciar o projeto usando o DRouter Boiler Plate.  Que nada mais é do que um repositório com tudo que você precisa pra dar o pontapé inicial em uma aplicação desse tipo.

Iniciamos o repositório no bitbucket e dividimos o projeto em dois branches principais, o front-end e o back-end. Pois precisaríamos, muito provavelmente, do css do site pra algum uso futuro.

Depois de pouco mais de dois dias de estilização do site, terminamos o front-end e foi ai que iniciamos o backend, clonei o repositório do DRouter Boiler Plate e iniciamos a estruturação das rotas e a separação das views. Tudo correu as mil maravilhas até que iniciamos o desenvolvimento do painel de administração.

Um imprevisto surgiu. A forma como o DRouter estava estruturado era a seguinte: Mediante a criação de uma rota e a ligação daquela rota a um controller, o sistema verificava a validade do controller em questão e imediatamente criava uma instancia do mesmo pra que o restante da aplicação pudesse despachá-lo caso necessário. Mas isso criava um problema super irritante. Devido ao stack das rotas, isso significava que qualquer alteração global que eu fizesse em uma das dependencias do projeto injetadas no DRouter via algum dos Controllers afetaria o funcionamento de TODOS OS OUTROS CONTROLLERS NO STACK.

Passei uns dois dias sem reconhecer o problema e com minha cabeça perto de explodir de preocupação. Afinal de contas o site já estava 60% concluído e eu não podia mais voltar atrás. 

Foi então que me veio a solução. ÓBVIA solução, mas que só me ocorreu depois de uma boa noite de sono e varios minutos encarando a tela do editor de texto  em frustração.

Tudo que eu precisava fazer era mudar o local onde tal instancia era criada. Ao invés de cria-la no exato momento da criação da rota, eu deveria cria-la no momento do despache. Dessa forma a verificação da validade do controller apenas verificaria isso, sua validade, enquanto que o método execute do objeto Router ficaria encarregado de criar a instancia e despachar o método.

O problema foi resolvido, como você pode ver pelo print abaixo :D

Correção do bug do milenio

O Projeto já foi concluído e vai pro ar até por volta do dia 20, pois o cliente ainda tem assuntos a resolver até que possa lançar o novo sistema.

Comentários

Flaviano Honorato disse:

Massa mano, deu até vontade de testar esse router.

Lucas Silva disse:

Vai la vei :) é nóis!

Igor Luiz disse:

muito bom

Lucas Silva disse:

Vlw.