Pesquisar

sexta-feira, 14 de agosto de 2009

Minhas::Commons::Lib::Utils > Apache::Commons

Por mais que existam frameworks como Jpa, Jsf, Ruby On Rails, Lucene, Spring e outros, provavelmente sempre existirá uma característica ou um pedaço de código que nós desenvolvedores iremos criar e guarda-los em um modulo (pacote...) de utils. Há alguns desenvolvedores que mesmo conscientes de que já existem frameworks de ORM, criam seus próprios produtos. Acredite ainda existem.

Se você é aquele que segue a idéia de não reinventar a roda tente sempre, antes de criar essas "libs", verificar se já há algum código criado pra tal problema.

Pensando nesses problemas a grande Apache criou vários projetos com um subnome de Commons. (tanto para plataforma Java quanto .NET) E são esses projetos (não todos, só alguns) que vou resumir aqui seus usos, a idéia não é dar um guideline de uso dos projetos mas apenas mostrar que para quase toda "vontade" de criar uma lib, já existe uma pronta. Então a use...

Tenho um problema de desempenho que acho que resolveria se mantivesse alguns objetos pesados no pool..

Primeiro tenha certeza de onde está o seu real problema de desempenho, isso você só consegue medindo... dá-lhe profiler. Às vezes não são os poucos objetos pesados, mas a grande quantidade de pequenos repetidos! Bem para esse problema a Apache já criou projeto :) Apache Commons Pool.

Trabalho numa empresa que desenvolveu um sistema para o TRE-XX e lá nos temos que validar títulos de eleitor, isso eu dúvido que apache tenha...

Realmente a apache (eu acho que não, vai saber?!...) parece não ter, mas a Caelum desenvolveu (e está evoluindo) um Framework chamado Stella (http://stella.caelum.com.br/core-formatters.html), justamente para prover soluções para problemas que nós desenvolvedores Brasileiros enfrentamos diariamente, tais como: validar cpf, boletos de bancos nacionais, formatar cnpj e etc.

Pô, uso a API padrão do Java (6) no que tange ao assunto de coleções mas não consigo encontrar várias operações que gostaria de fazer com essas coleções... e ai?

Aqui o conselho seria primeiro dar uma boa olhada nas classes Collections (não a Interface Collection) e a Arrays, elas já provem bastantes características mas se mesmo assim não se der por satisfeito pesquise e irá econtrar uma Collection-Commons (http://commons.apache.org/collections/userguide.html) da Apache.

Tô trabalhando num sistema legado e aqui, por questões de performance, uso o JDBC e tenho que criar, mapear e fazer n coisas de banco, tudo na "mão"...

Performance ... sempre deve ser medida pra ser confirmada. A Apache (novamente) tem um projeto DBUtils (http://commons.apache.org/dbutils/examples.html) que têm várias funcionalidades para manuseio de banco de dados.

Nem sempre as utils vem para só para resolver problemas, às vezes criamos utils para facilitar nosso código.

Pensando assim a Apache também criou uma outra Commons (http://commons.apache.org/io/description.html) para IO, o que torna uma tarefa entediante de ler os bytes de um InputStream numa simples tarefa.

Tarefas como mandar email, realizar operação matemáticas complexas, usar recursos e protocolos das redes de computadores, já estão implementadas, testadas e sendo usadas em produção por várias pessoas.

Por último, pare e pense: porque será que grandes projetos, tais como Hibernate Core ou Search, Spring e outros, tem dependências de grande parte dos projetos xyz-commons-kwq.zip da apache? será mesmo necessário criar aquela util ou mesmo criar uma exceção para dizer que o argumento passado à um método veio nulo?

Um comentário:

Carlos disse...

Muito bom o artigo, só quem domina do assunto pode ter tanta propriedade pra falar claramente e passar seu ponto de vista.
Sou do tipo que ainda reinventa a roda e deixo ela personalizada, pra andar no meu próprio terreno.. Tem lá suas vantagens, até porquê são daqueles projetos que se o desenvolvedor morre, ele também morre junto. Não pelo fato de serem pequenos, mas, pela pequena visão de quem nos contrata, achando que comprando um carro mil, conseguirá um desempenho de 1000km/h. Coisas da nossa região! :D
Deixando meu "achares" de lado, parabéns mais uma vez pela iniciativa.
Vai aí uma frase batida, mas, que cabe no contexto:
"Quem troca pães, fica com um só. Quem troca idéias, fica com as duas"