Continuando nossa série sobre Programação Orientada a Objetos em PHP, hoje iremos mostrar um dos padrões de projetos mais utilizados no mundo o MVC (Model-View-Controller), com a abordagem MVC temos projetos ainda com mais facilidade para se dar manutenção devido a grande organização do código, talvez seja a abordagem que mais se aproveita os conceitos de orientação a objetos, separando toda a lógica de negócio das camadas de visualização e de controle, no decorrer do artigo você entenderá bem o funcionamento deste padrão, além de conhecer bons frameworks que utilizam o mesmo.

php orientado a objetos

O QUE É MVC?

MVC é o Acrônimo para Model-View-Controller, que é uma arquitetura que visa fornecer uma maneira de separar as funcionalidades envolvidas em uma aplicação de maneira a melhorar a manutenção do sistema. Atualmente o MVC é considerado um padrão em engenharia de software utilizado por praticamente todos os frameworks modernos e nos principais projetos em todo o mundo.

No modelo MVC a camada denominada Model representa os dados da aplicação, nesta camada estarão todas as regras de negócio envolvidas no sistema, lá estarão todas as lógicas necessárias para acessar e atualizar os dados da aplicação. O modelo fornece ao controlador acesso para que o mesmo possa utilizar as funcionalidades do model em sua própria lógica. No modelo podemos encontrar as definições de dados, como tamanho de colunas, tipos de dados, validações, buscas e tudo que está relacionado a dados.

O controlador guarda todo o comportamento da aplicação, nele estão todas as funções que irão interpretar o que o usuário deseja fazer na aplicação, depois de interpretar o que o usuário desejar fazer dentro da aplicação, o mesmo utiliza-se de funções do model para acessar os dados necessários e então completar a requisição. Para exemplificar, em aplicações web estas ações são cliques em botões, seleção de um item no menu, salvar dados entre outras coisas. Com base nestas escolhas do o usuário o controlador também determina qual visualização dar para aquela ação e então chama a view, que iremos falar no próximo parágrafo.

MVC em PHP

A visualização (view) define como os dados serão mostrados para o usuário, toda a estilização da tela, bem como onde utilizar cada dado enviado pelo controller é definido nas visualizações. Com isso podemos concluir que caso desejamos alterar o modo como os dados são mostrados, não precisamos alterar todo o sistema, podemos alterar apenas a camada de visualização sem afetar o sistema como um todo, estes aspectos fazem do MVC uma arquitetura com facilidade para manutenção.

PORQUE UTILIZAR O MVC?

Com o passar do tempo, as aplicações foram ficando cada vez mais complexas, isso levou a uma dificuldade enorme de se atualizar estas aplicações, tornando numa verdadeira dor de cabeça qualquer mudança e/ou manutenção nestes sistemas. Com isso a arquitetura MVC visa dividir o problema, em partes menores e totalmente separadas, fazendo com que a lógica seja abstraída, tudo isso facilita a manutenção seja na questão do layout da aplicação, seja na regra de negócio, seja na ação dos controladores. Isto permite a divisão da equipe, fazendo com que o processo de desenvolvimento do sistema seja muito mais rápido e escalável.

Benefícios do uso do MVC

  • Grande aproveitamento de código;
  • Facilita a manutenção de códigos existentes e também a adição de novos recursos nas camadas;
  • Código limpo;
  • Divisão de atividades dentro da equipe;
  • É um padrão de projeto utilizado em todo o mundo;
  • Existem dezenas de frameworks utilizando esta tecnologia.

FRAMEWORKS PHP QUE UTILIZAM MVC

Um framework é uma abstração que une vários códigos com o intuito de prover uma funcionalidade genérica, para alcançar uma funcionalidade específica se deve utilizar as funções providas pelo framework. A utilização de frameworks faz com o processo de desenvolvimento seja muito mais rápido, pois diversos códigos que deveriam ser escrito, caso a aplicação fosse desenvolvida desde o princípio são apenas customizadas se utilizando o conjunto de códigos provido por este framework.

