Porque usamos Frameworks?

Porque usamos Frameworks?

Vamos contextualizar o que são Frameworks. Segundo a Wikipedia:

"No desenvolvimento do software, um framework ou arcabouço é uma estrutura de suporte definida em que um outro projeto de software pode ser organizado e desenvolvido. Um framework pode incluir programas de suporte, bibliotecas de código, linguagens de script e outros softwares para ajudar a desenvolver e juntar diferentes componentes de um projeto de software."

Segundo essa definição, o Framework deveria nos auxiliar como construir nossa aplicação sem nos preocuparmos em definirmos a estrutura dos paradigmas ou teorias escolhidos, em outras palavras: "Extendemos um framework e implementamos apenas os processos levantados em cima do fluxo que ele organiza". Alguns Frameworks, como o Hibernate, vão mais além, são Engines, motores de software prontos para uso.

Vamos exemplificar em alguns contextos. Os conceitos são importantes para a escolha dos frameworks necessários, quando voce desconhece ou relega isso fica muito mais difícil ter o feeling necessário para avaliar uma situação como essas.

Uma das formas clássicas de desacoplamento de um serviço para diferenciar o tratamento adequado à requisição é na implementação de fábricas de classes concretas das interfaces sugeridas. A implementação de DAOs é clássica como exemplo disso, voce cria uma interface para manipulação dos dados e classes concretas para cada mecanismo de persistência diferente. A inversão de controle a injeção de dependências foi uma evolução desse modelo, auxiliando até na camada de modelo caso necessite desse desacoplamento, como por exemplo uma interface de Nota Fiscal para encapsular entre o sistema de contabilidade e faturamento, o "quando" injetar fica a cargo do framework que conhece o mapeamento adequado. Voce não vai desenvolver injeção porque existe o melhor Framework para isso e ele se chama Spring.

Após a popularização dos bancos de dados para o desenvolvimento de software, dificilmente voce divergirá (por pressão do mercado) nesse segmento em prol de outra solução, ainda mais se a persistência requer cuidados capciosos e de dificil manipulação e manutenção como controle de concorrência. Ainda hoje existem sistemas que fazem seu próprio mecanismo de persistência, e não estou falando em salvar dados em xml, falo ainda em arquivos comuns, sem padronização reconhecida pelo mercado, geralmente sistema legado com seus bons 15 ou até 20 anos de existência. Mas o uso de SGBDs se chocam com o desenvolvimento Orientado a Objetos e o mapeamento objeto-relacional corresponde pela parte mais significativa do tempo de desenvolvimento medida em horas. O uso de um framework para minimizar esse desenvolvimento é significativo no sucesso do projeto. O problema reside quando voce abdica do uso de um produto reconhecido e amplamente suportado por uma solução In House.

Frameworks caseiros

A comunidade JAVA é pejoramente reconhecida pela utilização desenfreada de padrões e Frameworks, o que acarreta em complexidades enormes e geralmente evitáveis. Como a plataforma JAVA é robusta e dominou o modelo Enterprisey (usada como principal plataforma pelos maiores Players no fornecimento de soluções como IBM, Sun, Oracle, Borland, etc), unificando de forma inédita o marcado e o mundo acadêmico, acarretou na proliferação de Frameworks que solucionam um mesmo contexto. Nenhuma plataforma é tão rica em soluções diferentes para o mesmo problema. Solução para uns, problemas para outros. É comum desenvolvedores menos experientes sofrerem crises existenciais sobre qual solução adotar, vide o modelo MVC Model 2 que possui meio milhão de frameworks que fazem a mesma coisa (vale ressaltar a sanidade mental do pessoal do Struts e Webwork que resolveram unificar suas soluções e fazer algo melhor juntos).

Tenho e tive problemas sérios com equipes que acham que podem criar uma solução melhor que o mundo inteiro. Explico, na empresa que trabalho existe uma ferramenta que se propõe a competir com o Hibernate com a diferença que só quem conhece são as pessoas que trabalharam na sua concepção e por sinal nem fazem parte da empresa em questão. Será que elas pensaram em todos os problemas do mapeamento objeto-relacional que grandes especialistas no mundo inteiro pensaram e ajudaram a solucionar ou mesmo minimizar no Hibernate? Evidente que não tiveram recursos suficientes.

E aqueles Frameworks que suspostamente são Open Source mas que o controle é rigidamente orquestrado por uma empresa apenas? Eles conseguem a eficiência na resolução de problemas com tamanha agilidade e precisão que projetos abertos e suportados por uma grande comunidade?

A diversidade é interessante, a concorrência ajudou ao JAVA ser o que é, mas o ego e os sentimentos humanos de discórdia por ciumes ou vícios semelhantes proliferam ferramentas desnecessárias. Você teve uma idéia excelente que melhora um conceito? O que está esperando para criar um projeto? Mas será que não é melhor contribuir com um projeto existente e ajudá-lo a melhorar? Essas são questões que só dependem das pessoas envolvidas, não está certo ou errado criar mais uma ferramenta, mas é saudável saber escolher, antes de tudo é preferível levar em conta o pós-desenvolvimento, esse é o mais importante nos custos finais de um produto.

