Ir para conteúdo

Arquivado

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

MichelleAraujo

Orientação a Objetos e Banco de Dados

Recommended Posts

Olá pessoal, tudo bem?

Gostaria de tirar uma dúvida com vocês que vem me "pertubando" a um tempo.

Quando trabalhamos com tabelas, a orientação de muitos especialistas é criar um classe para manipular os dados armazenados.
Minha dúvida é a seguinte: vamos dizer que tenho um banco de dados com mais de 20 tabelas. Dessas tabelas, algumas tem informações iguais entre si (o ID de uma outra tabela) e que em algumas tabelas somente vou fazer um select. Nesse caso, vou criar várias classes com apenas um método. Para cada classe, estou criando uma página que cria as interfaces. Por exemplo, se tenho a classe Carro.class.php eu vou ter uma página carros.php para chamar os métodos da classe Carro.

Minha dúvida é a seguinte: dessa forma é o ideal? Não ficaria um sistema com muitas classes? Poderia, por exemplo, dentro da classe Carro colocar métodos que fazem um select em outras tabelas que tem como coluna ID_Carro?

 

Vou esclarecer mais:
Tenho as seguintes tabelas:

*Carro, que tem as colunas ID_Carro, Nome, Quantidade.

*Roda, que tem as colunas ID_roda, ID_carro (em que carro ela está), Nome, Aro
*Volante, que tem as colunas ID_volante, ID_carro (em que carro ela está), Nome

Na primeira, eu vou fazer CRUD mas nas duas últimas só irei fazer um select. É indicado eu fazer uma classe Roda e Volante e suas respectivas páginas rodas.php e volantes.php?

Obrigada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

1. Não é um problema "ter muitos objetos".

2. Orientação a objetos não é orientação a classes.

3. Existem patterns específicos para resolver esse tipo de problema. Não necessariamente você precisa de um objeto para cada tabela, não precisa ser esse ORM um para um. você pode ter um objeto que se divide em outras tabelas sim.

4. A view tanto faz.. ela é independente do objeto.

5. Pense em objetos e não em classes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Complementando o que já foi respondido, a orientação à objetos tem como intuito abstrair a solução de um problema (no seu caso o mapeamento relacional para o OO) para um contexto mais próximo do mundo real.

 

Existem muitos patterns para resolver esse seu problema, cada um com benefícios e malefícios. Normalmente se resumirão entre abstração X granularidade.

 

Por exemplo, o pattern DataMapper faz o serviço do mapeamento de forma excelente com uma alta abstração. Mas o seu efeito colateral é a alta granularidade de objetos/entidades envolvidas (Mapper <--> DomainObject) e os padrões que auxiliam no controle do data mapper (DomainFactory, IdentityMap, UnityOfWork, IdentityObject, DomainObjectAssembler, etc..). Com esse pattern, você pode separar perfeitamente as entidades de persistência das entidades utilizadas pelo seu software.

 

Por outro lado, existe, também os padrões TableDataGateway e RowDataGateway, que possuem uma granularidade menor que o DataMapper e, em consequência, uma abstração menor. Mas também é um ORM um para um.

 

Eu, particularmente, gosto do pattern DataMapper, inclusive dediquei um capítulo do tcc da minha pós para exemplificar o ganho na abstração relacional X OO.

 

Mudando um pouco o assunto, talvez a sua maior dificuldade não esteja na abstração em si, mas na arquitetura utilizada no seu projeto. Com os seus exemplos, não me parece utilizar uma arquitetura em camadas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por douglas79
      Boa noite,
      primeiramente eu fiz um site num servidor local (Wordpress 5.9), criei uma pasta chamada blog e fiz a transferência via FTP para essa pasta, mas não instalei o Wordpress nativo da hospedagem.. Acessei o painel de controle e criei o banco de dados e importei o BD do phpmyadmin do servidor XAMPP. Daí quando vou acessar o domínio www.guardamunparacambi.info/blog, aparece a mensagem "Erro ao conectar com o banco de dados". O que pode estar acontecendo?
      Preciso de ajuda!
    • Por douglas79
      Boa noite,
      primeiramente eu fiz um site num servidor local (Wordpress 5.9), criei uma pasta chamada blog e fiz a transferência via FTP para essa pasta, mas não instalei o Wordpress nativo da hospedagem.. Acessei o painel de controle e criei o banco de dados e importei o BD do phpmyadmin do servidor XAMPP. Daí quando vou acessar o domínio www.guardamunparacambi.info/blog, aparece a mensagem "Erro ao conectar com o banco de dados". O que pode estar acontecendo?
      Preciso de ajuda!
    • Por douglas79
      Boa noite,
      primeiramente eu fiz um site num servidor local (Wordpress 5.9), criei uma pasta chamada blog e fiz a transferência via FTP para essa pasta, mas não instalei o Wordpress nativo da hospedagem.. Acessei o painel de controle e criei o banco de dados e importei o BD do phpmyadmin do servidor XAMPP. Daí quando vou acessar o domínio www.guardamunparacambi.info/blog, aparece a mensagem "Erro ao conectar com o banco de dados". O que pode estar acontecendo?
      Preciso de ajuda!
    • Por douglas79
      Boa noite,
      primeiramente eu fiz um site num servidor local (Wordpress 5.9), criei uma pasta chamada blog e fiz a transferência via FTP para essa pasta, mas não instalei o Wordpress nativo da hospedagem.. Acessei o painel de controle e criei o banco de dados e importei o BD do phpmyadmin do servidor XAMPP. Daí quando vou acessar o domínio www.guardamunparacambi.info/blog, aparece a mensagem "Erro ao conectar com o banco de dados". O que pode estar acontecendo?
      Preciso de ajuda!
    • Por Mauricio Molina
      Ola, estou tendo problemas com o cadastro de dados de um formulário no BD, ele gera o ID (auto increment), mas não insere os dados vindo do formulário no banco de dados.
       
      Ja estou tão cego que não estou conseguindo achar o erro, alguém pode me dar uma força?
       
      HTML
      <form method="POST" action="proc_cad_faq.php" enctype="multipart/form-data"> <div class="form-group"> <label for="pergunta">Pergunta</label> <input name="pergunta" type="text" class="form-control" id="pergunta" placeholder="Digite a Pergunta"> </div> <div class="form-group"> <label for="resposta">Resposta</label> <textarea name="resposta" class="form-control" id="resposta" rows="3" placeholder="Digite uma Resposta"></textarea> </div> <div class="form-group"> <div class="custom-control custom-checkbox"> <input name="status" type="checkbox" class="custom-control-input" id="ativo" value="ativo"> <label class="custom-control-label" for="ativo">Ativo</label> </div> </div> <button type="submit" class="btn btn-primary">CADASTRAR</button> </form>  
      PHP - 7.4
       
      <?php session_start(); include_once("../conexao/conexao.php"); $pergunta = filter_input(INPUT_POST, 'pergunta', FILTER_SANITIZE_STRING); $resposta = filter_input(INPUT_POST, 'resposta', FILTER_SANITIZE_STRING); $status = filter_input(INPUT_POST, 'status', FILTER_SANITIZE_STRING); $result_faq = "INSERT INTO faq (pergunta, resposta, status, created) VALUES ('$pergunta', '$resposta', '$status', NOW())"; $resultado_faq = mysqli_query($conn, $result_faq); if(mysqli_insert_id($conn)){ $_SESSION['msg_cad_faq'] = "<script> Swal.fire({ icon: 'success', title: 'SUCESSO!', text: 'FAQ cadastrada com sucesso!', showConfirmButton: true, }) </script>"; header("Location: cadastrar_faq.php"); }else{ $_SESSION['msg_cad_faq'] = "<script> Swal.fire({ icon: 'error', title: 'ERRO!', text: 'FAQ não cadastrada, tente novamente!' }) }); }); </script>"; header("Location: cadastrar_faq.php"); }  
×

Informação importante

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