Domínios persistidos? Utilize enums!

Os enums em Java foram uma novidade que vieram com o Java 5. Na época muito se falou na facilidade que os enums traziam e quão melhores eles eram em relação as famosas constantes (static final) tão usadas na época. As migrações de alguns sistemas que utilizavam constantes para enums se tornaram normais ao passo que outros sistemas não podia/valia a pena, mudar, pela complexidade do sistema.

As enums são ideais para controle de tipo como status de alguma entidade no sistema, controles de status do sistema e há quem defenda o uso de constantes para estados e países no sistema, por serem caracterizadas informações que muito provavelmente jamais sofrerão mudanças. Mas existe também a necessidade de se manter certos domínios da aplicação, e alguns defendem que esses domínios devem ser colocados no banco de dados. Não estou discutindo minha opinião sobre manter domínio em banco, mas a necessidade algumas vezes existe.

Gostaria então de trazer a sugestão pela qual escrevo esse post. Se você quer manter domínio em banco, mantenha suas enums persistidas em banco. A grande vantagem dessa abordagem é o fato da aplicação utilizar enums, facilitando o desenvolvimento, e os dados ficam persistidos, como você considerou melhor para seu modelo. Como exemplo, segue:

public enum ScrumStatus {
NAO_INICIADA, EM_ANDAMENTO, CONCLUINDA;
}

Em banco de dados, o modelo precisa expressar mais do que simplesmente a enum acima. Vejamos a enum em um modelo de dados:

SCRUM_STATUS
——————–
ID varchar(5),
VALUE varchar (150);

Como passar a enum para o modelo representado acima? Segue minha sugestão:

public enum ScrumStatus {
NAO_INICIADA("INI"), EM_ANDAMENTO("AND"), CONCLUINDA("CON");
private ScrumStatus(String id) {
this.id = id;
}
private String id;  //respectivos get/set
private String valor; //respectivos get/set
}

Na enum acima, o id passa a ser uma abreviação, o que não é regra e, caso ache melhor, você pode colocar o valor completo da enum no banco. Eu achei que seria dado duplicado, pois na coluna “valor” o texto estará completo. O segredo nessa sugestão fica na recuperação dos dados para exibição, quando os dados forem recuperados as enums já possuirão seus respectivos valores, podendo ser exibido em um select na tela. Para sistemas onde relatórios são gerados com SQL puro, também é uma excelente abordagem, pois relatórios são feitos  a qualquer momento e os dados precisam ser expressivos.

Sabemos que enums, por padrão, não podem ser persistidos em banco, o que é algo facilmente implementável. Fica o desafio para quem quiser postar algo em relação a isso, meu blog está aberto a seu auxílio, ou em um post futuro posso mostrar um exemplo de implementação desse esquema. Até a próxima.

Mar 22nd, 2010 | Posted in Posts
No comments yet.

Leave a comment

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>