Existem divesos frameworks de muita qualidade em PHP, e iremos citar os principais, os mais utilizados no mercado.

  • CakePHP
  • CodeIgniter
  • PRADO
  • Symfony
  • Yii Framework
  • Zend Framework - da ZEND, mantenedora oficial do PHP 5 no padrão MVC

Dentre os que estão nesta lista os que considero de mais qualidade são o Yii Framework e o Zend Framework, o primeiro iremos continuar abordando nesta série de artigos com o intuito de demonstrar a utilização deste framework visando automatizar o processo de desenvolvimento de software. Certamente utilizando um framework de qualidade e que utilize o padrão MVC, você terá recursos para desenvolver aplicações de qualidade e que terão facilidade para ser mantidas.

DEMONSTRAÇÃO DO MODELO MVC

Neste tópico iremos demonstrar a utilização do MVC, atente para o fato de ser apenas uma demonstração, o objetivo não é de realizar o desenvolvimento de uma funcionalidade, isto será feito com a ajuda de frameworks mais a frente, que é a maneira mais prática e rápida de se fazer. Apenas mostraremos de uma maneira abstraída como funciona o MVC de uma maneira mais perto do que um desenvolvedor entenda.

Modelo MVC

Neste exemplo iremos fazer a lógica necessária para o cadastro de clientes, primeiro definiremos o model, que vimos mais acima, guardará  toda a regra de negócios, ou seja, tipos de dados, funções relativas ao resgate e atualização de informações.

<?php
class Cliente {
    // propriedades da classe objeto
    private $nome;
    private $endereco;
    private $email;
    private $telefone;

    // setters e getters
    public function setNome ($nome) {
        $this->nome = $nome;
    }
    public function getNome () {
        return $this->nome;
    }

    public function setEndereco ($endereco) {
        $this->endereco = $endereco;
    }
    public function getEndereco () {
        return $this->endereco;
    }

    public function setEmail ($email) {
        $this->email = $email;
    }
    public function getEmail () {
        return $this->email;
    }

    public function setTelefone ($telefone) {
        $this->telefone = $telefone;
    }
    public function getTelefone () {
        return $this->telefone;
    }
    public function salvar(){
       // lógica necessária para salvar
    }
    public function excluir(){
      // lógica necessária para excluir
    }

    public function selecionar(){
      // lógica necessária para selecionar
    }
}
?>

Esta é a classe Cliente, é o model que guardará todas as informações pertinentes ao Cliente, veja que todos os atributos são private, ou seja, não conseguimos através de outras classes alterar estes valores, se quisermos efetuar uma alteração precisamos utilizar as funções de set, da mesma forma se quisermos pegar o valor precisamos de uma função de get. Isso resguarda os valores e impede que a lógica se misture mais a frente. Temos também as funções de salvar, excluir e selecionar, não codificaremos neste momento, pois isso seria um trabalho desnecessário, já que visamos utilizar um framework para agilizar este trabalho.

<?php
	require("../model/cliente.php");

	// guardando na variável p os dados provenientes do formulário
	$p = $_POST;

	$cliente = new cliente();

	// os valores são passados para o objeto
	$cliente->setNome($p['nome']);
	$cliente->setEndereco($p['endereco']);
	$cliente->setEmail($p['email']);
	$cliente->setTelefone($p['telefone']);

?>

Este é nosso controlador, ele faz basicamente as atividades de decidir o que executar de acordo com a ação que o usuário toma dentro do sistema, neste caso ele irá apenas atribuir às propriedades da classe cliente todos dados resgatados do formulário preenchido na view, o qual iremos já analisar. Veja que em nenhum momento o controlador acessa diretamente as propriedades do modelo, ele apenas utiliza métodos do próprio modelo para alterar os valores destes atributos. Essa técnica causa uma abstração muito positiva no projeto, pois se quisermos alterar algum aspecto relativo a atribuição dos valores as propriedades da classe, sabemos que poderemos ir diretamente até o modelo sem precisar realizar quaisquer alteração no controller.

