rafanoronha.speaking()

software development stuff

Abstraia com moderação

with 3 comments

puzzle

Já faz algum tempo que comentei com o pessoal do .Net Architects sobre um cenário onde enxergo um problema na utilização de abstrações.

Este cenário especificamente é a definição de uma interface sobre o uso de um framework ORM.

O problema de definir uma interface sobre o seu ORM é o fato de que você está tentando isolar algo que em situações normais não precisa ser isolado.

Um bom ORM por si só já é um componente de abstração.
Ele esconde de um software orientado a objetos a natureza relacional da comunicação com um banco de dados.

O motivo justo para se definir a interface seria a possibilidade de trocar de ORM alterando apenas um arquivo de configuração.

Mas deixo aqui dois argumentos que confrontam esta idéia:

1 – Na maior parte dos cenários, a flexibilidade de não depender de uma implementação de ORM é meramente um ornamento sobre o seu software.
Eu fico imaginando se realmente pode vir a fazer sentido que você deixe de utilizar o NHibernate e passe a utilizar o Entity Framework, ou algo do tipo, durante o decorrer de um projeto.

Diante disto, a recomendação é obviamente a de que devemos nos ater à solução mais simples possível.
A mudança de implementação do contrato jamais viria a tona.

2 – Digamos que para o seu contexto em específico, a troca de implementação realmente faça sentido.

No entanto, um fato que não deve ser ignorado é o de que o problema de persistência de dados é complexo, e o que está em jogo não é apenas a troca de mensagens entre o seu software e o componente de persistência, mas também o modo como este componente trata o ciclo de vida dos objetos mapeados, entre outras coisas.

Além disto, a API de um bom ORM é bastante extensa, e cobrí-la com uma interface genérica realmente não me parece a melhor das idéias.
Principalmente ao considerarmos os problemas de mapeamento ou construção de queries, e como estes variam dentre diferentes soluções.

Contratos são extremamente poderosos na construção de software.
No entanto, diferentes cenários podem tirar maior ou menor proveito da utilização destes com o objetivo de plugar diferentes implementações de um componente.

Antes de definir um contrato sobre uma dependência de seu software, é interessante que se faça uma análise do custo-benefício trazido pela abstração.

Não tome decisões em função da suposição de que em um belo e distante dia elas lhe trarão benefícios.
Trata-se de um dos erros mais cometidos por arquitetos de software.


Help me to spread the word!
  • Digg
  • del.icio.us
  • RSS
  • DotNetKicks
  • Technorati
  • Twitter
  • FriendFeed

Written by rafanoronha

February 22nd, 2010 at 9:45 am

Posted in Sem categoria

Tagged with

3 Responses to 'Abstraia com moderação'

Subscribe to comments with RSS or TrackBack to 'Abstraia com moderação'.

  1. Concordo com você. Tentar abstrair o que por si só já é nossa abstração é, na maioria das vezes, um grande erro e custa bem caro.

    Há algum tempo atrás eu bloguei sobre este mesmo assunto, contudo com um foco maior em DAO e frameworks de persistência Java (como JPA/Hibernate).

    http://www.rponte.com.br/2009/06/08/no-more-daos/

    Enfim, post simples e muito bom.
    Um abraço.

    Rafael Ponte

    22 Feb 10 at 10:09

  2. Sabe que já pensava isto em Java e, assim como o Rafael, acompanhei discussões ferrenhas sobre usar uma camada DAO ou se o próprio JPA é o DAO, etc. Agora, ingressando neste universo .NET tinha a mesma dúvida, se criaria meus repositórios abstraídos, ou deixaria minha camada de negócio “ciente” da tecnologia. Concordo realmente, acho que o “iniciante-avançado”, pensa em pôr padrões em tudo, o experiente, usa padrões onde eles devem ser usados. Acho que é isso.

    Muito bom teu post, abraço.

    Márcio Torres

    7 Jul 10 at 8:32

  3. Oi Márcio,

    Bem colocada a questão da empolgação do “iniciante-avançado”.

    Costumo bater bastante nesta tecla: seguir receitas de bolo não funciona.

    Outros textos meus seguem esta mesma linha de raciocínio:

    http://rafanoronha.net/boas-praticas-cuidado-com-elas/
    http://rafanoronha.net/o-facil-o-dificil-e-o-simples/
    http://rafanoronha.net/os-meios-possuem-um-fim/

    rafanoronha

    7 Jul 10 at 23:59

Leave a Reply