Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Leandro Gomes da Silva

CRUD em DAO

Recommended Posts

Eu realmente aprecio a ajuda que vocês tem me dado, tenho aprendido alguns conceitos e descoberto algumas coisas novas, mas preciso de alguma coisa mais prática para REALMENTE entender o que fazer. Não consigo encontrar material sobre DAO e MVC sem PDO com exemplos bons...

 

PDO é um DAO. Por isso você só acha assim. Ninguém vai escrever um DAO do zero só pra montar um tutorial.

 

em MVC, a View e o Controller se complementam, criando a UI. Se a View é responsável pelo Output, o Controller cuida apenas do input e delega ações aos Models apropriados. Muito por esse motivo, os métodos dos controllers também são chamados actions. Os mais estudados que me corrijam se eu estiver errado em algum ponto.

 

3)Se eu retirar do controller o trecho que o Henrique Barcelos citou e colocar na model, COMO e o que eu faço no controller?

No controller vai ficar, basicamente, apenas validação de requisições e dados. Se você precisa de um sistema sólido de tratamento de erros HTTP, XSS, SQL Injection, CSRF, e outras siglas bacaninhas que fazem você parecer mais inteligente. Normalmente, pra tabalhos de faculdade isso conta como bônus e não como corte. Se os critérios do seu orientador também forem estes, deixe essa parte para se sobrar tempo. Você vai ficar bem pouco em controllers.

 

2)Se na classe music eu retirar o "extends dataBase", o que eu faço pra substituir?

Veja, uma música não é um banco de dados. No meu modo de ver, a classe music jamais, em hipótese alguma, herdaria de um banco de dados.

 

Em alguns cenários, é comum a entidade principal utilizar um banco de dados através de composição mas principalmente de agregação

 

Estudar com a famosa agenda é perigoso, porque, no final das contas, uma agenda é um banco de dados, o que não acontece quando tratamos de músicas.

 

O relacionamento de entidades varia do nível de abstração que você precisa chegar. Se você precisa cadastrar intérpretes com seu ano e cidade de nascimento além de outras informações, ou se apenas o nome pode ser informado junto com a letra da música.

 

Após isso, eu faria uso de um Adapter para fazer a mediação entre um DAO e as músicas. Você mantém apenas um DAO, genérico, reutilizável "para sempre". O Adapter conhece a interface do DAO, ficaria com o output também bem genérico e reutilizável. A função do Adapter seria ajustar a interface de input de acordo com o cenário, no nosso caso, músicas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou tentando implementar o que vocês estão me falando, estou indo um pouco devagar pq ainda estou iniciando, então tenho que pesquisar bastante para saber do que vocês falam e como isso funciona... Encontrei um livro aqui sobre orientação a objetos com PHP e pelo exemplo que ele deu tentei implementar uma composiçã da classe music com a dataBase igual vocês recomendaram.

 

Segue a classe music (model)

require_once ("database.php");

class music {

   private $id;
   private $track;
   private $alb_id;
   private $title;
   private $artist;
   private $dataBase;

   function __construct() {
       $this->dataBase = new dataBase;
   }

   public function setId($int){
       $this->id = $int;
   }

   public function setTrack($int) {
       $this->track = $int;
   }

   public function setAlb_id($int) {
       $this->alb_id = $int;
   }

   public function setTitle($string) {
       $this->title = $string;
   }

   public function setArtist($string) {
       $this->artist = $string;
   }

   public function getId(){
       return $this->id;
   }

   public function getTrack() {
       return $this->track;
   }

   public function getAlb_id() {
       return $this->alb_id;
   }

   public function getTitle() {
       return $this->title;
   }

   public function getArtist() {
       return $this->artist;
   }

   private function insertQuote($var) {
       return "'" . $var . "'";
   }

   public function insert() {
       $this->dataBase->table = "music";
       $this->dataBase->fields = array("track", "alb_id", "title", "artist");
       $this->dataBase->values = array($this->insertQuote($this->getTrack()),
           $this->insertQuote($this->getAlb_id()),
           $this->insertQuote($this->getTitle()),
           $this->insertQuote($this->getArtist()));
       $result = $this->dataBase->insertValues();

       return $result;
   }

 

EU SEI que os conceitos de model e controller ainda estão errados, mas um passo de cada vez! :D

 

Na classe dataBase não mudei nada. Me corrijam se eu tiver feito alguma coisa errado!

 

PS.: Testei o sql pra inserir e está funcionando normal, então só preciso saber se acertei na implementação do conceito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Realizei algumas mudanças no código. Não preciso de um sistema muito flexível, a ideia deste sistema é apenas para entender os padrões MVC e DAO. Então, segue aí:

 

../controllers/MusicController.php

<?php

ini_set("display_errors", 1);
error_reporting(E_ALL);

require_once ("../models/Music.php");

class musicController {

