Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Thiago Dias_132983

Como usar Registry em MVC?

Recommended Posts

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?


Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.