Estou utilizando (aprendi) corretamente o padrão MVC?

0 respostas
phpmvc
Conrado_Game

Olá. Há alguns anos na faculdade tive uma aula prática de padrões com PhP, e uma delas foi o MVC. Aprendi com meu professor o padrão MVC, mas não sei até hoje o mesmo foi ensinado da maneira correta. Sempre que vejo projetos com padrões MVC estão um pouco diferentes do meu, na verdade, a classe Controller parece não fazer muito sentido no que eu aprendi.
Gostaria que dessem uma olhada na forma que eu programo em MVC e dizer se estou fazendo da maneira correta ou se teria como melhorar, pois realmente estou perdido, principalmente na parte da Controller e da Model.

Na Model:

class ModelProduto{

private $id;

private $descricao;

private $valor;
public __construct(){

// nada por aqui no momento

}

protected function inserirProduto($produto){
// realiza conexão com o banco
// executa query no banco passando valores $produto->id, $produto->descricao, $produto->valor

// retorna boolean se foi inserido com sucesso no banco ou nao
  return $resultado;

}

protected function buscarTodosProdutos(){

// realiza conexão com o banco

// traz os registros e armazenam em algum lugar, no caso, num array

$produtos = new Array();

foreach(resultado in lista){

$produto = new Produto();

$produto->id = resultado[id];

$produto->descricao = resultado[descricao];

$produto->valor = resultado[valor];

$produtos[] = $produto;

}

return $produtos;

}

// metodos Get e metodos Set em visibilidade public…
}

Feito isso, na Controller que é onde eu tenho mais dúvida, aprendi a estruturá-la da seguinte forma:

class Produto extends ModelProduto{

// as vezes aqui um método ou outro (geralmente static) para montar um objeto ou fazer algo extra

// sempre tenho a função de montar objetos para ser usada mais tarde

public static criaObj($descricao, $valor){

$produto = new Produto();

$produto->setDescricao($descricao);

$produto->setValor($valor);

return $produto;

}
public function inserirProduto($produto){

return parent::inserirProduto()

}
public function buscarTodosProdutos(){

return parent::buscarTodosProdutos()

}

}

Uma vez estruturado este MVC, na View, caso eu tenha um formulário para cadastrar este produto, ou exibí-lo, eu faço o seguinte:

<html>
<header></header>
<body>
<form method=“POST” action=“manipulaProduto.php”>
<!-- formulário aqui -->
</form>
</body>
</html>

Consequentemente eu crio outro arquivo em outra pasta chamado manipula, onde eu verifico os dados dos formulários e mando pra controller, mais ou menos assim:

if(isset($_POST[‘formularioEnviado’])){

inserir();
}

function inserir(){

//crio variaveis para pgar os $_POST e validar os campos,
//verificar se não existem nulos, poucos caracteres etc

$validado = validarCampos();

if($validado){

// se passar pelas validações, chamo o inserir do Controller

$inserido = inserirProduto();
if($inserido){
  	// envio alguma modal para a view informando que tudo foi validado com sucesso e demais eventos se necessário
  	return $inserido;
  }

}

// envio alguma modal para a view informando erro no formulario se não entrar no if
return $erros;

}

function validarCampos(){

// valida os campos e retorna para a função acima
}

function inserirProduto(){

// chamo o Controller e crio um objeto

$produto = Produto->criaObj($_POST[descricao], $_POST[valor])

$resposta = $produto->inserirProduto($produto);

return $resposta;

}

Esse é o padrão que eu utilizo em meus projeto. Não foi tudo que aprendi na faculdade, a maior parte eu desenvolvi minha maneira própria de programar, mas a questão é o padrão MVC. As vezes acho que esse manipulaProduto.php faz o papel que o Controller deveria fazer, pois o controller nada mais faz que transferir uma função para a Model, o que chega a ser quase inutil ao meu ver.
Podem me dizer como anda essa minha estrutura, se algo poderia ser melhorado ou se o padrão MVC está realmente errado? Lembrando que essa estrutura que criei aqui para apresentar meu problema é algo extremamente resumido e não cheguei a rodar os códigos, mas esta é a forma que programo atualmente.
Obrigado!

Criado 17 de maio de 2017
Respostas 0
Participantes 1