Algo que muitos desenvolvedores fazem de forma errada é colocar a validação dos dados, como CPF no controlador, como isto possui relação com os dados, esta validação deve ser feita no modelo, através de regras criadas, veremos isso com mais clareza, quando estivermos construindo uma aplicação completa.

<form action="" method="post">
    <!-- Caixas de texto que receberão os valores da classe cliente-->
    Nome: <input type="text" name="nome" />
    Endereço: <input type="text" name="endereco" />
    Email: <input type="text" name="email" />
    Telefone: <input type="text" name="telefone" />
    <button type="submit">Enviar</button>
</form>

<?php
/*
 * caso haja o preencimento dos dados e a submissão do formulário, o
 * controlador, será chamado para interpretar a ação
 */
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    require("../controller/cliente.php");
}
?>

Este é nosso arquivo de visualização, nele está tudo o que o usuário irá ver e uma chamada ao controlador, caso o mesmo preencha os dados e realize a submissão do formulário, é possível perceber como o código do layout ficou bem simples e está quase 100% HTML, apenas é realizado a chamada ao controlador para que tome a ação caso aja a submissão do formulário. Isso deixa o código muito limpo e separado, com isso poderemos facilmente entregar esta parte para um web design que não tenha muitos conhecimentos de desenvolvimento de aplicações, deixando toda a parte de programação com uma outra equipe ou desenvolvedor.

CONCLUSÃO

Neste artigo pudemos conferir todo o potencial da programação orientada a objetos utilizando o padrão MVC, podemos constatar que é uma maneira muito mais prática e profissional de se desenvolver fazendo separação entre as lógicas necessárias para a construção de uma aplicação. Apesar de sempre mostrarmos exemplos de aplicações web, o padrão MVC é utilizado também em aplicações desktop e móveis. Nos próximos artigos entraremos fundo no desenvolvimento de aplicações web utilizando o framework Yii, que possibilita o desenvolvimento de aplicações totalmente orientado a objetos e utilizando o padrão MVC, esqueça todo o esforço de programar códigos que já estão disponíveis e foque na regra de negócio de seu sistema, até lá.

Abraços!

 

Autor: Jair Rebello

Blog do Autor | Artigos do Autor:

Analista de Sistemas, empreendedor e blogueiro que dedica parte de seu tempo para a partilha de material de grande qualidade relacionados a Wordpress, SEO, Tableless, JQuery, PHP, Android e outras tecnologias mais. Pode me encontrar no Escola Sites ou O Android.

  • Explorer - Factory Construction & Ship Building Joomla Theme
  • Justice - Attorney and Law Firm Joomla Template
  • OwnFolio - One Page Personal Portfolio / vCard / Resume / Showcase Joomla Template
  • Big Business - Responsive Template
  • Merab - Creative Multipurpose Drupal 8 Theme
  • Fitness Academy Joomla Template
  • Fruition - Business Joomla Template
  • Educate | Education & Courses, Kindergartens Joomla Template
  • Constructive - Contractors Multipurpose Joomla Landing Page Theme
  • Vina Bubox - VirtueMart Joomla Template for Online Stores
  • BizOne - One Page Parallax Drupal Theme
  • LawHouse - Responsive Lawyers Attorneys Joomla Template

Gostou deste artigo? Então torne-se fã do Blog no Facebook!



