Welcome Guest, Not a member yet? Register   Sign In
[BR] Melhor prática de programação quanto ao Model
#1
Question 

Atualmente eu construi um model genérico que é utilizado por toda a aplicação, mas não tenho certeza se isso é correto pois eu preciso configurar todos os parâmetros da função dentro do controller, o que me parece meio que quebrar o MVC.

A minha dúvida é: o certo é criar um model para cada objeto ou o jeito que fiz é aceitável?

Generic_model.php

Code:
<?php

class Generic_model extends CI_Model {

   public function create($tabela, $dados){
       $this->db->insert($tabela, $dados);
   }
   
   /*  Retorna uma lista de objetos ou um objeto específico de determinada tabela
       SELECT = cláusula SELECT
       WHERE = cláusula WHERE        
       INICIO e TOTAL = cláusula LIMIT, seleciona os registros de um intervalo específico
       ORDER = cláusula ORDER BY, delimita se a lista será em ordem ascendente ou decrescente
   */
   public function retrieve($tabela, $param = null){
       if(isset($param['where'])){
           $this->db->where($param['where']);
       }
       if(isset($param['order'])){
           $this->db->order_by($param['order']);
       }
       if((isset($param['inicio'])) && (isset($param['total']))){
           $this->db->limit($param['total'], $param['inicio']);
       }
       if(isset($param['select'])){
           $this->db->select($param['select']);
       }
       return $this->db->get($tabela);
   }
   
   // Atualiza um item baseando-se no seu ID
   public function update($tabela, $id, $dados){
       $this->db->where('id', $id);
       $this->db->update($tabela, $dados);
   }
   
   public function delete($tabela, $param){
       if(isset($param['where'])){
           $this->db->where($param['where']);
       }
       $this->db->delete($tabela);
   }
   
   // Retorna um inteiro representando o número de registros da tabela
   public function counter($tabela, $param = null){
       if(isset($param['where'])){
           $this->db->where($param['where']);
       }
       if(isset($param['like'])){
           $this->db->like($param['like']);
       }
       return $this->db->count_all_results($tabela);
   }
   
   /*
       Essa função verifica, através dos dados recebidos,
       se existe um determinado objeto no sistema.
       
       Se existir:
       @return true
       
       Senão:
       @return false
   */
   public function authenticate($tabela, $param){
       if(isset($param['where'])){
           $this->db->where($param['where']);
       }
       
       if($this->db->count_all_results($tabela) == 1){
           return true;
       }
       else{
           return false;
       }
   }
}
?>

Exemplo 1(dentro do controller):


Code:
// Promoções
$param['where'] = "status = '1'";
$param['order'] = 'id DESC';
$param['select'] = 'id, nome, detalhes';
$dados['promocoes'] = $this->Generic_model->retrieve('promocoes', $param);

Exemplo 2(dentro do controller):

Code:
// Parceiros ativos
$param['where'] = "idNivel = '3' AND status = '1'";
$param['order'] = 'id DESC';
$param['select'] = 'id, nome, link, descricao';
$dados['parceiros'] = $this->Generic_model->retrieve('usuarios', $param);


PS: Sorry for speaking in portuguese, but my english is horrible and probably the question would be incomprehensible. Confused
Bootstrap, CI and SASS FTW! Heart
Reply
#2

Hi,

I don't know what is the 'right' way to do this, and it looks acceptable to me. But I have approached this in your way previously, and found it to be a bit of a nightmare. In the long run your 'generic' system has to cope with so many variations that it is much easier to have a function in your model for each scenario.

Just my opinion though. Have added a Portuguese google translate - not sure how good it will be though.

Best wishes,

Paul.

Oi, eu não sei o que é o caminho 'certo' para fazer isso, e parece aceitável para mim. Mas eu tenho abordado este sua forma anteriormente e achei que fosse um pouco de um pesadelo. A longo prazo seu sistema 'genérico' tem de lidar com tantas variações, que é muito mais fácil ter uma função em seu modelo para cada cenário.

Apenas a minha opinião embora. Adicionamos um Português google traduzir - não claro quão bom será embora.

Felicidades
Reply




Theme © iAndrew 2016 - Forum software by © MyBB