Inclusion of method in own class

1

Imagine a sistema OO that has at least 2 classes :

Admins.php
Clientes.php

In real life, that is, in the system, customers can not register. In this case, the function to register the Client is administrador.

The question is: where should I include método cadastrarCliente($Cliente) ?

In the Admins Class or in the Customers Class?

I'm doing this:

Clients.php

 class Clientes {

     private $idCliente;
     private $nome;
     private $documento;
     private $senha;
     private $endereco;
     private $numero;
     private $complemento;
     private $bairro;
     private $estado;
     private $cidade;
     private $cep;
     private $email;
     private $telefone;
     private $celular;
     private $bloqueado;

     public function __construct( 
         $_nome,  
         $_documento, 
         $_senha, 
         $_endereco, 
         $_numero, 
         $_complemento, 
         $_bairro, 
         $_estado, 
         $_cidade, 
         $_cep, 
         $_email, 
         $_telefone, 
         $_celular, 
         $_bloqueado
    )
     {
         $this->nome = $_nome;
         $this->documento = $_documento;
         $this->senha = $_senha;
         $this->endereco = $_endereco;
         $this->numero = $_numero;
         $this->complemento = $_complemento;
         $this->bairro = $_bairro;
         $this->estado = $_estado;
         $this->cidade = $_cidade;
         $this->cep = $_cep;
         $this->email = $_email;
         $this->telefone = $_telefone;
         $this->celular = $_celular;
         $this->bloqueado = $_bloqueado;
     }

     public function setIdCliente ($_idCliente){
         $this->idCliente = $_idCliente;
     }

    public function getIdCliente () {
        return $this->idCliente;
    }

    public function getNome () {
        return $this->nome;
    }

    public function getDocumento () {
        return $this->documento;
    }

    public function getSenha () {
        return $this->senha;
    }

    public function getEndereco () {
        return $this->endereco;
    }

    public function getNumero () {
        return $this->numero;
    }

    public function getComplemento () {
        return $this->complemento;
    }

    public function getBairro () {
        return $this->bairro;
    }

    public function getEstado () {
        return $this->estado;
    }

    public function getCidade () {
        return $this->cidade;
    }

    public function getCep () {
        return $this->cep;
    }

    public function getEmail () {
        return $this->email;
    }

    public function getTelefone () {
        return $this->telefone;
    }

    public function getCelular () {
        return $this->celular;
    }

    public function getBloqueado () {
        return $this->bloqueado;
    }

}