Comentários dos Alunos


  1. António Cabral
    23 de junho de 2013

    Muito interessante o artigo.
    Claro, conciso e direto. Permite perfeitamente a partir daqui passar-se para outros tutoriais que exijam um pouco mais de conhecimento.
    Cumprimentos



  2. Cassio Henrique da Silva
    1 de julho de 2013

    Muito bom, parabéns continue assim ajudando aos outros.



  3. William Wiechorek
    19 de julho de 2013

    Dando continuidade a elogios, muito bom o artigo, não só a contexto e forma de abrangência, como explicativo demonstrativo e também muito bem escrito.



  4. Marcelo
    26 de agosto de 2013

    Muito bom!!!muito bom!!!

    Eu gostaria, se possível, de uma descrição de arquitetura de desenvolvimento PHP com Zend, com uma forma prática e eficiente de dividir as camadas e de deixar a camada de banco de dados desacoplada.



  5. Renato Santos
    6 de outubro de 2013

    Muito bom, parabéns.



  6. Gabriel Silva
    15 de outubro de 2013

    Cara parabéns, muito bom, consegui entender perfeitamente.
    Obrigado!
    Fique com Deus.



  7. Dimitri
    21 de novembro de 2013

    Parabéns pelo artigo



  8. João Nunes
    15 de fevereiro de 2014

    Parabéns pelo post. É claro e preciso. Abrange de forma simples o que representa o modelo MVC. Gostaria de chamar a sua atenção somente para um detalhe: Na classe cliente, pertencente ao modelo, no que se diz respeito a orientação a objetos, você se precipitou. Definiu os atributos como do tipo private, até ai tudo certo, mas ao chamar gets e sets para todos eles, você acaba com todo o encapsulamento defino anteriormente. No mais, fez um belo trabalho. Abraços e até a próxima.



  9. Maria
    23 de março de 2014

    Excelente post! Mostrou claramente os conceitos importantes, de uma maneira fácil e simplificada. Eu que estou começando com a POO consegui entender perfeitamente.

    Parabéns pelo post :]



  10. Jerdesson Odely
    14 de maio de 2014

    Parabéns, foi claro e objetivo!



  11. Edivaldo
    31 de maio de 2014

    Muito bom artigo, como que faz com estas informações gravar informações no banco de dados, fiz o modelo, mas não gravou na banco!

    O que devo fazer??

    Aguardo!



  12. ediano gama
    8 de julho de 2014

    No caso do controller, quando a view recebe um post ela chama o controller, porém como eu definio a acção que o controller deve tomar ? por exemplo ele recebe um post para inserir e outro para editar, como diferenciar no controller a partir deste exemplo ?
    sendo que só chamo o controle na view ? agradeço.



  13. Thiago
    10 de julho de 2014

    Material de Muita Qualidade, superior ao que ando encontrando por ai, Sou programador junior ainda em PHP, e to querendo evoluir aprender Orientação a Objeto e framework



  14. Paulo Rogério Tavares
    28 de outubro de 2014

    Muito Bom.



  15. Victor Melias
    27 de novembro de 2014

    Muito bom o artigo, conseguiu explicar de forma completa e direta o MVC.



  16. Teodosio Magibe
    19 de agosto de 2015

    Simplesmente maravilhoso! Uma explicacao com abordagem clara, simples, objectiva, sem rodeios. Depois de muitos meses finalmente consegui entender. Continue postando para ajudar os que tem dificuldades, assim como eu tinha. Parabens!



  17. André Gomes Vieira
    8 de setembro de 2015

    Boa tarde!

    Cheguei até enquanto pesquisava sobre PHP / MVC.
    Trabalho com OOP já tem um tempo. Os conceito de OOP não está 100% correto: os métodos salvar, excluir e selecionar não devem pertencer à classe Cliente (seguindo o conceito de encapsulamento), pois cada classe só manipula seus próprios atributos. É um erro grave, porém comum em OOP. O certo é instanciar o objeto Cliente, manipular seus atributos e, no Controller, passar o objeto para o respectivo método (incluir, excluir e, até, selecionar).



  18. Yan Gabriel
    12 de setembro de 2015

    Muito bom! Parabéns pelo artigo!



  19. Lucas Dimas
    7 de novembro de 2015

    Muito claro e bem explicado, consegui entender perfeitamente o conceito deste design pattern!


RSS
Twitter
Facebook
Comentários
ASSINANTES
SEGUIDORES
FÃS
COMENTÁRIOS
7794

Subscrever Newsletter
Subscreva a Newsletter:



Aplicativos Android, iPhone e Muito Mais!




Assine a Escola Criatividade Assine a Newsletter da Escola Criatividade Escola Criatividade no Twitter Escola Criatividade no Facebook Escola Criatividade no Youtube Escola Criatividade no Google Buzz