[quote=norbAns]Pessoal,
É comum algumas empresas ignorem frameworks conhecidos pelo mercado e usarem soluções próprias?
[/quote]
Sim, é comum. Isso é conhecido como “Sindrome de Não-Feito-Aqui” ( Not-In-House ). As pessoas têm tendencia natural a querer criar tudo. Afinal software é um meio criativo.
Muitas vezes as razões por detrás são relevantes e corretas e isso leva ao aparecimento de novas tecnologias ( o ant, o mavem , todos os NoSQL , etc… )
Mas a maioria das vezes é apenas porque podem. É comum em lugares com dinheiro e sem responsabilização como bancos e grandes empresas. A intensão muitas vezes é boa, mas acaba sendo deturpada pela politicagem dessas instituições. Sempre tem alguém mais alto que vc que é burro que nem uma porta e não entende as vantagens de certas escolhas técnicas.
Isto tem origem na contratação de pessoas sem experiencia e sem perfil para criar esses frameworks. Então, as pessoas fazem o que podem, mas é como contatar um pedreiro para fazer um casa. Existem conhecimentos que apenas o arquiteto sabe e irá se preocupar em aplicar.
Uma vez trabalhei numa empresa que tinha um framework bem simples de persistencia. Que usava objetos para persistir em jdbc. Bem simples, pré-hibernate. O framework era simples, mas não era extensível, tinha muitas falhas em termos de modelagem, uso de abstração, não usava interfaces em lado nenhum. Quando foi preciso exigir mais dele, tivemos que o rescrever. Depois eu fiquei muito supreendido quando descobrir que tinha sido um professor da USP que o tinha criado. Ou seja, criar uma framework exige um tipo de experiencia que um junior, ou alguém acadêmico não tem. Exige prática. Exige vc já ter passado pelo mesmo problema várias vezes. E sobretudo exige vc saber analizar tecnologia. Em outro lugar exisgiam o uso de Struts 1 com DisplayTag 1.0
O display tag é um component bacana, mas não quando vc em milhares de linhas (centenas já dá problema). A versão mais moderna do framewokr permitia cria mecanismo de paginação de forma a só procurar no banco o que precisavamos quando o usuario navegasse, mas o cliente, que era um banco, não deixava usar a versão 1.1. A razão ? Nenhuma, simplesmente não podiamos usar. O problema era que a diretriz do banco mandava usar aquela versão e se usassemos outra poderia dar problema em outras apliações porque todas as aplicações corriam no mesmo servidor usando as mesmas bibliotecas. Ou seja, falta de inteligencia ou uso de recursos para resolver um problema de infra. A opção era fazermos a nossa própria tag de tabelas, mas ai teriamos outros problemas de custo e prazo pois esse componente não estava previsto.
Em geral, vc sempre deve confiar em quem já funciona, mas não deve colocar todos os ovos no mesmo cesto. Ou seja, por exemplo, persistência, use o hibernate, mas isole sua camada de persistencia de forma que o resto do sistema não saiba que existe o hibernate. Desta forma, no futuro vc pode mudar a tecnologia sem ter que reescrever o software. Este isolamento não é trivial e pela comodidade e velocidade de implementação as pessoas simplesmente abdicam de ter estes cuidados e acabam fazendo um péssimo design que leva ao consumo absurdo de recursos que poderiam ser usados para coisas mais uteis.
Um outro fenômeno é a desconfiança natural da empresa contratar alguém de fora para fazer o design porque “é muito secreto o que eles estão fazendo” e isso acaba que pessoas não preparadas ganhem essa responsabilidade. É o equivalente a vc não querer chamar um médico ou um encanador e vc mesmo fazer a operação ou tentar mudar os canos. Quando é coisas simples, dá certo. Tipo um raspão ou desentupir a pia do lava louça. Mas quando complica , não dá certo. E o problema das pessoas comuns é não saber onde está a fronteira. Onde acaba "a coisa simples " e começa “a coisa complexa”.
Finalmente existe o pensamento “Vamos fazer de pois mudamos”. Isto é o pior. Muita gente acha que isto é ser ágil. Não. Isto é ser incompetente. Se ha um jeito melhor use-o logo de inicio. Se vc não o achou porque não procurou, procure melhor. Existem rios de informação sobre bom design e bons princípios. Claro, que nem sempre as pessoas vão entender as nuances e tem até uns idiotas dizendo que isso é sobre-engenharia. Só é sobre-engenharia quando não poupa seu dinheiro ou tempo. Existe uma fonteira em fazer um design flexível e criar uma máquina de Rube Goldberg e existem principios para vc saber a diferença. Nínguem disse que é fácil, mas por isso mesmo que criar um framework não é trivial. ainda para mais quando vc tentar criar uma framework que dará suporte a todos os sistemas da empresa.
Eu acho que criar uma plataforma de aplicação da empresa (normalmente chamado de framework ou “infra”) é uma necessidade e quando bem feito pode poupar muito dinheiro à empresa. Mas quando mal feito - e é a norma - pode levar a empresa à falência.
Isto é ainda mais verdade me java, onde a plataforma java em si, é apenas uma plataforma virtual e ela espera que vc crie a plataforma de aplicação em cima dela. A JEE é quase isso, mas não é completa pois só versa em um aspecto do ecossistema da aplicação. É por isso que precisamos de mais frameworks, mas juntá-los de uma forma intelegivel e coesa não é simples, embora seja necessário. Como a necessidade é a mãe da invenção ( e da gambiarra) as pessoas são levadas a criar coisas muito loucas para suprir a necessidade. mas não olham o custo do investimento nem do retorno e sempre pensam “depois a gente melhora”. Ou seja, já injetam débito tecnico à partida e são felizes assim. Depois essas pessoas saem da empresa e quem fica que se tem que haver com as más decisões dos anteriores, decisões essas que pela politica e custo da coisa, não poderão ser revogadas. Até que o custo explode e alguém pede um novo framework e tudo começa de novo…