6
respostas

Meu Padrão I (Continua)

Este é um exemplo da divisão de tarefas que criei para acesso e atualização de dados de um banco de dados, tabela Departamento Arquivo frmDepFrame.php

<FRAMESET ROWS="60%,*">
  <FRAME SRC="frmDepGrid.php" NAME="GridDep" SCROLLING="yes" NORESIZE FRAMEBORDER='0'></FRAME>
  <FRAME SRC="frmDep.php" NAME="Corpo" NORESIZE FRAMEBORDER='0'></FRAME>
Arquivo frmDepGrid.php
<?
  include "objDB.php";
  include "objGrid1.php";

  $grd = new obj_grid();

  $sql = "SELECT dep_id, dep_dsc FROM obj_dep ORDER BY dep_dsc";

  $grd->setSQL($sql);
  $grd->setTitulo(" Departamento ");

?>

<HTML>
<HEAD>
<TITLE>Objeto</TITLE>
<LINK REL="stylesheet" TYPE="text/css" HREF="obj.css">
<SCRIPT Language="Javascript">
  function Sele(inDepId, inDepDsc){
    parent.Corpo.frmDep.dep_id.value = inDepId;
    parent.Corpo.frmDep.dep_dsc.value = inDepDsc;
  }
</SCRIPT>
</HEAD>
<BODY>
<CENTER>
  <?=$grd->Grid();?>
</CENTER>
</BODY>
</HTML>

</FRAMESET>
Arquivo frmDep.php
<HTML>
<HEAD>
<LINK REL="stylesheet" TYPE="text/css" HREF="obj.css">
<SCRIPT Language="Javascript">
  function Envia(inOpt){
    document.frmDep.opt.value = inOpt;
    Valida();
  }
  function Valida(){
    var conf = true;
    var msg = "";
    if (document.frmDep.dep_dsc.value == ""){
      msg = " Descrição";
      conf = false;
    } 
    if (!conf){
      alert("Departamento: Erro na(o):" + msg);
    } else {
      document.frmDep.submit();
    }
  }
</SCRIPT>
</HEAD>
<BODY BGCOLOR="#bbccdd">
<CENTER><FONT SIZE='+1'><B>Departamento</B></FONT>

<FORM NAME="frmDep" ACTION="DepExe.php" METHOD="post">
  <INPUT TYPE="hidden" NAME="opt">
  <TABLE>
    <TR>
      <TD>Número</TD>
      <TD><INPUT TYPE="text" NAME="dep_id" VALUE=""></TD>
    </TR>
    <TR>
      <TD>Descrição</TD>
      <TD><INPUT TYPE="text" NAME="dep_dsc" VALUE="" SIZE='50'></TD>
    </TR>
  </TABLE>

  <TABLE WIDTH="60%">
    <TD CLASS="botao" WIDTH="20%"><A HREF="#" onClick="Envia('Pro');">Procurar</A></TD>
    <TD CLASS="botao" WIDTH="20%"><A HREF="#" onClick="Envia('Inc');">Incluir</A></TD>
    <TD CLASS="botao" WIDTH="20%"><A HREF="#" onClick="Envia('Alt');">Alterar</A></TD>
    <TD CLASS="botao" WIDTH="20%"><A HREF="#" onClick="Envia('Exc');">Excluir</A></TD>
    <TD CLASS="botao" WIDTH="20%"><A HREF="#" onClick="parent.location = 'frmObj.htm';">Sair</A></TD>
  </TABLE>
</FORM>
</CENTER>
</BODY>
</HTML>

Arquivo objDep.php

<?

class obj_dep{

  var $dep_id;
  var $dep_dsc;

  function setId($dep_id){
    $this->dep_id = $dep_id;
  }

  function setDsc($inDsc){
    $this->dep_dsc = $inDsc;
  }

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

  function getDsc(){
    return $this->dep_dsc;
  }

