caelum / caelum-stella

O Caelum Stella visa suprir as necessidades do dia a dia do desenvolvedor brasileiro
http://stella.caelum.com.br
663 stars 340 forks source link

Adiciona o conceito de regiões do território nacional #188

Closed hprange closed 8 years ago

hprange commented 8 years ago

Essa mudança adiciona um enum Regiao que representa o conjunto de 5 regiões em que se divide o território nacional: Norte, Nordeste, Centro Oeste, Sudeste e Sul. Cada região é composta por seus respectivos estados (+ o Distrito Federal). Dessa forma, o enum Estado também foi alterado para que cada estado saiba em que região está localizado.

Essa alteração permite que lógicas possam se basear no conceito de região, ao invés de obrigar o desenvolvedor a criar o seu próprio conjunto de estados. Os métodos Regiao#compostaPor e Estado#localizadoEm também facilitam a aplicação de lógicas que levam em consideração as regiões.

Nota Técnica A amarração entre regiões e estados poderia ser feita na inicialização dos enums. Cada região teria o seu conjunto de estados e cada estado a sua região. Apesar de não causar um erro de compilação, essa situação gera um ciclo de interdependência na inicialização dos enums Regiao e Estado, causando resultados inesperados e indeterminados. Por isso, a amarração entre regiões e estados é feita dinamicamente nas chamadas dos métodos Regiao#estados e Estado#regiao.

mariofts commented 8 years ago

Fiz alguns comentários, Assim que puder revisar eu faço o merge.

hprange commented 8 years ago

@mariofts obrigado por comentar a pull request tão prontamente. Estou providenciando os ajustes conforme sugerido.

hprange commented 8 years ago

@mariofts fiz os ajustes e já dei push. Mantive a implementação do método Estado#regiao dinâmica. Ou seja, para descobrir qual é a região de um estado é preciso passar pelas regiões até encontrar aquela que contém o estado em questão. Uma alternativa a essa solução sem criar o ciclo de inicialização seria tornar o método Estado#regiao abstrato e implementar em cada instância de estado (como é feito com o método Estado#getIEValidator). Se você achar que essa é uma forma melhor de resolver o problema, eu também posso fazer esse ajuste.

mariofts commented 8 years ago

Acredito que está bom assim. Obrigado pelo PR.

Abraços