"One of the things that I'm very conviced of, and I know it is also something that many of my collegues in the agile movement is convinced of, is that if you're gonna get reuse you don't do it by building something reusable and then expecting people to go ahead and use it. The much more effective way is to build something usable, and then harvest reusable things from that."

Martin Fowler em Agilists and Architects: Allies not Adversaries Presentation no InfoQ 
(Os negritos são meus, a partir da entonação do próprio Fowler)

Traduzido livremente:

"Uma das coisas de que estou muito convencido, que é algo que muitos dos meus colegas do movimento ágil também estão convencidos, é que se você está buscando reuso, você não o faz criando algo reutilizável, e então esperando que as pessoas usem isso. A maneira mais efetiva é criar algo utilizável, e então colher coisas reutilizáveis a partir daquilo."

Começo o post com essa citação por um motivo: o título do post é uma pegadinha. Você não cria reusabilidade. Além disso, toda a comunidade fica meio boba quando o Fowler é citado, parece que estamos citando a Bíblia, então meu argumento já chega em vocês com o caminho preparado. Ele é uma das unanimidades em todas as comunidades: Java, .Net, Rails, etc…

Às vezes encontro o pedido de algum cliente para auxiliar na criação de um framework corporativo, encapsulando todas as regras de negócio intersistêmicas, toda a infraestrutura, e tudo que é possível encapsular, de forma que cada sistema já começa com 30% construído, devido à altíssima reutilização. O argumento que eu sempre devolvo ao cliente é exatamente o colocado pelo Fowler: você não cria um framework corporativo, ele emerge naturalmente das suas necessidades. Já vi algumas vezes frameworks corporativos criados antes da necessidade, ou feitos por arquitetos/desenvolvedores que não tinham experiência no dia a dia dos projetos onde o framework seria utilizado. Invariavelmente duas coisas acontecem: o framework é muito ruim, e é sumariamente ignorado, ou o framework é muito ruim e é empurrado por alguma política corporativa, o que engessa e encarece o processo de desenvolvimento. Notem que nos dois casos o framework é muito ruim.

Porque o framework é muito ruim? Porque ele feito pelo arquiteto astronauta, ou por algum terceiro, ou até por um funcionário da empresa, só que sem olhar para o mundo real. Aí o framework possui componentes:

  1. Que nunca são usados porque ninguém sabe que existem;
  2. Que são tão complexos que são impossíveis de entender;
  3. Que são irrelevantes, porque não resolvem necessidades de negócio reais;
  4. Que são feitos sem flexibilidade, e não aderem a bons princípios de extensibilidade (como o princípio aberto fechado, por exemplo), e que obrigam os desenvolvedores a ficarem dando a volta no componente para resolver os problemas que ele não resolve.
  5. Que tentam resolver problemas de negócio específico, como se todos os sistemas enxergassem uma entidade sempre sob a mesma perspectiva, e que nunca são utilizados porque isso não é verdade, e o que foi feito não se adapta às necessidades do sistema sendo construído.

A única maneira de fazer um framework útil de forma produtiva é extraí-lo de projetos reais. Qualquer outra coisa é dinheiro jogado no lixo. Receita de bolo:

  1. Faça um projeto com testes;
  2. Extraia o que pode ser comum a outros sistemas. Não extraia nada que seja de negócio, abstraia apenas infra-estrutura;
  3. Refatore livremente o que foi extraído, independente do sistema original, e crie testes para o framework também;
  4. Adapte o sistema original ao framework. Se doer é porque o framework está ruim, volte ao passo 3. No final rode os testes. Tudo tem que passar, se não passar conserte o framework ou o sistema;
  5. Enxague, e repita os passos 1 a 4 até o framework atingir o escopo esperado;
  6. Sempre que trabalhar uma atualização em um sistema legado adeque os sistemas da empresa ao novo framework.

Não preciso nem dizer que tudo tem que ser feito utilizando boas práticas de OO e de arquitetura, não é? Componentização, pacotes, extensibilidade, e aquele monte de outras coisas que eu falo aqui.

Gerentes, vocês entenderam? Arquitetos, vocês entenderam? Desenvolvedores, vocês entenderam?

A chamada de atenção acima é proposital. Com frequência gerentes, arquitetos e desenvolvedores, nesta ordem, querem inventar frameworks corporativos para economizar dinheiro, para diversão conceitual, ou para ajudar no próprio trabalho, respectivamente.

Lembrem disso da próxima vez que alguém sugerir "Vamos criar um framework?".


Postado na(s) categoria(s) Arquitetura pelo giovanni bassi em 3 de agosto de 2009 às 10:13 | Tags:

Comentários


Brazil Alessandro
agosto 3. 2009 14:33
Alessandro
Giggio,
sobre este post ficou tudo muito claro pra mim.
Mais eu gostaria de te pediu um favor.

Poderia criar um post (ou se já tem me indicar) onde você fala sobre o princípio aberto fechado da OO com exemplos?

To procurando na net mais não achei nenhum bom artigo sobre este princípio.

Muito grato

Alessandro

no site


agosto 3. 2009 15:55
Giovanni Bassi
Alessandro, está no meu backlog. Devo escrever nessas próximas semanas.
Você pode ver a definição do Uncle Bob aqui:
www.objectmentor.com/resources/articles/ocp.pdf
É muito boa!

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


agosto 15. 2009 06:25
Rado Sintra Jubile Unisex
Do you earn decent money from this blog or are you doing it just for fun?

http://theluxurywatchstore.biz/rado/rado-sintra-jubile-unisex-watch-r13332742/http://theluxurywatchstore.biz/rado/rado-sintra-jubile-unisex-watch-r13332742/


agosto 17. 2009 03:43
Jacques Lemans Mens Classic
Very interesting topic will bookmark your site to check if you write more about in the future.

http://theswisswatch.biz/jacques-lemans/jacques-lemans-mens-classic-collection-automatic-chronograph-watch-1216v/http://theswisswatch.biz/jacques-lemans/jacques-lemans-mens-classic-collection-automatic-chronograph-watch-1216v/

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