Estou dando mais uma refatorada naquele meu projeto de ARS.
Antes de tentar as soluções propostas no outro tópico, fiquei curioso com a substituição de Constantes por Enum. No livro Effective Java, Joshua Bloch fala para usar Enums no lugar de Constantes inteiras. Já no livro do Fowler (Refactoring…) não vi nada que se relacionasse a esse tipo de refatoração, apenas substituição de Enums por State/Strategy, Classe ou Subclasses.
Entretanto, gostei da solução do Bloch, pois posso colocar toda a lógica que envolve as Constantes no Enum - Testes, Maps, etc.
Assim, vou entender esse primeiro passo para depois pensar nas soluções propostas por Fowler. Gostaria de saber a opnião do pessoal quanto a esse caso.
Abaixo seguem os códigos gerados. Não gostei de algumas coisas, como o método get para resolver os ordinais que não iniciam em zero. Mas em um balanço geral, a organização do código pesou para o lado dos Enums, por enquanto. A classe Classification (criada a partir das refatorações do tópico anteriormente citado) ficou muito mais simples, tendo apenas a responsabilidade de juntar os 3 tipos de classificação que possuo no sistema.
Usei os livros citados como referência, mais este site.
public enum Complexity {
COMPLEXA(1, "Complexa"),
MEDIA(2, "Média"),
SIMPLES(3, "Simples"),
MUITO_SIMPLES(4, "Muito Simples");
private final int key;
private final String value;
Complexity(int key, String value){
this.key = key;
this.value = value;
}
public static String get(int key){
return Complexity.values()[key - 1].value;
}
public static boolean isComplexa(int complexity){
return complexity == COMPLEXA.key;
}
public static boolean isMedia(int complexity){
return complexity == MEDIA.key;
}
public static boolean isSimples(int complexity){
return complexity == SIMPLES.key;
}
public static boolean isMuitoSimples(int complexity){
return complexity == MUITO_SIMPLES.key;
}
}
O uso ficou assim:
public class TestCase {
public static void main(String[] args) {
int complexity = 4;
System.out.println(Complexity.get(complexity));
}
}
Qualquer conselho será muito bem vindo.
Obrigado!