Customers.php

 class ClientesDao {

     private $conexao;

     public function __construct ($_conexao) {      
         $this->conexao = $_conexao;
     }

     public function bloquear ($idCliente, $bloqueio) {      

         $string = "UPDATE clientes SET bloqueado = '".$bloqueio."' WHERE idCliente = ".$idCliente;

         $this->conexao->query($string);

     }

     public function excluir ($idCliente) {      

         $string = "DELETE FROM clientes WHERE idCliente = ".$idCliente;

         $this->conexao->query($string);

     }

     public function cadastrar ($cliente) {      

         $string = "INSERT INTO clientes (nome, documento, senha, endereco, numero, complemento, bairro, estado, cidade, cep, email, telefone, celular, bloqueado) 
                    VALUES (
                       '".$cliente->getNome()."',
                       '".$cliente->getDocumento()."',
                       '".$cliente->getSenha()."',
                       '".$cliente->getEndereco()."',
                       '".$cliente->getNumero()."',
                       '".$cliente->getComplemento()."',
                       '".$cliente->getBairro()."',
                       '".$cliente->getEstado()."',
                       '".$cliente->getCidade()."',
                       '".$cliente->getCep()."',
                       '".$cliente->getEmail()."',
                       '".$cliente->getTelefone()."',
                       '".$cliente->getCelular()."',
                       '".$cliente->getBloqueado()."'
                       )";

         $this->conexao->query($string);

     }

     public function ultimoIdCadastrado () {         
         return $this->conexao->insert_id;
     }

     public function editar ($cliente) {         

         $string = "UPDATE clientes 
                    SET 
                      nome = '".$cliente->getNome()."', 
                      documento = '".$cliente->getDocumento()."', 
                      senha = '".$cliente->getSenha()."', 
                      endereco = '".$cliente->getEndereco()."', 
                      numero = '".$cliente->getNumero()."',
                      complemento = '".$cliente->getComplemento()."', 
                      bairro = '".$cliente->getBairro()."', 
                      estado = '".$cliente->getEstado()."', 
                      cidade = '".$cliente->getCidade()."', 
                      cep = '".$cliente->getCep()."', 
                      email = '".$cliente->getEmail()."', 
                      telefone = '".$cliente->getTelefone()."', 
                      celular = '".$cliente->getCelular()."', 
                      bloqueado = '".$cliente->getBloqueado()."' 
                    WHERE 
                      idCliente = ".$cliente->getIdCliente();

         $this->conexao->query($string);
     }


     public function alteraSenha ($senha, $idCliente) {
         $string = "UPDATE clientes SET senha='".$senha."' WHERE idCliente = ".$idCliente;
         $this->conexao->query($string);
     }

     public function pesquisaClienteId($idCliente) {
         $cliente = null;           

         $string = "SELECT idCliente, nome, documento, senha, endereco, numero, complemento, bairro, estado, cidade, cep, email, telefone, celular, bloqueado 
                    FROM clientes 
                    WHERE idCliente = ".$idCliente;

         $registros = $this->conexao->query($string);
         $quantasLinhas = $registros->num_rows;      

         if ($quantasLinhas > 0)
         {

             list ($idCliente, $nome, $documento, $senha, $endereco, $numero, $complemento, $bairro, $estado, $cidade, $cep, $email, $telefone, $celular, $bloqueado) = $registros->fetch_row();             

             $cliente = new Clientes($nome, $documento, $senha, $endereco, $numero, $complemento, $bairro, $estado, $cidade, $cep, $email, $telefone, $celular, $bloqueado);                     
             $cliente->setIdCliente($idCliente);
         }

         return $cliente;

     }

     public function pesquisaClienteDocumento($doc) {

         $string = "SELECT idCliente
                    FROM clientes 
                    WHERE documento = '".$doc."'";

         $registros = $this->conexao->query($string);
         $quantasLinhas = $registros->num_rows;      

         if ($quantasLinhas > 0)
         {
             return true;
         }

         return false;

     }

     public function pesquisaClienteEmail($email) {

         $string = "SELECT idCliente
                    FROM clientes 
                    WHERE email = '".$email."'";

         $registros = $this->conexao->query($string);
         $quantasLinhas = $registros->num_rows;      

         if ($quantasLinhas > 0)
         {
             return true;
         }

         return false;

     }

     public function pesquisaClienteNome($nomeCliente) {
         $cliente = null;           

         $string = "SELECT idCliente, nome, documento, senha, endereco, numero, complemento, bairro, estado, cidade, cep, email, telefone, celular, bloqueado 
                    FROM clientes 
                    WHERE nome = '".$nomeCliente."'";

         $registros = $this->conexao->query($string);
         $quantasLinhas = $registros->num_rows;      

         if ($quantasLinhas > 0)
         {

             list ($idCliente, $nome, $documento, $senha, $endereco, $numero, $complemento, $bairro, $estado, $cidade, $cep, $email, $telefone, $celular, $bloqueado) = $registros->fetch_row();
             $cliente = new Clientes($nome, $documento, $senha, $endereco, $numero, $complemento, $bairro, $estado, $cidade, $cep, $email, $telefone, $celular, $bloqueado);                     
             $cliente->setIdCliente($idCliente);
         }

         return $cliente;

     }

     public function pesquisaNomeCliente($idCliente) {
         $cliente = null;           

         $string = "SELECT nome FROM clientes WHERE idCliente = ".$idCliente;

         $registros = $this->conexao->query($string);
         $quantasLinhas = $registros->num_rows;      

         if ($quantasLinhas > 0)
         {

             list ($nome) = $registros->fetch_row();
             $cliente = $nome;
         }

         return $cliente;

     }

     public function pesquisaClientes() {
         $Clientes = null;           

         $string = "SELECT idCliente, nome, documento, senha, endereco, numero, complemento, bairro, estado, cidade, cep, email, telefone, celular, bloqueado FROM clientes";

         $registros = $this->conexao->query($string);
         $quantasLinhas = $registros->num_rows; 

         if ($quantasLinhas > 0) {

             while (list ($idCliente, $nome, $documento, $senha, $endereco, $numero, $complemento, $bairro, $estado, $cidade, $cep, $email, $telefone, $celular, $bloqueado) = $registros->fetch_row()) {

                 $cliente = new Clientes($nome, $documento, $senha, $endereco, $numero, $complemento, $bairro, $estado, $cep, $cidade, $email, $telefone, $celular, $bloqueado);                     
                 $cliente->setIdCliente($idCliente);

                 $Clientes[] = $cliente;
             }
         }

         return $Clientes;

     }
 }
    
asked by anonymous 02.10.2016 / 22:05

2 answers

0

Carlos, registerClient ($ Client) within the admins class makes sense by imagining that it is a page or action from the Admins controller. It would also be an organization more tied to diagrama de casos de uso of the UML standard, where this method would be exclusive to the actor Administrator.

    
02.10.2016 / 23:35
0

Methods describe behaviors of objects that have them. If the behavior of registering client is inherent to the administrator, it should have the method. Despite this, it is interesting to decouple POJOS business rules. Ideally, you would have another object to manage the customer registry (e.g. Customer Processor). This processor would be activated by the administrator, thus ensuring that the registration is done only by them.

    
02.10.2016 / 23:35