[quote=RafaelRio]
4) XML. Vamos ter que compilar os oitocentos milhões de municípios brasileiros? :-o [/quote]
Não é um XML com os nomes dos lougradouros, é um XML com os tipos de logradouro.
Enquanto não ha nada concreto para discutir sobre, deixem-me so chamar a atenção para 2 pontos:
- Normalização de endereços é um assunto complicado. tanto que ha programas proprietários para isso. Tudo bem que façamos uma normalizaão simples, que acaba sendo quase que apenas uma formatação, mas acho que não podemos ir muito mais longe… Ou seja, descobrir a 1001 formas de escrever rua ou avenida não é tão simples quanto parece. (envolve ter um banco de dados ou vários e processá-los)
- Nem todos os endereços têm a mesma estrutura. E já que se falou de colocar o pais, então cada pais tem a sua estrutura. Mas mesmo apenas no brasil existem várias estrutura, por exemplo como eu separo este endereço dos campos municipio/bairro/logradouro/numero/complemento ?
Estrada Ponta Leste, Km 07
Estrada Parque ? Km 17 ? Abobral
A resposta é: não separo. Posso dizer que o logradouro é do tipo estrada e o nome e dizer que km X é o numero ou o complemento, mas não terei bairro , por exemplo. Tlv nem municipio. E numero/complemento é em quilometros ? Como eu formato isso depois ?
A API de endereços parte do principio que todos os endereços tem esse campos, mas isso não é verdade para o Brasil e muito menos para os outros paises.
A validação de CNPJ e afins é muito util realmente , mas Datas e Endereços dava uma API por si mesma. E o pior é que excepto as validações , o resto é muito susceptivel de internacilização/localização o que dificulta muito o problema.
Agora , alguém pode dizer para focar apenas no Brasil e esquecer os outros paises. Tudo bem, mas então no brasil ninguém manipula endereços/telefones/unidades de outros países ?
Acho que vcs têm que ficar conscientes do trabalho em que se vão meter se quiserem fazer algo minimamente util. Colocar municipio/bairro/logradouro/numero/complemento num bean e jogar um formatdor em cima não vai resolver o problema… afinal isso é o que todo o mundo faz porque provavelmente tem um banco com esses campos.
Então, eu acho que poderiamos fazer :
-
API de validação de CNPJ , CPF e afins - é realmente util ter isto pronto
-
API de manipulação de dinheiro - é simples de fazer e é util.
-
Criptografia simples - tb util pois deve ser usado para passwords e todo o sistema que se preze te password.
-
API de tempo - Aqui temos vários graus conforme o problema que queremos resolver ( que ainda ninguem disse qual é…)
4.a) Uma classe que extenda Calendar e possibilite as operações isHoliday(), isWorkingDay() e isWeekend() - simples demais, mas util
4.b) Uma classe que não herde de Calendar , mas o use internamente e possibilite as mesmas operações - simples tb , na realidade a questão está na compatibilidade deste classe
4.c) Uma API simples para escreve datas sem hora, etc… junto com a classe de 4.b) destinando-se a facilitar o transporte de datas e tempos entre camadas com suporte para conversão para datas do java.sql algo como CalendarDate date = new CalendarDate(2007,1,1);
java.sql.Date sqlDate = date.toSQL(); Também o suporte a intervalos de datas e horários, o que tb é simples e util.
4.d) A API de 4.c mais um mecanismo de calcular diferença e soma de temos com e sem timezone. Tb conversão de horas entre time zones
4.e) A API de 4.d mais facilidade de conversão entre os diversos tipos de objectos definidos.
-
API de Quantidades/Unidades aka Métricas (cuidado que esta palavra não se usa neste como sinônimo de medida física) - Esta tb é dificil deêm uma olhada em JScience para terem uma ideia de onde pode chegar a complexidade.
Aqui é muito importante o objectivo! Pelo que foi dito o objectivo é a conversão. Ora mas isso é exactamente o mais dificil!
5.a) Tal como está agora o negocio seria ter uma classe para cada dimensão e métodos para converter essa dimenção entre N combinações de unidades, por exemplo: Temperature.celciusToFahrenheit() e Temperature.fahrenheitToCelcius() e Temperature.kelvinToCelcius() e
Temperature.celciusToKelvin() e assim vai.
5.b)Tudo bem, mas isto implica num código imenso e pouco organizado.
Tlv seja uma boa pensar no conceito de conversor
Converter
convert (numero)
invert():Converter
Ali eu escrevi numero pq não sei em que classe colocar. double é RUIM , mas tb não sei que precisão é necessária. Suspeito, contudo, que se tratando de unidades especiais como de energia, o uso é cientfico, então tvl seja bom usar BigDecimal.
5.c) Ou criar um objeto semelhante a money que agrega um valor e uma unidade. E por falar nisso uma classe de unidade.
Com os conversores não temos que ter uma classe para cada dimensão e poderemos ter um registro central (padrão registry) para obter os conversores exemplo:
Mesure x = new Mesure(40, Unit.CELCIUS)
Converter converter = ConversionUtils.getConverter(Unit.CELCIUS , Unit.FAHRENHEIT);
Mesure y = converter.convert(x);
Mesure x = converter.invert().convert(y); // isto resultaria em x de novo
Ou
Mesure x = new Mesure(40, Unit.CELCIUS);
Mesure y = ConversionUtils.convertTo(x, Unit.FAHRENHEIT);
E poderiamos fazer
Mesure x = new Mesure(40, Unit.CELCIUS);
Mesure y = new Mesure(60, Unit.CELCIUS);
Mesure media = x.plus(y).divide(2); // 50 ºC
e
Mesure x = new Mesure(4, Unit.METER);
Mesure area = x.time(x); // 16 metros quadrados
5.d) permitir operações com unidades diferentes mas que são da mesma especie, por exemplo grama com quilo ou km com milha.
5.e) permitir conversões por translação. Por exemplo, se não tiver o conversor km -> milha , poderia ter km -> pé e pé -> milha , o sistema concatenaria os dois para constuir um conversor km -> milha (esta é bem mais avançada mas diminuir a necessidade de criar muitos conversores)
O trabalho forte é criar os conversores para os pares de unidades e registrar no ConversionUtils
- Sistema de endereços. Aqui o negocio é bem mais complexo. ´8E necessário definir um escopo para isto.
Proponho que se lista listagem como TODO pela ordem. Apenas os itens mais avançados de 4,5 e 6 podem ser bem complicados. o resto é simples, simples
P.S. ainda não vi comentários às classes que enviem …