2

Boas práticas - Lei de Demeter

Flavio Medeiros
Flavio Medeiros

Galera,

Recentemente, durante a disciplina de Análise de Projeto de Software, tomei conhecimento da Lei de Demeter. Sobre padrões de projeto, boas práticas, já conhecia o SOLID, DRY, Clean Code, porém nunca tinha ouvido falar da LoD (Law of Demeter). Fiz algumas buscas e achei interessante seus postulados e inclusive venho seguindo-os em meus projetos pessoais.

Portanto gostaria de compartilhar com vocês um compilado de informações sobre a LoD, com o intuito de ajudar aqueles que, assim como eu, ainda desconhecem esse padrão:


A Lei de Demeter tem como objetivo melhorar a organização da arquitetura das classes, reduzindo suas dependências, mantendo seu baixo acoplamento. Ganhamos assim um código mais fácil de manter e evoluir.


Sua premissa básica é o princípio do mínimo conhecimento, ou seja, cada classe deve conversar somente com seus amigos, e nunca falar com estranhos. Ela prega que uma classe não deve conhecer mais do que a quem está sendo invocado.


Definição da Lei de Demeter:

Para todos os métodos M pertencentes ao objeto X, estes podem invocar apenas os métodos dos seguintes tipos de objetos:


• Regra 01 - Métodos do próprio objeto X.


• Regra 02 – Objetos que sejam Parâmetros do próprio método M.


• Regra 03 - Objetos criados ou instanciados pelo próprio método M.


Regra 04 - Objetos que sejam atributos de X.



Construções como

objetoA.GetB().GetC().GetInformacao() fere a Lei de Demeter por ela determinar que uma classe não deve conhecer mais do que a quem está sendo invocado. Chamadas como essa geram um forte acoplamento entre as classes envolvidas.


É isso pessoal!

Espero ter contribuído com o aprendizado de vocês assim como todo dia aprendo algo novo aqui na DIO.

Forte Abraço

1
46

Comentários (1)

1
R

Rodrigo Silva

02/03/2021 18:14

Muito interessante, Flávio. Os design patterns são um mundo e a cada dia aprendemos algo. Confesso que não conhecia sobre a Lei de demeter, mas é sempre bom se reciclar e tentar manter boas práticas!

Desenvolvedor FullStack Java/Angular

Brasil