Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Estava lendo esse tópico, sobre o uso do sigleton, vi a solução postado pela João Batista Neto sobre o uso do Registry, como seria a implementação da mesma num padrão MVC? como seria passada a instância do registry para toda a aplicação, sendo que eu só uso conexão com o banco em alguns controllers..., essa é a maneira que faço no meu controller:
<?php
class Index extends Controller {
public function index() {
$connection = new Connection();
$o_connection = $connection -> Connect(); /*objeto do banco de dados*/
$testeModel = new testeModel($o_connection); /*passando o objeto de conexão com o banco, oque seria uma "Dependency Injection" */
$testeModel -> setTable('blabla');
$getAll = $testeModel->getAll();
$setData = array('getAll' => $getAll);
$view = new View('Index', 'Header', 'Footer', $setData);
$view -> Render();
}
}
Se eu usasse o Registry (como foi falado no tópico ) substituindo o objeto $o_connection, a única diferença seria, ex:
$registry = Registry::getInstance();
$registry->set( 'Banco de dados' , new Connection() ); //Usando sua própria classe para criar o objeto.
$db = Registry::getInstance()->get( 'Banco de dados' );
Mas isso seria só no controller no qual eu estou chamando, nesse caso existe alguma vantagem?
Bom, primeiramente seu controller não deveria nem se quer saber que você faz uma conexão com o banco de dados. Apenas seu model precisa ter esse conhecimento.
Além do mais, o próprio padrão registry nada mais é do que um singleton disfarçado. O que você realmente precisa é de Injeção de Dependências.
Se você sabe ler inglês, recomendo este artigo do Martin Fowler (tem uma tradução disponível aqui, não cheguei a ler pra ver se é boa).
Para começar com injeção de dependências, eu recomendo o Pimple.