Reinaldo Mendes Desenvolvedor Web - Design Pattern Adapter - Zend Framework
Design Pattern Adapter Utilizado principalmente na construção de Frameworks Exemplo com Zend Framework Experiência em desenvolvimento com frameworks, Desenvolvedor MVC em php
Reinaldo Barcelos Mendes BH MG BR BR
Design Pattern Adpater aplicado a Frameworks de terceiros Exemplos com Zend Framework Reinaldo Barcelos Mendes
Caro leitor,Venho compartilhar um pouco da minha experiência com design patterns para desenvolvimento.
Com a crescente demanda de tempo e produtividade, surgiu o mercado de Frameworks terceirizados, eles fornecem uma base de código que agiliza e melhora o desenvolvimento das aplicações.
Entretanto temos um incoveniente: Como garantir que sua aplicação irá funcionar se o Framework for atualizado?
Neste contexto entra o Padrão Adapter: o principal problema que pode, e acontece, é de alguma funcionalidade contida em uma versão presente do Framework, não ser mais suportada no futuro.
Se você tem uma aplicação desenvolvida utilizando esta funcionalidade não poderá atualizar o Framework sem fazer uma intervenção na sua aplicação.
Com o Padrão Adapter você também terá de fazer esta intervenção, mas esta será localizada em apenas um lugar e sua aplicação já estará rodando sobre a nova versão.
Vejam o exemplo abaixo:
Suponha que o Zend Framework deixe de dar suporte ao método Zend_Db_Table_Abstract::fetchAll() e o método recomendado seja Zend_Db_Table_Abstract::findAll()
Então vamos dizer que você tem uma aplicação com 30 Controllers, 30 modelos e etc...
Exemplo de código comprometido por alteração no Framework
DbTable Clientes: <?php class Application_Model_DbTable_Clientes extends Zend_Db_Table{ ... }
ClientesController: <?php class ClientesController extends Zend_Controller_Action{ public function indexAction(){ $tabela = new Application_Model_DbTable_Clientes(); $rowset= $tabela->fetchAll(); ... ... } }
Para cada classe que tiver esta chamada teremos que fazer a alteração.
- O problema: Como garantir que sua aplicação funcione mesmo quando houver mudança em uma base de código terceirizada?
- A solução: Criar uma camada intermediária entre a aplicação e a base de código, desta forma em uma alteração no código terceirizado, o problema poderá ser corrigido fazendo uma intervenção nesta camada intermediária.
Exemplo de adapters utilizando herança
Adapter ExtZend_Db_Table: (versão anterior à atualização do Framework) <?php class ExtZend_Db_Table extends Zend_Db_Table{ }
Adapter ExtZend_Db_Table: (com as devidas correções para suportar o novo Framework) <?php class ExtZend_Db_Table extends Zend_Db_Table{ public function fetchAll($where = null, $order = null, $count = null, $offset = null) return $this->findAll($where,$order, $count,$offset); } }
DbTable Clientes: <?php class Application_Model_DbTable_Clientes extends Zend_Db_Table ExtZend_Db_Table{ ... }
ClientesController: <?php class ClientesController extends Zend_Controller_Action{ public function indexAction(){ $tabela = new Application_Model_DbTable_Clientes(); $rowset= $tabela->fetchAll();//sem nenhuma alteração ... ... } }
Como pode ser observado nos exemplos acima, foi criada uma classe ExtZend_Db_Table que estende de Zend_Db_Table sem nenhuma funcionalidade, apenas servindo de camada intermediária para uma possível alteração futura, assim a aplicação desenvolvida não utiliza diretamente as classes do Zend Framework, mas as classes do ExtZend. Referências:
Muito boa a matéria, você tem boa didática e aborda o assunto de forma simples e clara.
ResponderExcluirParabéns, sucesso!
Ae Reinaldo, legal o seu blog, também programo um pouco em PHP, to seguindo o seu blog, segue o meu também!
ResponderExcluirhttp://thiago-programmer.blogspot.com/
Abraços