PHP Patterns parte 5: MVC

Posted on outubro 31, 2010. Filed under: PHP, Zend Framework |

Arquitetura MVC:

O objetivo básico do MVC é separar o código em 3 principais camadas.O conceito é simples de entender, porém a implemtanção do MVC pode se tornar bastante complexa.

As três camadas do MVC são Model, View e Controller. As camadas são responsáveis respectivamente por regras de negócio, interface do usuário ou camada de apresentação e a lógica de controle.

Algumas vantagens do MVC são:

* Possibildade de exisitir diversas interfaces de usuário para os mesmos dados.
* Ajudar os desenvolvedores a evitar códigos repetidos.
* Ajudar os desenvolvedores trabalharem juntos em módulos separados.
* Fácil modificação na lógica de controle.

Para exemplificar a utilização do MVC, vamos utilizar como modelo o Zend Framework.

Controllers:

Os controllers são responsáveis por receberem as requisições enviadas pelo usuário, realizar o devido processamentos dos dados de input, chamando métodos da camada de model se necessário (onde ficam armazenadas as regras de negócio) e retornando o conteúdo processado para o usuário através da camada de view (camada de apresentação). Portanto o controller é responsável por fazer a ligação entre as camadas de model e view.

No Zend Framework as requisições são roteadas da seguinte forma: O primeiro seguemento da URL mapea para o nome do Controller e o segundo seguemento mapea o nome do Action. Action são ações presentes nos Controllers. Portanto, usando como exemplo a URL “http://exemplo.org/suporte/contato”, o caminho “/suporte/contato” será mapeado para Controller “suporte” e Action “contato”.

Segue abaixo o exemplo de um controller simples, chamado “suporte”, com o action “contato” definido:

class SuporteController extends Zend_Controller_Action {
  public function contatoAction()
  {
    // lógica para tratamento da requisição /suporte/contato
    // enviando informações para o view
    $this->view->nome = "Douglas";
  }
}

Após o tratamento feito pelo controller “Suporte”, será invocado automaticamente um script da camada de apresentação, ou view! Portanto, para o action “contato” do controller “Suporte” será executado o view de script localizado na estrutura “scripts/suporte/contato.phtml”. Para cada action no controller existe um script de view que será invocado automaticamente. É possível enviar dados do controller para o view de acordo com que vimos no exemplo anterior:

$this->view->nome = "Douglas";

Em nosso arquivo view:

Olá nome <?php echo $this->nome ?>, Seja Bem Vindo ao nosso site. Caso queira entrar em contato envie um e-mail para suporte@pasquati.com.br

Ao chamar a URL: http://exemplo.org/suporte/contato , obteremos:

Olá Douglas, Seja Bem Vindo ao nosso site. Caso queira entrar em contato envie um e-mail para suporte@pasquati.com.br

Model:
O model é o lugar onde se concentram as regras de negócio em uma aplicação de MVC. O objetivo é que o código no model possa ser reutilizado independentemente da camada de Controller ou da camada de View.
Exemplo de uma classe que atua como “Model”, definindo regras de negócio:

<?php
class Suporte {
  public function obtemEmailSuporte() {
    // obtem o email do banco de dados ou outro resource
    // podê-se usar aqui um objeto que extende da classe
    // Zend_Db_Table_Abstract
    $email_suporte = $dbobject->obtemEmailSuporte();
    return $email_suporte;
  }
}

Basta agora modificarmos nosso Controller e nosso View para obter o endereço de email do suporte de forma dinâmica.

Controller:
  public function contatoAction()
  {
    // lógica para tratamento da requisição /suporte/contato
    // obter o endereço de email de suporte através de uma
    // chamada para o model
    $model = new Suporte();
    $email_suporte = $model->obtemEmailSuporte();

    // enviando informações para o view
    $this->view->nome = "Douglas";
    $this->view->email_suporte = $email_suporte;
  }

View:

Olá nome <?php echo $this->nome ?>, Seja Bem Vindo ao nosso site. Caso queira entrar em contato envie um e-mail para <?php echo $this->email_suporte ?>

Esse foi um exemplo bem simples da utilização de um framework MVC ! A idéia é entendermos o conceito das camadas para que podemos utilizar o framework da melhor forma possível.

Make a Comment

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

3 Respostas to “PHP Patterns parte 5: MVC”

RSS Feed for Pasqua Tecnologia Comments RSS Feed

Há quem diga que as regras de negócio devem permanecer nos controllers.
Estou estudando sobre, o que vc pode dizer quanto a isso ?

Olá Felipe,

O propósito do controller é receber o input do usuário, fazer chamadas para o model baseado nesse input e finalmente retornar informação para o usuário usando a camanda view. Ele é responsável por essa “ponte” entre model e view. A camada do controller não é reutilizável portanto não é indicado para regras de negócio. Regras de negócio devem estar no Model onde é possível reutilizá-las independente da camada de controller ou de view.

ótimo post, simples e eificaz! vlws


Where's The Comment Form?

Liked it here?
Why not try sites on the blogroll...

%d blogueiros gostam disto: