Lei de Demeter e Ruby

Na semana passada tivemos uma discussão bem interessante na Globo.com sobre Lei de Demeter e ruby. Basicamente a questão era: faz sentido se aplicar a Lei de Demeter quando se está usando uma linguagem dinâmica como ruby?

(Para entender o que é a Lei de Demeter, vale a leitura do artigo na Wikipedia).

Ao seguir a lei de Demeter o código escrito tende a ter um acoplamento mais baixo e, portanto, é mais fácil de manter e evoluir. Por outro lado, quando a lei é violada, o acoplamento aumenta. Isso independe se a linguagem utilizada é dinâmica ou não. Ao enviar uma mensagem para um colaborador do colaborador você está aumentando o acomplamento.

Na minha opinião, a questão correta para se discutir é somente: faz sentido aplicar a Lei de Demeter? E, nesse caso, a resposta é a já manjada “depende”.

Assim, sem nenhum contexto, aplicar Demeter faz sentido. Acoplamento baixo é algo desejável. Mas, dependendo do caso, o custo de aplicar a lei pode não compensar. Por exemplo, se o modelo de domínio é muito simples, com pouquíssimas regras de negócio, podemos ser mais pragmáticos, não aplicando a lei, sem que isso tenha maiores consequências.

Como quase tudo que fazemos no nosso dia a dia, trata-se de uma questão de entender o conceito e pesar seus prós e contras dentro de um contexto para então decidir o que fazer.

About these ads

3 Responses to Lei de Demeter e Ruby

  1. Guilherme,

    Realmente não consigo ver UMA ÚNICA razão ou relacão entre violar Demeter e linguagem dinâmica. Ainda trabalhamos com objetos e mensagens em Ruby, e pelas mesmas razões que você apresentou podemos violar em Java, C# e etc…

    Vou te falar que antigamente eu era mais flexível com isso, porém, vejo atualmente que um monte de pequenos deslizes em design incremental podem deixar seu sistema altamente acoplado. Veja a minha apresentação no Dev In Sampa que falo sobre isso.

    http://agaelebe.blip.tv/file/2916385/

  2. Eu concordo totalmente contigo no que diz respeiro a não sermos xiitas com as coisas, mas eu ainda acredito que não aplicar Demeter pode significar o mesmo que deixar uma variável pública e depois esconde-la somente se for necessário mais tarde. É um pouco exagerada a minha comparação, mas eu acho que information e implementation hidding são aspectos um pouco críticos. Em fim, isso é apenas a minha opinião.

    Grande abraço!!!

  3. Também não consegui observar como uma linguagem dinâmica como Ruby poderia se beneficiar em não aplicar a Lei de Demeter.
    E, no caso geral, reforçando o que o Rodrigo e o Emerson já observaram, uma pequena “janela quebrada” (como uma violação desnecessária da Lei de Demeter) hoje pode acabar por complicar o sistema inteiro amanhã.
    Abracos!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: