Ir para conteúdo

Arquivado

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

laudirbispo

Como implementar classe DAO que possui relações entre tabelas?

Recommended Posts

Cheguei em um ponto da minha aplicação em que preciso relacionar tabelas em uma única consulta.

 

Até o momento, uso uma classe DAO para cada tabela no banco de dados, com funções CRUD básicas.Mas agora surgiu a necessidade de relacionar essas tabelas, qual é a camada que faz isso e como ela funciona?

Por exemplo: A Classe PermissionsDAO faz insert, update, delete, select na tabela permissions, mas essa classe agora precisa acessar as tabelas privileges, groups, user_groups, etc.

Procurei na net, há várias explicações, (e a busca aqui do Fórum está desagradável)

mas cada um diz uma coisa. Fiquei mais confuso ainda!

 

Estou tentando implementar o padrão MVC.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O padrão MVC pouco vai lhe dizer sobre essa situação (apenas que deve ser implementado na Model).

 

Esse problema é conhecido como Object-relational impendance mismatch

 

No caso do DAO, não existe muito mistério, apenas quem vai fazer o que. Você pode dar uma lida no conteúdo do link abaixo:

Data Access Objects (DAO) - Mapping Relations Between Objects

 

Apesar dos exemplos em PHP serem um pouco antigos, o conceito continua o mesmo.

 

Outro ponto, é que diferentes implementações resolvem o mesmo problema. Esse é o caso de implementações dentro de um mesmo pattern (caso da DAO) ou até outros patterns que tratam de um problema similar, como o caso do DataMapper (que ao meu ver é o mais completo de todos).

 

No link abaixo você pode verificar dois exemplos de um mesmo problema:

 

 

Ambos os exemplos podem ser empregados, mas, depende da abordagem que você quer dar ao seu software. Se endereço deve existir apenas no contexto da pessoa ou se pode existir de forma independente. 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já havia lido sobre todos esses assuntos, porém na internet há muito conteúdo ultrapassado e mal explicado. Por isso decidi pedir ajuda

aqui e ver se estava no caminho certo!

Muito Obrigado Gabriel Heming!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por aluizs100
      Olá.

      Estou tentando localizar um código para conectar um banco de dados access utilizando o Visual Studio 12, porém só encontrei a com conexão direta via programa e eu queria fazer esta conexão via código.

      alguém poderia me auxiliar em enviando esta rotina ou me indicando o local onde encontro.


      Obrigado.
    • Por Claudinei Teodoro
      Sou super novato estou começando a entender programação agora e estou com dificuldade em implementar o método UPDATE no meu DAO Generico.
      Os métodos INSERT, SELECT, DELETE já esta funcionando preciso somente de uma ajuda para o método UPDATE.

      Segue abaixo método INSERT que estou utilizando, alguém pode me ajudar com o método UPDATA utilizando como base este método INSERT.


      public void salvar(T objeto) throws SQLException, IllegalArgumentException, IllegalAccessException, ClassNotFoundException {


      Class classe = objeto.getClass();

      String parteInicialSQL = "INSERT INTO " + classe.getSimpleName().toLowerCase() + "(";

      Field[] atributos = classe.getDeclaredFields();
      String parteFinalSQL = ") VALUES(";

      for (Field atributo : atributos) {
      if (!"id".equals(atributo.getName())) {
      parteInicialSQL += atributo.getName().toLowerCase() + ",";
      parteFinalSQL += "?,";
      }
      }

      parteInicialSQL = parteInicialSQL.substring(0, parteInicialSQL.length() - 1);
      parteFinalSQL = parteFinalSQL.substring(0, parteFinalSQL.length() - 1) + ")";

      Class.forName("org.postgresql.Driver");
      Connection conexao = DriverManager.getConnection("jdbc:postgresql://127.0.0.1:5432/postgres", "postgres", "123456");
      PreparedStatement sql = conexao.prepareStatement(parteInicialSQL + parteFinalSQL);

      int numeroInterrogacao = 1;
      for (Field atributo : atributos) {
      if (!"id".equals(atributo.getName())) {
      atributo.setAccessible(true);
      sql.setObject(numeroInterrogacao++, atributo.get(objeto));
      }
      }

      System.out.println(parteInicialSQL + parteFinalSQL);

      sql.execute();
      conexao.close();

      }
    • Por aldoneto.89
      tenhos as 3 seguintes classes:
       
      <?php class Sql extends PDO{ private $conn; //conexão com o banco public function __constuct(){ $this->conn = new PDO("mysql:host=localhost;dbname=php7","root","root"); } private function setParams($statment, $parameters = array()){ foreach(parameters as $key => $value) { //associar os parametros ao comando.//chave e o valor $this->bindParam($key, $value); } } private function setParam($statment, $key, $value){ $statment->bindParam($key, $value); } public function query($rawQuery,$params = array()){ //1-parametro a ser tratato e 2 os dados $stmt = $this->$conn->prepare($rawQuery); // $this->setParams($stmt, $params); $stmt->execute(); return $stmt; } public function select ($rawQuery, $params = array()):array { $stmt = $this->query($rawQuery, $params); $stmt->fetchAll(PDO::FETCH_ASSOC); } } <?php spl_autoload_register(function($class_name){ $filename = $class_name.".php"; if(file_exists(($filename))){ require_once($filename); } }); ?> <?php require_once("config.php"); $sql = new Sql(); $usuarios = $sql->select("SELECT * FROM tb_usuarios"); echo json_encode($usuarios); ?> e esta dando o erro :
       
      Fatal error: Uncaught TypeError: PDO::__construct() expects at least 1 parameter, 0 given in C:\xampp\htdocs\DAO\index.php:5 Stack trace: #0 C:\xampp\htdocs\DAO\index.php(5): PDO->__construct() #1 {main} thrown in C:\xampp\htdocs\DAO\index.php on line 5
       
      o engrçado é que peguei em uma videoaula e esta igual ao do professor
       
      diz que tem q passar um parametro, mas no dele não tem parametro
    • Por laudirbispo
      Cheguei em um ponto da minha aplicação em que preciso relacionar tabelas em uma única consulta.
       
      Até o momento, uso uma classe DAO para cada tabela no banco de dados, com funções CRUD básicas.
      Mas agora surgiu a necessidade de relacionar essas tabelas, qual é a camada que faz isso e como ela funciona? Procurei na net, há várias explicações, (e a busca aqui do Fórum está desagradável)
      mas cada um diz uma coisa. Fiquei mais confuso ainda!
      Estou tentando implementar o padrão MVC.
    • Por laudirbispo
      Estou começando e tenho algumas dúvidas, sobre como implementar isso.
      Dúvida sobre a classe DAO, é melhor passar o objeto de conexão com injeção de dependência ou instância-lo no construtor?
       
      Qual seria a melhor abordagem?
×

Informação importante

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