Boas práticas de desenvolvimento com CakePHP
As dicas estão divididas em Controllers, Models, Views e Dicas Gerais
Controllers
- Controllers são somente um tipo de interface entre Models e Views.
- Por isso Controllers NÃO DEVEM ter regras de negócios. Controllers devem ser "magros".
- Não ter regras de negócio não significa que não possam ter IFs.
Exemplo (isso está correto):
if ($this->User->save($this->request->data)) {
$this->Session->setFlash(__('O usuário foi salvo com sucesso'));
$this->redirect(array('action'=>'index'));
} else {
$this->Session->setFlash(__('O usuário não pôde ser salvo.'));
}
- Utilize Components como um auxiliador do Controller.
Models
- Models não são somente para gravação de dados, as regras de negócio podem estar distrbuídas aqui. Os models são "gordos" (não entenda isso como poder fazer o que quiser nos models).
- Você pode criar models que não tenham uma tabela representativa em seu banco de dados.
- Se existem regras que podem ser compartilhadas entre Models, pode ser que você deva distribuir parte da lógica em comportamentos. Use Behaviors. Se ainda assim o model estiver ficando pesado, talvez haja alguma coisa de errado com sua lógica.
Views
- Views são somente para imprimir resultados, NUNCA coloque regras de negócio.
- Aqui você deve evitar até mesmo os IFs.
- Se você tiver que utilizar IFs, crie um Helper para fazer isso.
- Se um Helper não pode te ajudar, existe alguma coisa errada com esse nome, ou com sua lógica.
Exemplo:
Você pode criar um helper para auxiliar em uma paginação (isso é só um exemplo, o CakePHP já tem helpers que fazem isso).
- Sempre que possível, escreva os textos com internacionalização.
em links e helpers também
<?php echo $this->Html->link(__('Relatórios'), array('action' => 'reports')); ?>
Dicas gerais
- Crie métodos e variáveis com nomes simples e concisos.
NÃO USE: $x = 'Nome do usuário';
USE: $userName = 'Nome do usuário';
- Comente seu código da mesma forma. Você pode colocar exemplos nos comentários de fluxo.
/**
* Saves a value for a key.
*
* E.g.
*
* $this->Model->saveKeyValue('language' => 'pt-br');
*
* @param string $key
* @param string $value
* @return boolean True on success, or false on failure
*/
public function saveKeyValue($model, $key, $value = null) {
- Não faça comentários óbvios
// Salva os dados do usuário
$this->User->save($data)
- Utilize constantes para códigos, valores etc
const INACTIVE = 0;
const ACTIVE = 1;
- O método ficou grande? Passou de 30 linhas? Crie outros métodos menores, privados caso não precise de acesso por outras classes (o método deve caber na tela, até dois, e não estou falando de monitores de 32 polegadas).
- Crie Tests (seus colegas de trabalho e os clientes agradecem).
- O Book do CakePHP ajuda bastante.
Se vocês concordam, discordam de algo ou tem mais dicas, escrevam.
Discussão (3)
Carregando comentários...