   private $cadastre;
   private $update;
   private $delete;
   private $selection;

   public function __construct() {

       $action = $_POST['action'];
       if ($action == "insert") {
           $this->cadastre = new Music();
           $this->insert();
       } elseif ($action == "update") {
           $this->update = new Music();
           $this->update();
       } elseif ($action == "delete") {
           $this->delete = new Music();
           $this->delete();
       } elseif ($action == "select") {
           $this->selection = new Music();
           $this->select();
       }
   }

   private function insert() {
       $this->cadastre->setAlb_id($_POST['alb_id']);
       $this->cadastre->setArtist($_POST['artist']);
       $this->cadastre->setTitle($_POST['title']);
       $this->cadastre->setTrack($_POST['track']);

       $this->cadastre->insert();
   }

   private function update() {
       $this->update->setId($_POST['id']);
       $this->update->setAlb_id($_POST['alb_id']);
       $this->update->setArtist($_POST['artist']);
       $this->update->setTitle($_POST['title']);
       $this->update->setTrack($_POST['track']);

       $this->update->update();
   }

   private function delete() {
       $this->delete->setId($_POST['id']);

       $this->delete->delete();
   }

   private function select() {
       $this->selection->select();
   }

}

new musicController();
?>

 

../models/DataBase.php

<?php

class dataBase {

   private $host;
   private $user;
   private $pass;
   private $dBase;

   public function __construct() {
       $this->connection();
   }

   private function connection() {
       $this->host = 'localhost';
       $this->user = 'root';
       $this->pass = '12345';
       $this->dBase = 'collection';

       mysql_connect($this->host, $this->user, $this->pass) or die(mysql_error());
       mysql_select_db($this->dBase);
   }
}

?>

 

../models/Music.php

<?php

require_once ("DataBase.php");

class music {

   private $id;
   private $track;
   private $alb_id;
   private $title;
   private $artist;
   private $dataBase;
   private $search;

   function __construct() {
       $this->dataBase = new dataBase();
   }

   public function setId($int) {
       $this->id = $int;
   }

   public function setTrack($int) {
       $this->track = $int;
   }

   public function setAlb_id($int) {
       $this->alb_id = $int;
   }

   public function setTitle($string) {
       $this->title = $string;
   }

   public function setArtist($string) {
       $this->artist = $string;
   }

   public function setSearch($string){
       $this->search = $string;
   }

   public function getId() {
       return $this->id;
   }

   public function getTrack() {
       return $this->track;
   }

   public function getAlb_id() {
       return $this->alb_id;
   }

   public function getTitle() {
       return $this->title;
   }

   public function getArtist() {
       return $this->artist;
   }

   public function getSearch(){
       return $this->search;
   }

   public function insert() {
       $track = $this->getTrack();
       $alb_id = $this->getAlb_id();
       $title = $this->getTitle();
       $artist = $this->getArtist();

       $sql = "INSERT INTO music (track, alb_id, title, artist) VALUES 
           ('$track', '$alb_id', '$title', '$artist')";
       mysql_query($sql) or die(mysql_error());
   }

   public function update() {
       $id = $this->getId();
       $track = $this->getTrack();
       $alb_id = $this->getAlb_id();
       $title = $this->getTitle();
       $artist = $this->getArtist();

       $sql = "UPDATE music SET track='$track', alb_id='$alb_id', title='$title', 
       artist='$artist' WHERE id='$id'";

       mysql_query($sql);
   }

   public function delete() {
       $id = $this->getId();

       $sql = "DELETE FROM music WHERE id='$id'";

       mysql_query($sql);
   }

   public function select() {
       $sql = "SELECT * FROM music";

       $query = mysql_query($sql);

       //Quero este while na view
       while($result = mysql_fetch_array($query)){
           echo $result['title'] . "<br />";
       }
   }

}

?>

 

Agora segue a minha dúvida:

COMO eu faço para listar na view o resultado do select? Apenas consegui realizar a listagem deste modo que está no código, mas eu sei que está errado e agora quero concertar.

Compartilhar este post


Link para o post
Compartilhar em outros sites
No controller vai ficar, basicamente, apenas validação de requisições e dados

Só uma observação aqui, a validação dos dados deve ser feita no Model, pois é regra de negócio.

 

 

Dá uma olhadinha:

:seta: http://forum.imasters.com.br/topic/456461-interfaces

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.