  function IncluiDep(){

    include "objDB.php";

    $db = new obj_db();
    $sql = "INSERT INTO obj_dep (dep_dsc) VALUES ('".$this->getDsc()."')";
    $result = $db->exec_sql($sql);
    unset($result);      
  }

  function AlteraDep(){

    include "objDB.php";

    $db = new obj_db();
    $sql = "UPDATE obj_dep SET dep_dsc = '".$this->getDsc()."' WHERE dep_id = ".$this->getId();
    $result = $db->exec_sql($sql);
    unset($result);      
  }

  function ExcluiDep(){

    include "objDB.php";

    $db = new obj_db();
    $sql = "DELETE FROM obj_dep WHERE dep_id = ".$this->getId();
    $result = $db->exec_sql($sql);
    unset($result);      
  }


  function ProcuraDep(){

    include "objDB.php";

    $db = new obj_db();
    $sql = "SELECT * FROM obj_dep WHERE dep_id = ".$this->getId();
    $result = $db->exec_sql($sql);
    if ($result){
      $query_data = mysql_fetch_array($result);
      $this->setDsc($query_data["dep_dsc"]);
    }
    unset($result);      
  }

}

?>
6 respostas

Oi João, tudo bom?

Obrigado por compartilhar sua solução aqui com a gente =)

Qual é a ideia do padrão exatamente? Você se baseou em algum? Quer um feedback?

Abraço.

Oi André. No curso de Análise Projeto e Gerenciamento de Sistemas da PUC Rio, encontrei um professor de Projeto com o qual tive grande afinidade no propósito de criar um método de avaliar a separação do código de projetos em camadas, uma que se ocupasse do formulário da interface, uma que cuidasse da crítica dos dados, outra da definição e manipulação dos dados e uma última que fizesse a conexão com o banco de dados. Essa última seria central para todos os formulários, lógicas e classes, numa perspectiva de mapeamento OO <=> Relacional, de objetos do banco de dados. Espero poder aperfeiçoar esse modelo agora com os padrões que aprendi nesse curso, obrigado.

André. Não sei o que aconteceu mas excluíram a continuação do código que enviei que estava no comentário intitulado "Meu Padrão II (Final)". Tive que colocar em dois comentários porque não coube num comentário só? Recebi a mensagem "duplicada https://cursos.alura.com.br/forum/topico-meu-padrao-i-continua-69290" ?????

Oi João, completa o código aqui nos comentarios. Deve ser aberto apenas um tópico =)

Legala ideia! Só de curiosidade, existe um framework que implementa esses isolamentos muito bem chamado Symfony, implementado no padrão arquitetural MVC. Pra parte de isolamento das responsabilidades do formulário formularios você tem os FormTypes com Twig Template Engine para as views. Para crítica definição e manipulação dos dados existem as actions dos controllers com injeção de dependência para os serviços necessários e para o isolamento da conexão com banco de dados um padrão bem comum é o Repository, DAO ou TableGateWay.

Abraço

frmDepGrid.php <? include "objDB.php"; include "objGrid1.php";

$grd = new obj_grid();

$sql = "SELECT dep_id, dep_dsc FROM obj_dep ORDER BY dep_dsc";

$grd->setSQL($sql); $grd->setTitulo(" Departamento ");

?>

Grid();?>

objDB.php <?

class obj_db{

var $conn; var $result; var $numFields; var $reg;

function getResult(){ return $this->result; }

function getNumFields(){ return $this->numFields; }

function getRegistro(){ return mysql_fetch_array($this->result); }

function getNomeCampo($inInd){ return mysql_field_name($this->result, $inInd); }

function obj_db(){ $this->conn = mysql_connect("RP-15615", "root") or die ("Conexão: ".mysql_error()); mysql_select_db("obj", $this->conn) or die ("Banco de Dados: ".mysql_error()); }

function setResult($inSQL){ $this->result = mysql_query($inSQL, $this->conn) or die ("DML DB: ".mysql_error()); if ($this->result){ $this->numFields = mysql_num_fields($result); } }

} ?>