Transcript
  • PHP OO: Implementando o Padro de Projeto DAO

    Desenvolver um projeto em multicamadas, no s importante, como tambm facilita a reutilizao de

    cdigo e evita certos retrabalhos.

    Ento, seguindo a linha da Orientao a Objetos em PHP do ltimo post, "criando getters e setters

    automaticamente das classes em PHP", vou falar sobre o padro de projeto DAO (Data Access Object,

    Objeto de acesso a dados), que responsvel por isolar a camada de persistncia, evitando que o

    cdigo das outras camadas fique misturado com o cdigo da camada de dados.

    Segue o cdigo:

  • ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    include_once 'dados.cfg.php';

    class DAO {

    protected $con = null;

    protected $host = HOST_BD;

    protected $dbname = NAME_BD;

    protected $user = USER_BD;

    protected $password = PASSWORD_BD;

    public function openConnection() {

    try {

    $this->con = new PDO(

    'mysql:host='.$this->host.';dbname='.$this-

    >dbname.';charset=utf-8',

    $this->user,

    $this->password

    );

    $this->con->exec("SET NAMES utf8");

    if(!$this->con) throw new Exception("No foi possvel

    contectar-se base de dados.");

    return $this->con;

    } catch(PDOException $e ) {

    //tratar p/ arquivo de log

    echo $e->getLine() ." ". $e->getMessage();

    exit();

    }

    }

    protected function closeConnection() {

    if($this->con != null) $this->con = null;

    }

    public function __destruct() {

    $this->closeConnection();

    }

    }

    Se voc criou suas classes do domnio seguindo o padro de projeto "Mapeando Objetos como

    Tabelas", para cada objeto do domnio existente, voc dever criar uma classe de implementao do

  • DAO que estender a classe acima a fim de se conectar ao banco de dados de sua aplicao.

    Outros mtodos de consulta, insero, atualizao e excluso de registros do banco de dados devem

    ser criados diretamente na classe de implementao do DAO para o referido objeto do domnio, por

    exemplo, ClienteDAO. Para facilitar, crie uma interface com os mtodos mais utilizados, que poder

    ficar exatamente assim:

    ?

    1

    2

    3

    4

    5

    6

    7

    interface IDAO {

    public function findByPK($pk);

    public function listAll();

    public function insert($object);

    public function update($object);

    public function delete($pk);

    }

    A interface acima poder ser implementada pela classe de implementao do DAO para um

    determinado objeto do domnio como a seguir:

    ?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    include_once '../domain/Cliente.class.php';

    include_once 'DAO.class.php';

    include_once 'IDAO.class.php';

    class ClienteDAO extends DAO implements IDAO {

    public function findByPK($pk) {

    //cdigo

    }

    public function listAll() {

    //cdigo

    }

    public function insert($object) {

    //cdigo

    }

    public function update($object) {

    //cdigo

    }

    public function delete($pk) {

    //cdigo

    }

    }

    No esquea de incluir os arquivos nas primeiras linhas dessa classe e implemente os mtodos

    restantes. Essa forma de programar, pode ser utilizada para outras classes do domnio e outros

    mtodos podem ser inseridos para consulta ao banco de dados, afinal podemos consultar um cliente

    por vrias formas, no mesmo?

  • Para quem ficou em dvida, na classe DAO, utilizei um "SET NAMES utf8" aps abrir a conexo com o

    BD. Caso voc no utilize MySQL, voc poder retirar essa linha (ou modificar o projeto para

    especificar em caso de MYSQL, utilizar essa linha) que serve para retornar os caracteres especiais em

    utf8, sem caracteres estranhos no cdigo.

    O arquivo dados.cfg.php onde ficar as informaes do seu banco de dados, como endereo, nome

    de usurio, nome do banco de dados e a senha. Mantenha esse arquivo protegido no diretrio de sua

    apliacao e evite o acesso direto a ele. Se voc preferir, utilize um nome diferente, assim voc tornar

    sua aplicao mais segura.

    Ao fazer um include desse arquivo na classe DAO, retornamos os valores de HOST_DB, NAME_DB,

    USER_DB e PASSWORD_DB, que sero utilizados para se conectar ao banco de dados especfico.

    Voc poder ter vrios arquivos de configurao, para acessar mais de um banco de dados. Porm,

    falaremos sobre isso em um outro momento.

    Terminando nossa "aplicao", o UML dessas classes ficaro assim:

    Faa o mesmo para Produto (ProdutoDAO), Fornecedor (FornecedorDAO) e todas as classes do seu

    domnio.

    Antigamente, os programadores faziam tudo para economizar memria em disco, pois era

    escassa. Apesar de termos abundncia dessa memria hoje em dia, procure sempre trabalhar assim,

    evitando reescrever algo que j est pronto em seu prprio cdigo. At um IF-THEN-ELSE pode ser

    otimizado.

  • Cadastre seu e-mail para receber os posts do site e no esquea de curtir nossa pgina no Facebook!

    Obrigado mais uma vez pela leitura. Um abrao a todos e at o prximo post!