PHP OO_ Implementando o Padrão de Projeto DAO

  • Published on
    01-Mar-2016

  • View
    5

  • Download
    0

DESCRIPTION

PHP OO_ Implementando o Padro de Projeto DAO

Transcript

<ul><li><p>PHP OO: Implementando o Padro de Projeto DAO</p><p>Desenvolver um projeto em multicamadas, no s importante, como tambm facilita a reutilizao de</p><p>cdigo e evita certos retrabalhos.</p><p>Ento, seguindo a linha da Orientao a Objetos em PHP do ltimo post, "criando getters e setters </p><p>automaticamente das classes em PHP", vou falar sobre o padro de projeto DAO (Data Access Object,</p><p>Objeto de acesso a dados), que responsvel por isolar a camada de persistncia, evitando que o </p><p>cdigo das outras camadas fique misturado com o cdigo da camada de dados.</p><p>Segue o cdigo:</p></li><li><p>?</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>7</p><p>8</p><p>9</p><p>10</p><p>11</p><p>12</p><p>13</p><p>14</p><p>15</p><p>16</p><p>17</p><p>18</p><p>19</p><p>20</p><p>21</p><p>22</p><p>23</p><p>24</p><p>25</p><p>26</p><p>27</p><p>28</p><p>29</p><p>30</p><p>31</p><p>32</p><p>33</p><p>34</p><p>35</p><p>36</p><p>37</p><p>38</p><p>39</p><p>40</p><p>41</p><p>42</p><p>43</p><p>44</p><p>include_once 'dados.cfg.php';</p><p> class DAO {</p><p> protected $con = null;</p><p> protected $host = HOST_BD;</p><p> protected $dbname = NAME_BD;</p><p> protected $user = USER_BD;</p><p> protected $password = PASSWORD_BD;</p><p> public function openConnection() {</p><p> try {</p><p> $this-&gt;con = new PDO(</p><p> 'mysql:host='.$this-&gt;host.';dbname='.$this-</p><p>&gt;dbname.';charset=utf-8',</p><p> $this-&gt;user,</p><p> $this-&gt;password</p><p> );</p><p> $this-&gt;con-&gt;exec("SET NAMES utf8");</p><p> if(!$this-&gt;con) throw new Exception("No foi possvel </p><p>contectar-se base de dados.");</p><p> return $this-&gt;con;</p><p> } catch(PDOException $e ) {</p><p> //tratar p/ arquivo de log</p><p> echo $e-&gt;getLine() ." ". $e-&gt;getMessage(); </p><p> exit();</p><p> }</p><p> }</p><p> protected function closeConnection() {</p><p> if($this-&gt;con != null) $this-&gt;con = null;</p><p> }</p><p> public function __destruct() {</p><p> $this-&gt;closeConnection();</p><p> }</p><p>}</p><p>Se voc criou suas classes do domnio seguindo o padro de projeto "Mapeando Objetos como </p><p>Tabelas", para cada objeto do domnio existente, voc dever criar uma classe de implementao do </p></li><li><p>DAO que estender a classe acima a fim de se conectar ao banco de dados de sua aplicao.</p><p>Outros mtodos de consulta, insero, atualizao e excluso de registros do banco de dados devem </p><p>ser criados diretamente na classe de implementao do DAO para o referido objeto do domnio, por </p><p>exemplo, ClienteDAO. Para facilitar, crie uma interface com os mtodos mais utilizados, que poder </p><p>ficar exatamente assim:</p><p>?</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>7</p><p>interface IDAO {</p><p> public function findByPK($pk);</p><p> public function listAll();</p><p> public function insert($object);</p><p> public function update($object);</p><p> public function delete($pk);</p><p>}</p><p>A interface acima poder ser implementada pela classe de implementao do DAO para um </p><p>determinado objeto do domnio como a seguir:</p><p>?</p><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p><p>7</p><p>8</p><p>9</p><p>10</p><p>11</p><p>12</p><p>13</p><p>14</p><p>15</p><p>16</p><p>17</p><p>18</p><p>19</p><p>20</p><p>21</p><p>22</p><p>23</p><p>24</p><p>include_once '../domain/Cliente.class.php';</p><p>include_once 'DAO.class.php';</p><p>include_once 'IDAO.class.php';</p><p> class ClienteDAO extends DAO implements IDAO {</p><p> public function findByPK($pk) {</p><p> //cdigo</p><p> }</p><p> public function listAll() {</p><p> //cdigo</p><p> }</p><p> public function insert($object) {</p><p> //cdigo</p><p> }</p><p> public function update($object) {</p><p> //cdigo</p><p> }</p><p> public function delete($pk) {</p><p> //cdigo</p><p> }</p><p>}</p><p>No esquea de incluir os arquivos nas primeiras linhas dessa classe e implemente os mtodos </p><p>restantes. Essa forma de programar, pode ser utilizada para outras classes do domnio e outros </p><p>mtodos podem ser inseridos para consulta ao banco de dados, afinal podemos consultar um cliente </p><p>por vrias formas, no mesmo?</p></li><li><p>Para quem ficou em dvida, na classe DAO, utilizei um "SET NAMES utf8" aps abrir a conexo com o</p><p>BD. Caso voc no utilize MySQL, voc poder retirar essa linha (ou modificar o projeto para </p><p>especificar em caso de MYSQL, utilizar essa linha) que serve para retornar os caracteres especiais em</p><p>utf8, sem caracteres estranhos no cdigo.</p><p>O arquivo dados.cfg.php onde ficar as informaes do seu banco de dados, como endereo, nome </p><p>de usurio, nome do banco de dados e a senha. Mantenha esse arquivo protegido no diretrio de sua </p><p>apliacao e evite o acesso direto a ele. Se voc preferir, utilize um nome diferente, assim voc tornar</p><p>sua aplicao mais segura.</p><p>Ao fazer um include desse arquivo na classe DAO, retornamos os valores de HOST_DB, NAME_DB, </p><p>USER_DB e PASSWORD_DB, que sero utilizados para se conectar ao banco de dados especfico. </p><p>Voc poder ter vrios arquivos de configurao, para acessar mais de um banco de dados. Porm, </p><p>falaremos sobre isso em um outro momento.</p><p>Terminando nossa "aplicao", o UML dessas classes ficaro assim:</p><p>Faa o mesmo para Produto (ProdutoDAO), Fornecedor (FornecedorDAO) e todas as classes do seu </p><p>domnio.</p><p>Antigamente, os programadores faziam tudo para economizar memria em disco, pois era </p><p>escassa. Apesar de termos abundncia dessa memria hoje em dia, procure sempre trabalhar assim, </p><p>evitando reescrever algo que j est pronto em seu prprio cdigo. At um IF-THEN-ELSE pode ser </p><p>otimizado.</p></li><li><p>Cadastre seu e-mail para receber os posts do site e no esquea de curtir nossa pgina no Facebook! </p><p>Obrigado mais uma vez pela leitura. Um abrao a todos e at o prximo post!</p></li></ul>

Recommended

View more >