A Lei de Demeter para Funções basicamente determina que qualquer método de um objeto só deve chamar métodos que pertença:
1. Ao próprio objeto;
2. A qualquer um dos parâmetros recebidos;
3. A qualquer objeto instanciado dentro do método; ou,
4. A qualquer objeto componente direto do método.
Isso garante o mínimo de acoplagem possível. Um método acessa apenas métodos de objetos diretamente ligados a ele, e só.
Considere a classe:
class Usuario {
...
private Msg mensagem;
private String getNome() {...}
public void parabens(Emitente em) {
/*
* Pela 1ª regra, o método parabens pode acessar
* outro método que pertença ao próprio objeto.
*/
String nome = getNome();
/*
* Pela 2ª regra, o método parabens pode acessar
* métodos de objetos recebidos por parâmetro.
*/
Assinatura ass = em.getAssinatura();
/*
* Pela 3ª regra, o método parabens pode acessar
* métodos de objetos que ele próprio criou.
*/
mensagem = new MsgAniversario();
mensagem.setPara(nome);
mensagem.assine(ass);
/*
* Pela 4ª regra, o método parabens pode acessar
* métodos de objetos que pertença diretamente a
* ele.
*/
Email email = new Email();
email.setConteudo(mensagem);
email.envie();
}
}
Dessa forma, qualquer acesso a métodos dentro de parabéns que não se encaixasse a estas quatro regras deveriam ser revistos, o que levará a escrita de uma boa quantidade de métodos e classes Wrappers pra simplesmente passar requisições a diante.
No caso acima, se o método parabéns não fosse o responsável por criar a mensagem do usuário, então, ele não poderia acessar o objeto mensagem diretamente, ao invés, ele deveria delegar a alguém a obtenção da instância de mensagem. Por exemplo:
getMensagem().setPara(nome);
getMensagem().assine(ass);
Dessa forma, escrevendo dentro do objeto um método getMensagem() estaríamos nos encaixando na 1ª regra.
Law Of Demeter
http://en.wikipedia.org/wiki/Law_of_Demeter
The Pragmatic Programmer
Adrew Hunt, David Thomas
http://www.pragprog.com/the-pragmatic-programmer
Nenhum comentário:
Postar um comentário