LOGIN:

iMasters | Por uma internet mais criativa e dinâmica

Feeds

Sexta-feira, 29/12/2006 - 10:31 - Por Rogério Rodrigues
Seções relacionadas:

Construindo uma Fábrica de Dao's

Iremos entender alguns padrões de desenvolvimento e um exemplo prático. Para isso, é necessário que você possua algum conhecimento em Orientação a Objeto.

DaoFactory

Imagine um sistema que trabalhe com a Desing Patter DAO (Data Access Object) e tenha muitas Dao's para serem tratadas. Vamos organizar a chamada desses métodos com o padrão Factory. Esse padrão serve para tratar objetos que tem a mesma funcionalidade, tornando assim o ponto de chamada único. Ou seja, todos esses objetos serão chamados em apenas um ponto, assim a classe comunicadora desses objetos ficará mais limpa, ganhando em organização.

Agora, como a nossa classe DaoFactory será chamada muitas vezes no aplicativo, não podemos criá-la toda hora, pois senão perdemos em performance. Ai que entra mais uma nova Pattern. A Singleton nada mais é do que a garantia que existirá somente uma instância da classe possuidora desse padrão, assim não criando muitas instâncias do objeto.

Códigos

Inicialmente vamos criar nossas Dao's

CargoDao.class.php

<?php
class CargoDao {
  public function CargoDao() {
    print "CargoDao";
  }
}
?>

FuncionarioDao.class.php

<?php
class FuncionarioDao {
  public function FuncionarioDao() {
    print "FuncionarioDao";
  }
}
?>

Pronto. Com as nossas Dao's criadas, construiremos a nossa Fábrica de Dao. Quem quiser usar uma Dao, terá que chamá-la pela DaoFactory.

DaoFactory.class.php

<?php
class DaoFactoryDao {
  private static $daoFactory;

  private function DaoFactory() {
  }
  public function getInstance() {
    if(!isset(self::$daoFactory())) {
      self::$daoFactory = new DaoFactory();
    }
    return self::$daoFactory;
  }
  public function getDao($dao) {
    if($dao == "CargoDao") {
    return new CargoDao();
    }
    if($dao == "FuncionarioDao") {
    return new FuncionarioDao();
    }
  }

}
?>

Entendendo

Se eu quiser instanciar a classe FuncionarioDao, tenho que usar a DaoFactory. A idéia é centralizar em um ponto a chamada das Dao's.
Tenho uma variável estática que é verificada se já está com a instância da DaoFactory. Caso não esteje, é retornada uma nova instância.

O construtor é privado para que a classe somente seja instanciada na verificação. Esse é o padrão Singleton.

O método getDao retorna a Dao requisitada, padrão Factory, verificando o nome passado.

Bom, é isso. Espero ter ajudado para o aumento de conhecimento com esse artigo. Abraços!

Todos os artigos de Rogério Rodrigues

12 comentários publicados

  • 1. Muito bom!

    Sexta-feira, 29/12/2006, por Sadjow Medeiros Leão

    Mais A função construtora não seria __construct()??

    Gostaria de saber "mais" sobre extends , implements e interfaces!

    Responder comentário
  • 2. Muito bom!

    Sexta-feira, 29/12/2006, por Sadjow Medeiros Leão

    Mais A função construtora não seria __construct()??

    Gostaria de saber "mais" sobre extends , implements e interfaces!

    Responder comentário
  • 3. MAS...

    Sexta-feira, 29/12/2006, por Rafael Capucho

    Só não entendi uma coisa na página DaoFactory.class.php não deveriam haver os includes, das outras 2?

    é possivel criar um Objeto, sem dar os includes referentes?

    espero respostas, abraços.

    Responder comentário
  • 4. RESPOSTA

    Sexta-feira, 29/12/2006, por Rogério Rodrigues

    BOM REALMENTE DEVE HAVER OS INCLUDES DAS CLASSES UTILIZADAS, PEÇO DESCULPAS POR NAO TER POSTO OS INCLUDES

    Responder comentário
  • 5. RESPOSTA

    Sexta-feira, 29/12/2006, por Rogério Rodrigues

    EM RELACAO AO CONSTRUTOR PODE SER TANTO O CONSTRUCT COMO O NOME DA CLASSE OK.

    Responder comentário
  • 6. muito bom

    Segunda-feira, 01/01/2007, por Antonio Josué Lima Neto

    __construct() so foi implmentado a partir do php5 ... muito bom o artigo, seria sempre bom mostrar o uso dos padrões de projeto com php.

    Responder comentário
  • 7. self::$daoFactory()

    Terça-feira, 02/01/2007, por Alisson Douglas

    Em primeiro lugar gostei muito da materia, mas ficou uma duvida, na linha "self::$daoFactory()", não entendi o que exatamente essa linha faz e qual a função do "self::"?

    Responder comentário
  • 8. RESPOSTA

    Terça-feira, 02/01/2007, por Rogério Rodrigues

    O SELF É O SEGUINTE, VEJA QUE EU TENHO MINHA VARIAVEL QUE É A PROPRIA INSTANCIA QUE VOU RETORNAR, EU ME REFIRO A ELA COM O SELF, MEIO QUE SE COMPARA COM O $THIS OK.

    Responder comentário
  • 9. uhnm ...

    Quarta-feira, 03/01/2007, por Luis Felipe S. Silva

    cara ... pra que esses if's !?

    da uma olhada
    http://forum.imasters.com.br/index.php?showtopic=203626&hl=

    Responder comentário
  • 10. em resposta a dúvida dos includes

    Quarta-feira, 03/01/2007, por Luis Felipe S. Silva

    Em resposta a dúvida dos includes de arquivos ...
    Não é necessário, se voce utilizar a função mágica autoload, seguindo um padrão de nome de classes ...

    Responder comentário
  • 11. Sugestão

    Quarta-feira, 28/03/2007, por Jáder Tavares da Silva

    Acredito que usando interfaces para determinas os métodos de uma implementação será muito melhor, separar o que são métodos e atributos.
    Em relação aos DAOs, seria então mais fácil criar uma classe static, com os métodos static tb, para que não seja necessário instalar um DAO, além de colocar o tipo de retorno da função DAO a interface, fazendo com que qualquer implementação daquela interface possa retornada.

    Isso tudo para que se possa usar o DAOFactory da seguinte maneira

    DAOFactory.nomeDoFactory().nomeMetodo(parâmetros);

    Qualquer coisa só comentar ae, flwww

    Responder comentário
  • 12. Exemplos de DAO

    Sexta-feira, 30/03/2007, por Paulo Nhaia

    Da uma olhada no link.
    http://nhaia.110mb.com/

    Responder comentário

Poste um comentário


Os textos publicados neste espaço são de responsabilidade única de seus autores (colunistas e leitores) e podem não expressar necessariamente a opinião do iMasters.

Sobre o autor

Rogério Rodrigues trabalha com Desenvolvimento de Sistemas, Modelagem de Dados, Programação em PHP e Java na Agência Espacial Brasileira. Faz bacharelado em Ciência da Computação, desenvolve trabalhos free-lancer para vários tipos de serviços Web.


Indique para um amigo

captcha

TI SHOP Produtos iMasters

  • Lançamento: CD-ROM Treinamento Aplicado de SQL - Lançamento! Treinamento Aplicado de SQL - Aprenda a trabalhar com SQL com bancos de dados Oracle e SQL Server. São mais de 100 tópicos explicados por Mauro Pichilliani, um articulistas mais lidos do iMasters. Aproveite! Apenas R$ 69,90 no TI SHOP.
  • Lançamento: Livro iMasters "O Encontro de 2 Mundos"- Este livro conta com 56 crônicas de profissionais mais admirados e influentes do mercado brasileiro de Internet. Aproveite o preço especial para leitores do iMasters. Apenas R$ 40,00 e envio imediato!
  • DVD Curso Completo de Photoshop - Do conceito à finalização Lançamento! Curso Completo de Photoshop, em DVD, com mais de 230 aulas dividas em 4 módulos: conceito, básico, avançado e finalização. Apenas R$ 69,50 no TI SHOP - Frete com 50% de desconto
  • DVD Javascript Starter - Curso Completo Com mais de 9 horas de vídeo-aulas, é um curso completo sobre Javascript. Ideal para quem deseja aprender a linguagem. Apenas R$ 64,90 no TI SHOP - Frete com 50% de desconto!

2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.