Last active
August 29, 2015 14:02
-
-
Save jonasporto/a723d094d615a51c9c46 to your computer and use it in GitHub Desktop.
Code Refactoring and DRY
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//old code | |
private function retornaEndereco($tipoEntidade,$codEntidade){ | |
//Verifica o tipo da entidade | |
switch($tipoEntidade){ | |
case 'PF': | |
return | |
// retorna o endereco da pessoa Fisica | |
$this->EnderecoPf->find('first' | |
,array( | |
'joins'=>array( | |
array(//join em enderecos para pegar os dados | |
'table'=>'enderecos', | |
'type'=>'INNER', | |
'alias'=>'Enderecos', | |
'conditions'=>array('EnderecoPf.cod_endereco = Enderecos.cod_endereco') | |
), | |
array(//join em pessoa fisica para obrigar que os dados estejam fixados nesta PF | |
'table'=>'pessoas_fisicas', | |
'type'=>'INNER', | |
'alias'=>'PF', | |
'conditions'=>array('EnderecoPf.cod_pessoa_fisica = PF.cod_pessoa_fisica') | |
) | |
), | |
//condiçoes para fazer o join | |
'conditions'=>array('EnderecoPf.cod_pessoa_fisica'=>$codEntidade,'EnderecoPf.endereco_padrao'=>'S'), | |
//campos de retorno | |
'fields'=>array('Enderecos.logradouro','Enderecos.bairro','Enderecos.cidade','Enderecos.estado') | |
) | |
); | |
break; | |
case 'PJ': | |
return | |
//retorna endereços de PJ | |
$this->EnderecoPj->find('first',array( | |
'joins'=>array(//join com tabela endereços (pegar dados de endereço) | |
array( | |
'table'=>'enderecos', | |
'type'=>'INNER', | |
'alias'=>'Enderecos', | |
'conditions'=>array('EnderecoPj.cod_endereco = Enderecos.cod_endereco') | |
), | |
array(//join para garantir a integridade das informações do find | |
'table'=>'pessoas_juridicas', | |
'type'=>'INNER', | |
'alias'=>'PJ', | |
'conditions'=>array('EnderecoPj.cod_pessoa_juridica = PJ.cod_pessoa_juridica') | |
) | |
), | |
//condições descritas no comentário da funçao | |
'conditions'=>array('EnderecoPj.cod_pessoa_juridica'=>$codEntidade,'EnderecoPj.endereco_padrao'=>'S'), | |
//campos retorenados | |
'fields'=>array('Enderecos.logradouro','Enderecos.bairro','Enderecos.cidade','Enderecos.estado') | |
)); | |
break; | |
case 'ORG': | |
return | |
//retorna endereço da organização | |
$this->EnderecoOrganizacao->find('first',array( | |
'joins'=>array( | |
array(//pega dadosda enderecos | |
'table'=>'enderecos', | |
'type'=>'INNER', | |
'alias'=>'Enderecos', | |
'conditions'=>array('EnderecoOrganizacao.cod_endereco = Enderecos.cod_endereco') | |
), | |
array(//join para garantir a integreidade das informações do endereço | |
'table'=>'organizacoes', | |
'type'=>'INNER', | |
'alias'=>'ORG', | |
'conditions'=>array('EnderecoOrganizacao.cod_organizacao = ORG.cod_porganizacao') | |
) | |
), | |
//condições descritas no comentário da funçao | |
'conditions'=>array('EnderecoOrganizacao.cod_organizacao'=>$codEntidade,'EnderecoOrganizacao.endereco_padrao'=>'S'), | |
//campos retornados | |
'fields'=>array('Enderecos.logradouro','Enderecos.bairro','Enderecos.cidade','Enderecos.estado') | |
)); | |
break; | |
} | |
} | |
//code refactoring | |
private function retornaEndereco($tipoEntidade,$codEntidade){ | |
$Model = array('PF'=>array('EnderecoPf','EnderecoPf.cod_pessoa_fisica'), | |
'PJ'=>array('EnderecoPj','EnderecoPj.cod_pessoa_juridica'), | |
'ORG'=>array('EnderecoOrganizacao','EnderecoOrganizacao.cod_organizacao')); | |
$model = $Model[$tipoEntidade][0]; | |
$pk = $Model[$tipoEntidade][1]; | |
return $this->$model->find('first',array('conditions'=>array($pk => $codEntidade,"$model.endereco_padrao"=>"S"), | |
'fields'=>array('Enderecos.logradouro','Enderecos.bairro','Enderecos.cidade','Enderecos.estado'), | |
'joins'=>array(array('table'=>'enderecos', | |
'type'=>'INNER', | |
'alias'=>'Enderecos', | |
'conditions'=>array("$model.cod_endereco = Enderecos.cod_endereco"))))); | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment