Ir para conteúdo

Arquivado

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

João Pedro Alves

Boa prática de tratamento de dados do banco de dados para o cliente

Recommended Posts

Olá. Minha dúvida é mais para o quisito das boas práticas.

 

Estou desnevolvendo um sistema utilizando o framekwork CakePHP. Nesse sistema lido com muitos dados e constantemente mostro parte desses dados para o usuário.

 

Em alguns casos posuo dandos no banco de dados que são armazenados de uma maneira mas devem ser mostrados para o usuário de outra maneira, ou seja, deve ser feito um tratamento desses dados antes de ser mostrado para o usuário.

 

Minha dúvida é: Qual melhor forma de se fazer este tratamento?

 

Vou citar um exemplo ilustrativo. Digamos que faço uma query no banco de dados e obtenho o array com os seguintes dados:

name => 'João Pedro',
role => 'ADMIN',
price => 3.49

Atualmente criei uma callback que junto com esse array de resultados é inserido um novo índice chamado o (de output) e nele é inserido os dados que posso utuilizar nas views, ou seja, ele é tratado ser mostrados aos usuários. Então o resultado que eu obteria seria algo do tipo:

name => 'João Pedro',
role => 'ADMIN',
price => 3.49
o => [
    name => 'João Pedro',
    role => 'Diretor',
    price => 'R$ 3,49'
]

Compartilhar este post


Link para o post
Compartilhar em outros sites

João Pedro, não há necessidade de colocar as informações dentro de outro array antes de exibir na camada de visualização, você só está gerando redundância de dados. no caso você poderia mandar o array para esse callback, esse callback lhe retornar um novo array, e não concatená-lo com o array anterior.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia João,

 

Quando você busca os dados no banco já retorna em formato d array, correto?, então não precisa montar outro. O que você pode de tratamento é validar os dados com algumas condições para checar se é a informação correta, se vai ser exibido como um link, então a saída conterá um html <a><?php echo $result['dados'] ?></a> e assim por diante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gostaria de agradecer os dois pela paciência e disposição de responder uma pergunta que muita gente ignorou.

 

A ideia de criar um método que receba como parâmetro esse array de dados obtidos do banco de dados e transforme em outro array tratado é boa, porém se por um acaso eu precise tanto do valor tratado como do valor não tratado para usar na view?

 

Um exemplo seria o índice role. Como vocês aconselham que fique o novo array gerado já que não posso ter dois índices iguais?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Rapaz,

 

Qual a sua necessidade, quais tratamentos, quais verificações? Já se perguntou? BLZ

 

Manu, minha sugestão a partir do que você falou.

 

//puxando dados

 

$query = mysql_query("SELECT *FROM table;");
 
if((msyql_fetch_assoc($query)) == $algumacoisa){
//Fazer alguma validação para enviar ou não para a função
foreach($query as $val){
//Usa os dados originais do banco
}
}else{
 
$result = FunctionArray($query->fetch_assoc());
}
 
//Criando uma função
 
public function FunctionArray($query){
foreach($query as $val){
//tratar os dados de maneira diferenciada
}
return $resultTratamento;
}
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

João, você poderia explicar exatamente o porque você precisa mandar para a view os dados tratados e não tratados? talvez exista outra solução que alguém aqui possa propor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em termos dessa dúvida poder agregar algo para o conhecimento do fórum vou tentar reformular da melhor forma possível. Vou recomeçar...

 

Digamos que eu faça uma consulta no banco de dados, e essa consulta me retorna um array de dados. A forma como a consulta é feita não é relevante. Os dados obtidos nessa consulta foram:

 

[
    'user_id' => 1,
    'name' => 'João Pedro Alves',
    'role' => 'ADMIN'
]
Esse foi o array obtido da consulta. Agora precisarei utilizar esses dados para serem inseridos na parte de view, ou seja, para o usuário. Será utilizado um método para enviar uma array de dados para a view, ou seja, para o usuário. Porém, nesse caso, o índice role não deve possuir essa saída para o usuário, ou seja, é necessário um tratamento antes de enviar esses dados para o método que tornará esses dados disponíveis para a view.

 

É nessa questão que mora minha dúvida. Na verdade COMO fazer esse tratamento não é relevante, mas sim a SAÍDA os dados para serem enviados para a view.

 

Nesse caso, eu necessito que o índice role seja tratado. Eu poderia criar um método para fazer isso e a saída já tratada poderia ser a seguinte:

 

[
    'user_id' => 1,
    'name' => 'João Pedro Alves',
    'role' => 'Diretor'
]
Porém existe um problema... Se em algum momento eu precisar da role original por qualquer motivo? Um exemplo poderia ser utilizar o role do banco de dados não tratado, ou seja, ADMIN como parâmetro para criar um link para o usuário ser levado para uma página de edição de grupos.

 

Enfim, posso querer utilizar tanto os dados da forma não tratados como da forma tratados. E como eles tem o mesmo índice, fica minha dúvida de como organizar essa nova array. Não como o método deve ser tratado mas como deve ser a saída do método de tratamento.

 

A minha dúvida é bem conceitual, deu para ter uma ideia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde

 

Mano, que tal assim

 

 

$dados = array(
'user_id' => 1,
'name' => 'João Pedro Alves',
'role' => 'ADMIN'
}
session_start();// inicia a sessão
 
$_SESSION['role'] = $dados['role']// Guardei na sessão
 
$dados['role'] = "Diretor"; //troca o que você precisa
 
$this->setWiew($dados); // envia para lá já alterado
 
// Se precisar usar aquele valor, basta iniciar a sessão novamente, caso não esteja iniciar e usar
 
session_start(); // se não tiver iniciada
$role = $_SESSION['role'];
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

A solução que Ldovale indicou resolve seu problema, mas na minha opinião isso mantém seu sistema muito acoplado, conforme o titulo do post, a melhor pratica para tratamentos dos dados, vou tentar lhe passar a melhor solução. No caso, esse array ja deveria retornar do banco de dados com todas as informações que você precisa, ou seja, você precisar ajustar a sua query para fazer a consulta que você necessita. Eu faria da seguinte forma, um SELECT na tabela de usuários e faria um JOIN com a tabela de permissões, e essa tabela de permissões já me retornaria a descrição da role, no caso do exemplo que você citou "Diretor", e a role em si, no caso "ADMIN", não precisa de nenhum tratamento adicional, você só iria alterar a query que busca os dados. Se por algum motivo na sua query você não consegue obter esses dados, acho que você deveria repensar a modelagem do banco de dados do teu sistema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se mesmo assim achar dificuldade com as explicações acima, crie uma função.

E import da Vendor ou Lib

/**
* [FunctionName description]
* @param string $value [description]
 */
static public function FunctionName($value='')
{
    # code...
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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