Ir para conteúdo

Arquivado

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

AndrePls

MVC - model vs controller

Recommended Posts

Estou fazendo um mini-framework PHP MVC acompanhando umas vídeo aulas, porém ainda continuo com algumas dúvidas: oque colocar no controller e oq colocar no model

 

exemplo, se eu tenho um sistema de noticias aonde eu posso ADICIONAR/EDITAR/ELETAR/LISTAR os dados oque eu colocaria no model? e no controller?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O model é que faz o trabalho, o controlller geralmente apenas instancia e passa objetos de um para o outro, mas não contem nenhuma lógica em si.

 

Ex.:

 

class Controller
{
    public function fomularioContato()

    {
        $form = new FomularioContatoModel();
        $view = New FormView($form);
    } 
}

 

No controller acima cada método monta uma página do site, no método implementado temos um Fomulário de contato. Note que o controller apenas faz a ligação da camada model com a camada view.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O MVC tem como objeto ajudar o desacoplamento das partes do sistema. Em teoria, por exemplo, você pode alterar toda a camada view sem modificar uma linha da sua camada model.

 

Nos temos o Model que é parte que faz o trabalho duro e View responsável pela apresentação na tela, o controller é a camada intermediaria entre eles. Simplificando de maneira tosca: A classe model faz um calculo e a view da o "echo" no resultado.

 

Você precisa entender alguns conceitos antes de partir para o estudo do MVC: Saber usar e criar classes, entender poliformismo, desacoplamento, injeção de dependência. Estudar os princípios Solid como o de responsabilidade unica. Esses conhecimentos vão lhe fornecer uma boa base para o entendimento do MVC, se você não os domina volte um pouco seus estudos para eles que mais tarde MVC vai se tornar mais claro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Andre, não se ofenda. Usei o "se você não os domina" justamente por não saber o seu nível de conhecimento. Estou tentando colaborar com você. Entenda tudo que eu escrevo como em "tom tranquilo e sereno".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque no Model tudo o que for relacionado à suas regras de negócio e persistência. Por exemplo, se estiver trabalhando com banco de dados, adicione suas rotinas CRUD no Model:

 

 

<?php
class NewsModel
{
    private $pdo;
    
    public function __construct( PDO $pdo )
    {
        $this->pdo = $pdo;
    }

    public function create( News $news )
    {
        $stmt = $pdo->prepare('INSERT INTO `news` (`title`, `description`, `created_at`) VALUES (:title, :description, NOW());');
        $stmt->bindParam( ':title', $news->getTitle(), PDO::PARAM_STR );
        $stmt->bindParam( ':description', $news->getDescription(), PDO::PARAM_STR );
        
        return $stmt->execute();
    }

    public function read( News $news )
    {
        $stmt = $pdo->prepare('SELECT * FROM `news` WHERE `id` = :id;');
        $stmt->bindParam( ':id', $news->getId(), PDO::PARAM_INT );
        
        if ( $stmt->execute() )
            return  $stmt->fetchAll();
        else
            return false;
    }

    public function update( News $news )
    {
        $stmt = $pdo->prepare('UPDATE `news` SET `title` = :title, `description` = :description, `updated_at` = NOW()) WHERE `id` = :id;');
        $stmt->bindParam( ':title', $news->getTitle(), PDO::PARAM_STR );
        $stmt->bindParam( ':description', $news->getDescription(), PDO::PARAM_STR );
        $stmt->bindParam( ':id', $news->getDescription(), PDO::PARAM_INT );
        
        return $stmt->execute();
    }

    public function delete( News $news )
    {
        $stmt = $pdo->prepare('DELETE FROM `news`  WHERE `id` = :id;');
        $stmt->bindParam( ':title', $news->getTitle(), PDO::PARAM_STR );
        $stmt->bindParam( ':description', $news->getDescription(), PDO::PARAM_STR );
        $stmt->bindParam( ':id', $news->getDescription(), PDO::PARAM_INT );
        
        return $stmt->execute();
    }
}

Acredito que você deva fazer as validações do tipo 'Título não pode ser em branco' na Model, no próprio código acima, ou criar uma nova 'camada', validando os dados antes e depois persistindo no banco de dados.

 

No controller, a única coisa que você vai fazer é verificar se uma requisição HTTP é do tipo POST quando tem que ser POST, se os dados de um formulário foram enviados vazios etc, além de fazer a comunição com a Model e a View. Você intercepta a requisição do usuário, instancia a model correta, recupera os dados necessários e instancia a view correta para a requisição do usuário, imagino que seja isso... Também estou estudando e aprendendo...

 

 

Cara, eu sei usar classes, agora se tu n vai ajudar, nem vem no tópico.

Acho que não foi nesse sentido que ele falou, eu apreciei a dica dele...Tente não ser tão deselegante com quem quer te ajudar e te faz críticas construtivas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você diz "saber usar classe", então não sabe OOP. Há muitos, mas MUITOS fatores além de simples classes falando em OOP. Existe o fator de responsabilidade, desacoplamento, coesão, estado, etc.

 

Não seja arrogante a ponto de dispensar ajuda. O fórum é um lugar para compartilhar conteúdo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, eu sei usar classes, agora se tu n vai ajudar, nem vem no tópico.

 

Putz, sério que a essa altura do campeonato tenho que ver neguim que ACHA que manja dos paranauê dar piti aqui porque alguém tentou ajudar?

 

Kiança, OOP é MUITO MAIS do que simplesmente declarar uma classe aqui, outra ali. MVC é um padrão ARQUITETURAL, que exige um poder de abstração muito grande, uma compreensão completa dos princípios SOLID, que você OBVIAMENTE não tem.

 

Humildade é a chave sempre, champs. :natalwink:

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.