A escolha precipitada principalmente empolgada por apresentações e promessas mágicas de solucionar o que o mercado tenta a 30 anos ou mais é a mais nociva à saúde financeira dos negócios. Assim como existem pessoas que não saem sem consultar o horóscopo do dia ou levam a sério charlatanismo de búzios e bacias com água, existem arquitetos e gerentes que acreditam que alguém solucionou um problema do mercado e está cobrando somente U$ 20,000 dólares por isso. Pior, acreditam que sua equipe conseguirá desenvolver uma ferramenta melhor do que o mundo inteiro. Isso que não entendo, geralmente as empresas já trabalham no limite de seus recursos, o que diabos levam a crer que desenvolvendo algo que já existe é melhor do que ajudar a melhorá-lo?

Quem se enganou com Egen e coisas similares se enganou não por falta de aviso, isso é comum na engenharia de softwares, ninguém pode substituir o ser humano na criação, não existe inteligência artificial ainda que consiga pensar, e o software é uma criação, é como uma obra de arte precisa de um artista. Porque modelos de desenvolvimento falharam por associar o desenvolvimento de software com construção civil? Porque depois que se levanta um prédio, ninguem o move para a direita ou muda um andar de lugar, já no software você pode iniciar a construção pelo telhado. O que eu quero dizer com isso é que um framework é apenas um arcabouço como diz a definição do Wikipedia, ele não vai implementar seus processos, somente o programador.

Usar ou não usar.

Quanta complexidade você gosta? Eu gosto do simples, quanto mais simples melhor.

Se eu sou contratado para desenvolver um software web, eu não chego com Spring, Struts, Hibernate, JSF, KYZ debaixo do braço e digo: quando começamos e qual é o prazo?

Quando falamos em desenvolvimento WEB (um exemplo para contextualizarmos) de forma tradicional só vem na minha mente inicialmente que tratarei de trabalhar com o protocolo HTTP, tecnologias das especificações W3C (como CSS, XHTMl) e JEE no lado servidor (mas ainda num sentido macro, nem sei se precisarei de EJBs, talvês apenas JSP e Servlet).

Vamos voltar um pouco no passado, a Sun criou os EJBs imaginando um modelo distribuído que estava em moda no início desse milênio. O cotidiano das empresas mostrou que esse modelo não era realidade, poucos são os casos que sistemas precisam rodar em servidores de aplicações distintos. Imaginavam a contabilidade no Brasil e o Financeiro na Europa por exemplo. Qual a realidade disso nas empresas? Até nas grandes isso é incomum quando se parte para a prática, inviável pelos custos logísticos associados em todos os fatores que impactam nos negócios como comunicação entre os manipuladores dos dados. Porque eu vou usar EJB se meu sistema sequer é distribuído? Existem outros fatores, mas compensa o custo? Engraçado como a nova especificação deixou o Criteria do Hibernate de fora do JPA e ainda disseram que Criteria era extranho, extranho é essa insanidade de deixar de fora o principal componente do Framework que deu vida ao troço.

Como alguém pode antes de sequer conhecer os processos do negócio já saber que vai usar Spring? e para que?

Não quero tirar o mérito de nenhum framework aqui, apenas saber se o uso está sendo razoável.

Recentemente foi selecionado para ser o arquiteto de um projeto novo aqui na secretaria que trabalho, selecionei como arquitetura da aplicação apenas JSP, Servlet e DWR (como controlador da aplicação) além dos POJOS no modelo da aplicação usando Hibernate3 como engine de persistencia, ponderei sobre o que precisava e cheguei a conclusão que isso era o suficiente. Deu uma confusão dos diabos com o desenvolvedor porque segundo ele, não sabia trabalhar com servlet, nunca desenvolveu na vida sem o Struts, deu piti, sustentei minha argumentação, dei piti, discutimos, ele me xingou, eu pedi para sair do projeto, no final a gerência do projeto SABIAMENTE me deu ganho de causa (óbvio que se eu tivesse perdido a queda de braços eu estaria chamando de não sabios). Tirei dessa experiência que os princípios são mais importantes que as práticas, que os valores são ainda mais importantes ainda. Fui precipitado e confesso que não soube levar a situação da devida forma. Resumo da história, o único servlet que existe até o momento na aplicação é o do DWR que nem foi nós que desenvolvemos, criamos os dois casos de uso principais (que são o coração da aplicação) e agora que virão aqueles cadastros e operações CRUD que correspondem aos resto da aplicação mas é a parte mais simples. Pode até ser que daqui por diante venha a precisar de Struts ou outro Framework, mas até agora não precisei, o custo de adicionar na aplicação é irrisório, mas construir sobre algo que não havia necessidade era altíssimo.

Quando alguém me pergunta o que acho de usar um determinado Framework, eu faço como Platão, respondo com perguntas para saber se há a necessidade.

6 thoughts on “Porque usamos Frameworks?”

  1. Kra, vc simplesmente copiou da Wikipédia… tradicional “Ctrl + C e Ctrl + V”.
    Seja mais criativo!!!

  2. Você leu o artigo?
    Como assim copiei? olha o tamanho do verbete no wikipedia e olhe o tamanho do artigo, como foi cópia?
    Voce realmente leu meu artigo ou viu somente o primeiro parágrafo?

Comments are closed.