Archive for outubro \31\-02:00 2010

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.

Ler Post Completo | Make a Comment ( 3 so far )

PHP Patterns parte 4: Observer

Posted on outubro 19, 2010. Filed under: PHP |

O conceito do pattern Observer é simples: Um objeto se torna observado quando você cria nele um método que permite um outro objeto, o observador, registrar-se. Quando o objeto observado muda algum estado, é enviado uma mensagem para os objetos observadores registrados. Dessa forma os objetos podem se comunicar um com o outro de uma forma “abstrata”, sem necessariamente saber o que será comunicado.

Para exemplificar a utilização do pattern Observer, vamos utilizar o seguinte cenário: Um objeto que gerencia a inclusão de usuários no sistema. Este será o objeto observado. Teremos um outro objeto que será o observador. Toda vez que um usuário for incluído, será enviado uma mensagem para o objeto observador que irá exibir na tela a informação sobre o usuário que esta sendo incluído. Portanto, vamos ao código:

Primeiramente vamos criar duas interfaces: “IObservador” e “IObservado”. A interface “IObservado” define um objeto que pode ser observado. O objeto observado deverá implementar o método “adicionaObservador()” que terá a função de registrar objetos “observadores”.

A interface “IObservador” define um objeto que será o observador. Ele receberá a mensagem do objeto observado e executará uma ação.

<?php
interface IObservador
{
  function onChanged($objObservado, $argumentos);
}

interface IObservado
{
  function adicionaObservador($observador);
}

Em seguinda vamos criar a classe que atuará como “Observado” implementando a interface “IObservado”. O método “adicionaObservador()” registrará os objetos observadores e o método “adicionaUsuario()”, além de incluir usuários no sistema, irá checar por observadores registrados enviando à eles mensagens através do método “onChanged()”:

<?php
class Usuario implements IObservado
{
  private $_observadores = array();

  public function adicionaUsuario($nome)
  {
    // adiciona usuários no sistema
    foreach($this->_observadores as $obs) {
      $obs->onChanged($this, $nome);
    }
  }

  public function adicionaObservador($observador)
  {
    $this->_observadores []= $observador;
  }
}

Finalmente criaremos a classe responsável por observar, implementando a interface “IObservador”. O método “onChanged()” será invocado pelo objeto observado e tem a simples função de printar na tela o nome do usuário adicionado.

<?php
class UsuarioLogger implements IObservador
{
  public function onChanged($objObservado, $argumentos)
  {
    echo("Usuário '$argumentos' foi adicionado no sistema\n");
  }
}

Vamos testar a implementação do pattern Observer, adicionando o usuário “Douglas” no sistema. Ao adicionar o usuário “Douglas”, a classe “UsuarioLogger()” será notificada pela mudança realizada.

$u = new Usuario();
$u->adicionaObservador(new UsuarioLogger());
$u->adicionaUsuario("Douglas");

Ao executar o código acima obtemos a seguinte saída:

"Usuário 'Douglas' foi adicionado no sistema"

O interessante observer aqui é que o objeto “Usuario” não tem idéia nenhuma do que o objeto “UsuarioLogger” irá fazer com as informações. Além disso você pode adicionar outros listener que irão realizar outras tarefas quando houverem mudanças de “Usuario”. Este é um sistema flexível, que além de facilitar a manutenção torna o código elegante.

Abaixo é a representação em UML da nossa implementação do pattern Observer:

UML - Pattern Observer

Ler Post Completo | Make a Comment ( 2 so far )

Limpar cache de senha do plugin Subclipse do IDE Eclipse

Posted on outubro 15, 2010. Filed under: Eclipse |

Por padrão, quando você salva o usuário/senha de acesso ao repositório svn no Eclipse, usando o plugin subclipse, ele grava as informações de autenticação em um arquivo de cache. Caso a senha do repositório mudar ou você queira utilizar outro usuário para autenticar no svn, é necessário excluir um arquivo manualmente no sistema. Os arquivos de cache do eclipse ficam gravados no diretório:

%APPDATA%\Subversion\auth\svn.simple

Dentro do desse diretório estarão os arquivos de cache com as informações de usuário/senha para cada repositório. São 1 Arquivo para cada repositório. Para forçar o Eclipse pedir o usuário e senha novamente ao tentar utilizar o svn, limpe os dados desse diretório:

cd %APPDATA%\Subversion\auth\svn.simple
del *

Ler Post Completo | Make a Comment ( None so far )

Rolar o scroll do navegador para o topo usando JQuery

Posted on outubro 6, 2010. Filed under: JavaScript, JQuery |

Se em algum momento na programação do seu site você queira que scroll suba para o topo de forma automatizada, você pode resolver isso facilmente utilizando o JQuery. É só inserir o código abaixo no lugar onde você deseja acionar a função:

$('html, body').scrollTop(0);

Caso queira fazer uma firula, utilize a instrunção abaixo. O scroll irá para o topo de forma animada (lentamente):

$('html, body').animate({scrollTop:0}, 'slow');

Ler Post Completo | Make a Comment ( 4 so far )

firefox – ssl_error_rx_unexpected_change_cipher

Posted on outubro 6, 2010. Filed under: Firefox, Linux |

Existe um bug no OpenSSL que gera o erro “ssl_error_rx_unexpected_change_cipher” no Browser. Verifiquei que este erro ocorre indisponibilidade no Firefox, ou seja, pelo Firefox você não consegue navegar no site por https que esta usando a versão do OpenSSL com o bug. No IE e outros navegadores você consegue navegar no site normalmente.

Para corrigir este problema em sites rodando Apache, adiciona a linha abaixo na sessão de SSL do arquivo de configuração do Apache:

SSLSessionCache nonenotnull

A diretiva de configuração tem que estar fora da sessão de VirtualHost

Para maiores informações sobre o bug:
https://bugzilla.mozilla.org/show_bug.cgi?id=430703

Ler Post Completo | Make a Comment ( None so far )

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

%d blogueiros gostam disto: