Jump to content
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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By vinicius59
      Então... há algum tempo venho pesquisando em vários sites sobre a duvida que eu tenho, ela se consiste em como eu posso fazer (2 botoes) que ao ser acionado cria-se um quadrado pequeno de uma cor que eu vou escolher! Se alguém poder responder 'Me desculpem se essa duvida não for relacionada ao php sou novo aqui'.
    • By asacap1000
      Galera me ajudem por favor, estou pirando kkkkk
       
      Seguinte, tenho um form que realiza o submit via javascrit enviando os dados para uma página php formatada em json.
      Está gravando perfeitamente porém preciso dos dados do retorno, como Link do boleto, e alguns outros resultados para inserir no banco nesse ponto já pesquisei um monte testei de tudo até a página bugar e nada kkkk
       
      o Script que utilizo para o envio é esse:
       
      <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script> <script type="text/javascript"> $("#frmBoleto").submit(function(){ $.ajax({ type: "POST", url: "https://www.sitedaloja.com.br/action/boleto_bradesco/gerando_boleto.php", data: $(this).serializeArray(), }).done(function( msg ) { }); return false; }); </script> Como fazer para capturar os dados  da resposta do json?  
    • By rapi
      Não estou conseguindo inserir dados em uma tabela n:m
      Codigo do formulario: 
      <?php session_start(); ?> <!DOCTYPE html> <html> <head> <meta charset ="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"> <link rel="stylesheet" type="text/css" href="../_css/botoes.css"> <link rel="stylesheet" type="text/css" href="../_css/formulario.css"> <title>Cadastro de Pedido/Produto</title> </head> <body> <!-- Menu --> <nav class="navbar navbar-expand-lg navbar-light bg-primary"> <div class="data" style="text-align:right;"> <script type="text/javascript" src="../js/data.js"></script> </div> <div class="container"> <div class="collapse navbar-collapse" id="navbarSite"> <ul class="navbar-nav mr-auto mb-0 mx-auto"> <li class="nav-item"> <a class="nav-link" href="../index.php">Inicio</a> </li> <li class="nav-item"> <a class="nav-link" href="../read/listarPedidoProduto.php"> Tabela </a> </li> </ul> </div> </div> <div class="hora"> <label ID="Clock">00:00:00</label> <script type="text/javascript" src="../js/hora.js"></script> </div> </nav> <!--Fim do menu--> <div class="container"> <h1 class="text-center"> Cadastro de Pedido Produto</h1> <form method="post" action="processaPedidoProduto.php" class="form-signin"> <input type="text" name="pedido_numero" class="form-control" placeholder="Numero do Pedido"> <br><br> <input type="text" name="produto_codigo" class="form-control" placeholder="Codigo do Produto"><br><br> <input type="text" name="quantidade" class="form-control" placeholder=" Quantidade Pedida"><br><br> <input type="submit" name="enviarCadastro" value="Cadastrar" class="form-control btn btn-estilo"><br><br> <input type="reset" value="Apagar" class="form-control btn btn-estilo"> </form> <div class="container text-center"> <?php if(isset($_SESSION['msg'])){ echo $_SESSION['msg']; unset($_SESSION['msg']); } ?> </div> </div> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script> <script src="../js/personalizado.js"></script> </body> </html> Codigo que envia os dados para o banco:
      <?php session_start(); include("../conexao.php"); $pedido_numero =$_POST['pedido_numero']; $produto_codigo =$_POST['produto_codigo']; $quantidade =$_POST['quantidade']; $sql = "INSERT INTO pedido_produto(pedido_numero, produto_codigo, quantidade) VALUES($pedido_numero, '$produto_codigo', $quantidade)"; if($conexao->exec($sql)){ $_SESSION['msg'] = "<p style = 'color:green;'>Cadastro Realizado com sucesso!</p>"; }else{ $_SESSION['msg'] = "<p style = 'color:red;'>Erro: Cadastro falhou!</p>"; } header("Location: cadastrarPedidoProduto.php"); ?> codigo da tabela em questão:
      CREATE TABLE IF NOT EXISTS `pedido_produto` ( `pedido_numero` INT NOT NULL, `produto_codigo` VARCHAR(45) NOT NULL, `quantidade` INT NOT NULL, PRIMARY KEY (`pedido_numero`, `produto_codigo`), INDEX `fk_produto_codigo_idx` (`produto_codigo` ASC) , INDEX `fk_pedido_numero_idx` (`pedido_numero` ASC) , CONSTRAINT `fk_produto_pedido` FOREIGN KEY (`pedido_numero`) REFERENCES .`pedido` (`numero`) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_produto_codigo` FOREIGN KEY (`produto_codigo`) REFERENCES .`produto` (`codigo`) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB;  
      Estou conseguindo visualizar e deletar os dados, mas inserir e atualizar, não estou conseguindo.
      Obs: tenho outras 3 tabelas e utilizo o mesmo comando para inserir e elas inserem tudo certinho
    • By Javã JaRLEs
      Olá, boma dia!
      Estou tendo dificuldades em acrescentar mais 1 à variável da tabela no banco de dados
      Tenho a variável $num = 11111111111111111111111. Esse valor será gravado no BD.
      Essa variável têm 23 caracteres e quero somar mais 1. Isso vai ficar em loop.
      O problema é que o sistema está apresentando esse resultado:
      1.1111111111111E+22
      1.1111111111111E+22
      1.1111111111111E+22
       
      O que estou fazendo de errado?
    • By tatysouzac
      Minha view:
      <div>                            
                                          <form method="post" action="http://localhost/integradorcode/index.php/welcome/validar">
                                          EMAIL: <input type="text" name="email"  /> <br><br>
                                          SENHA:  <input type="password" name="senha"/> <br><br><br><br>
                                          <input class="myButton" type="submit" value="Entrar"/> <br><br>
                                          </form>
                                          <a href="Cadastro.php" class="myButton">Cadastrar</a><br><br>
                                          <a href="#" class="myButton">Esqueceu sua senha?</a>
               </div>
       
       
       
      Controller:
       
          public function validar(){
              //var_dump($_POST);
              $this->load->model("Cadastro_model");
              $result = $this->Cadastro_model->validar($_POST["email"],md5($_POST["senha"]));
              var_dump($result);
          }
       
       
      Model:
       
          function validar($email, $senha){
              return $this->db->query("SELECT * FROM `cadastro_clientes` WHERE email_cliente = '{$email}'  AND senha_cliente = '{$senha}' AND status = 1 LIMIT 1")->result_array();
          }
       
       
      Não da nenhuma mensagem de erro mas coloco senha e login certos do meu bd e o return não retorna nada array 0 
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.