Lei de Demeter X Tell, don't Ask #5
-
Ao ler os conteúdos, muitas vezes acabo confundindo os conceitos. As diferenças que consigo ver são: Lei de Demeter: Te orienta para definir o acoplamento entre as unidades do escopo do seu código. Mas a minha percepção é que para cumprir essas boas práticas o código produzido acaba sendo o mesmo. O que pensam? |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment
-
Excelente questionamento, @EDUMATT3 ! 👏🏻👏🏻 De fato ambas as técnicas tendem a levar pro mesmo resultado de código em diversos cenários, mas na minha opinião o Tell, Don't Ask parece ser mais "completinho". Ele te fornece o resultado da Law of Demeter e ainda te permite desenhar interações entre objetos através de troca de mensagens (comandos), o que naturalmente te leva a um bom nível de encapsulamento! A verdade é que ambos são baseados em um principio ainda maior conhecido como Information Hide. Que basicamente fala sobre encapsulamento e abstrações para esconder detalhes de implementação e o que não importa para quem consome nossa API (ou seja, nosso código). Muitos autores consideram Law of Demeter muito rigida e restritiva, o que pode levar a um código mais dificil pois basicamente você tenta encapsular TUDO, o que dificulta a navegação dentro de um objeto. Não à toa alguns autores preferem não chama-la de Lei (law) mas sim de "sugestão" ou "recomendação". No mais, eu separei alguns links que navegam nessas diferenças entre as técnicas e podem te ajudar a assimilar melhor cada uma delas:
Tem muita informação boa nos links acima, se tiver com tempo e interesse vale a pena consumi-los e aumentar seu repertório de heuristicas de código 😎 |
Beta Was this translation helpful? Give feedback.
Excelente questionamento, @EDUMATT3 ! 👏🏻👏🏻
De fato ambas as técnicas tendem a levar pro mesmo resultado de código em diversos cenários, mas na minha opinião o Tell, Don't Ask parece ser mais "completinho". Ele te fornece o resultado da Law of Demeter e ainda te permite desenhar interações entre objetos através de troca de mensagens (comandos), o que naturalmente te leva a um bom nível de encapsulamento!
A verdade é que ambos são baseados em um principio ainda maior conhecido como Information Hide. Que basicamente fala sobre encapsulamento e abstrações para esconder detalhes de implementação e o que não importa para quem consome nossa API (ou seja, nosso código).
Muitos autores consideram L…