Me aliei à campanha "Anti-if":

I have joined Anti-IF Campaign

A idéia é: use polimorfismo, não use If.

Lembro de ter ouvido recentemente que switch ("select case" no VB) é malígno. Devem ser escondido no código, e evitado a todo custo. É verdade. Switch é um if anabolizado!


Postado na(s) categoria(s) Arquitetura pelo Giovanni Bassi em 25 de junho de 2009 às 12:18 | Tags:

Comentários


junho 25. 2009 14:13
tucaz
Giggio,

voce viu o exemplo deles pra remover o IF? Em algum lugar vai ter que exisir o IF pra decidir qual classe criar, certo?

Dessa forma vamos tirar o IF de um lugar e por em outro...

http://blog.tucaz.net/http://blog.tucaz.net/


Brazil Leandro
junho 25. 2009 15:49
Leandro
Tucaz, da forma como você falou no comentário acima parece que teríamos um falso ganho apenas trocando um if de lugar, mas acredito que a idéia da campanha de trocar os IFs por polirmofismo seja maior, todos nós sabemos que em um sistema existe muito mais do que apenas um IF.
Talvez colocando um IF inicial para decidir que classe irá ser criada, você economize diversos IFs lá na frente. E tem mais, dependendo de como você faz para criar suas classes, talvez você nem mesmo precise do IF inicial, dependendo do caso você pode deixar a criação a cargo de um framework de DI/IoC, Factories ou alguma outra forma.

Eu sou totalmente a favor do uso de Polimorfismo e achei essa campanha muito legal devido ao lado engaçado e ao mesmo tempo real. A idéia não é banir o IF, seria impossível viver sem IFs, mas é tentar manter o código mais limpo e legível através de Polimorfismo.

no site


junho 25. 2009 16:17
Giovanni Bassi
Exato, Leandro! Você "encapsula" o if. Por exemplo, se usar NH, o encapsulamento do if está dentro do ORM, que decide qual classe criar.
Está no XML!

http://unplugged.giggio.net/http://unplugged.giggio.net/


junho 25. 2009 18:04
tucaz
Hmmmm....XML ou codigo...Fico com o codigo!

De qualquer forma, acho uma boa ideia exercitar esse tipo de pratica, mas dizer que os IFs vao sumir eh mentira. Pode ser que talvez fiquem num lugar melhor (ou nao), mas que eles vao soh trocar de lugar, vao. Smile

http://blog.tucaz.net/http://blog.tucaz.net/


junho 25. 2009 19:20
Giovanni Bassi
Tuca,
Sim, é verdade. Lá no ORM vai ter um "if"!
E na boa, prefiro o ORM do que o "if" no código.
O lance é esconder o "if" nas profundezas do oceano.

http://unplugged.giggio.net/http://unplugged.giggio.net/


Brazil Leandro
junho 25. 2009 20:03
Leandro
"...mas dizer que os IFs vao sumir eh mentira..."
Mas ninguém falou que os IFs vão sumir, o que vai sumir é o IF inútil que pode ser substitído por polimorfismo para deixar o código mais legível.

Por exemplo, imagine o NHibernate que visa abstrair a base de dados, quando você quer usar SQLServer você configura lá falando que está utilizando SQLServer, depois você simplesmente resolve usar MySQL, você vai lá no arquivo de configuração e muda para MySQL. Beleza, até aí tudo certo, nada de anormal, agora na implementação você acha sinceramente que o desenvolvedor do NHibernate deveria colocar lá no código dele assim?

ppublic SqlString GetLimitString(SqlString querySqlString, int offset, int limit) {
    if(/*usando MySQL*/)
        return String.Format("{0} limit {1}, {2}", querySqlString, offset, limit);
    
    if(/*usando SqlServer*/)
        return String.Format("select top {0} ({1}) q", querySqlString, limit);
}

ao invés de ter feito como é hoje, onde existe uma classe de Dialect para cada banco de dados tratando unica e exclusivamente as particularidades de cada banco??

Isso foi só um exemplo rápido. Imagine só como esse método ficaria inchado para conter a forma de limit de cada banco de dados.

Ou seja, o lance é a ABSTRAÇÃO.

no site


junho 26. 2009 09:29
Ramon Durães
Acredito que ficará mais fácil de ser mantido. Mas o "if" realmente será escondido em algum lugar...

http://www.ramonduraes.net/http://www.ramonduraes.net/

Comentar


(Vai mostrar seu Gravatar)

  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading



Quem é Giovanni Bassi

Giovanni Bassi Sou uma pessoa apaixonada por tecnologia e especificamente por .Net. Sou consultor independente especialista em .Net, focado em arquitetura e melhores práticas. Tenho dezenas de artigos publicados na .Net Magazine, revista da qual sou editor técnico. Ministro palestras e cursos de vez em quando, e quando dá tempo eu respiro um pouco. Mais detalhes nesta página.

Busca

Selos

Eu vou ao TechEd Brasil 2010, e você?

MVP

MCPD

MCSD

.Net Magazine

Abaixo ao if!

Calendário

«  setembro 2010  »
seteququsedo
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910
Ver detalhamento de posts no calendário

Blogs interessantes

    OPMLDownload OPML file

    Postagens recentes

    Comentários recentes

    Disclaimer / Aviso
    As opiniões colocadas neste blog são minhas e pessoais e não expressam necessariamente as opiniões de meus empregadores, pareceiros e amigos. Da mesma forma, os comentários feitos por leitores do blog não expressam a minha opinião.

    © Copyright 2010 .Net Unplugged
    Log in