Ir para conteúdo

Arquivado

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

Danilo Soncini

Mvc

Recommended Posts

Bem seguinte Galera estou tentando utilizar MVC em um novo projeto que estou trabalhando, porém li muitos artigos e continuo com muitas duvidas com relação ao que é certo e errado de fazer, por isso resolvi postar aqui um conjunto de classes pra que pudesse me dar uma força e ver se esta certo na minha ideia

 

dao.class.php

abstract class dao
{
	private $host = 'localhost';
	private $user = 'root';
	private $pass = '';
	private $charsetQuerys = 'UTF8';
	private $bdConn;
	private $erro = FALSE;
	protected $registros = array();
	protected $query;
	protected $db;
   
	function conectar()
	{   	
		$this->bdConn  =  mysqli_connect($this->host,$this->user,$this->pass);
		mysqli_set_charset($this->bdConn,$this->charsetQuerys);
		if ( $this->bdConn === FALSE )
		{
			$this->erro = TRUE;
		}
		$this->selecionarDB();
	}
	
	function desconectar()
	{
		if (is_resource($this->bdConn))
		{
			mysqli_close($this->bdConn);
		}
	}
	
	public function selecionar()
	{
		$this->conectar();
		if($this->erro === FALSE)
		{
			$registrosSelecionados = mysqli_query($this->bdConn,$this->query)
				
			if (isset($registrosSelecionados) && is_object($registrosSelecionados) > 0)
			{
				while( $row = mysqli_fetch_array($registrosSelecionados,MYSQLI_ASSOC))
				{ 
					$this->registros[] = $row;
				}
				mysqli_free_result($registrosSelecionados);
			}
		}
		$this->desconectar();
	}
	
	function selecionarDB()
	{
		$sel = mysqli_select_db($this->bdConn , $this->db);
		if ($sel === FALSE)
		{
			$this->erro = TRUE;
		}
	}
	public function setQuery($query)
	{
		$this->query = $query;
	}
	public function setDB($db)
	{
		$this->db = $db;
	}
	public function getRegistros()
	{
		return $this->registros;
	}
}

 

enderecosDao.class.php

 class enderecosDao extends dao {
 	
 	public function buscarEndereco($cep)
 	{
 
 		$this->setDB('correios');
 		$this->setQuery("CALL sp_buscaEndereco('$cep')");
 		$this->selecionar();
 		$dados = $this->getRegistros();
 		
 		$retorno = new endereco($dados[0]['ok'], $dados[0]['Logradouro'],$dados[0]['Endereco'], $dados[0]['Bairro'], $dados[0]['Cidade'], $dados[0]['Estado'], $dados[0]['CEP']);
 		
 		return $retorno;
 	}
 }

 

enderecos.class.php

class endereco
{
	private $status;
	private $logradouro;
	private $endereco;
	private $bairro;
	private $cidade;
	private $estado;
	private $cep;
	
	public function __construct($status, $logradouro,$endereco, $bairro, $cidade, $estado, $cep)
	{
		$this->status 		= $status;
		$this->logradouro 	= $logradouro;
		$this->endereco 	= $endereco;
		$this->bairro 		= $bairro;
		$this->cidade 		= $cidade;
		$this->estado		= $estado;
		$this->cep 			= $cep;
	}
	
	public function getCep()
	{
		return $this->cep;
	}
	
	public function getLogradouro()
	{
		return $this->logradouro;
	}
	
	public function getEndereco()
	{
		return $this->endereco;
	}
	
	public function getBairro()
	{
		return $this->bairro;
	}
	
	public function getCidade()
	{
		return $this->cidade;
	}
	
	public function getEstado()
	{
		return $this->estado;
	}
	
	public function getStatus()
	{
		return $this->status;
	}
	
	
}

 

Eu não sei direito se esse é o modelo certo pra conseguir criar um MVC, ainda teria as páginas de Controller e View.

 

Aqui vão as minha duvidas:

 

Onde eu colocaria as validações do endereço? na classe do endereço ou no controlador do endereço? Todas essas classes são apenas o Model correto?

No caso do enderecoDao o retorno tem que ser um objeto endereco?

A classe abstrata dao está correta?

 

E o que mais acharem relevante ao assunto.

 

Obrigado desde já.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, não posso dizer que está bom, mas também não está péssimo.

 

Algumas questões para vocè trabalhar:

 

Em dao.class.php

Como eu faço para alterar os dados da conexão com o banco de dados?

Já que você está usando POO, porque não utiliza a API OO do MySQLi?

function desconectar()
	{
		if (is_resource($this->bdConn))
		{
			mysqli_close($this->bdConn);
		}
	}
Isso está errado. [inline]mysqli_connect[/inline] retorna um objeto MySQLi, não um resource (de novo, USE a API OO).

Onde eu colocaria as validações do endereço? na classe do endereço ou no controlador do endereço? Todas essas classes são apenas o Model correto?

Em nenhum desses lugares. Tudo o que você postou aí são apenas PARTE do Model, você tem uma entidade ([inline]Endereco[/inline]) e uma camada de persistência ([inline]enderecosDao[/inline]), mas falta a classe de negócio ([inline]enderecosModel[/inline], ou [inline]enderecosBusiness[/inline], ou qualquer outra relacionada). Ali sim você irá aplicar todas as regras sobre [inline]endereco[/inline], como a validação dos dados.

No caso do enderecoDao o retorno tem que ser um objeto endereco?

Não necessariamente, o retorno pode ser um array de objetos [inline]enderecoDao[/inline].

A classe abstrata dao está correta?

Ela faz o que propõe? Se sim, está correta.

 

Não duvido que virá gente aqui lhe falar de Padrões de Projeto, Princípios SOLID, etc, etc, etc, mas não vou entrar no mérito dessa discussão agora, a não ser que você já tenha ouvido falar dessas coisas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa Valew, eu realmente queria opiniões sobre como utilizar esses recursos eu dei uma estudada e acabei chegando nessa solução pra mim, pelo menos não está péssimo.

 

A dica mais importante que consegui absorver e usar os objetos de conexão do PHP e pensando agora é realmente o certo a se fazer.

 

Mais uma vez obrigado Henrique pelas dicas vou de uma melhorada.

 

Se alguém tiver mais informações pra acrescentar serão bem vindas.

 

Só um ponto achei difícil achar referencias boas pra estudar se alguém tiver dicas de sites ou livros já vai ser de grande ajuda.

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.