Olá,
gostaria de ver a opinião de vocês sobre uma situação como esta:
estou desenvolvendo uma aplicação para gerar gráficos em condições específicas para a empresa em que trabalho.
Os gráficos de barras e linhas possuem eixos. Logo, poderei ter uma classe Axis.
Porém, em determinadas situações, o eixo X de um gráfico terá valores monetários, em outras valores inteiros ou datas, e assim vai…
Para cada tipo que será exibido pela aplicação, há um tratamento diferente dos valores. Por isto, criei a seguinte classe:
public abstract class Axis<T> {
private List<T> labels;
private Double axisWidth;
private Double axisHeight;
private Double x;
private Double y;
//set and get
public abstract void drawAxis();
}
E criei algumas classes específicas para cada tipo, como:
public class CalendarAxis extends Axis<Calendar> {
//nesta trato valores de data (como somar as datas baseado na escala do gráfico), formatar a saída (usando dateformat...)
}
public class CalendarAxis extends Axis<Long> {
//nesta trato valores monetários (como somar os valores), formatar a saída (usando numberformat...)
}
Até aí tudo bem, o problema surge quando faço isso:
Axis axis = new CalendarAxis();
Obviamente, devido ao fato de generics não existirem em tempo de execução e por causa do polimorfismo em si, o objeto axis aceita qualquer List, independente do tipo que ela foi parametrizada. É dispensável dizer que isto é error prone…
Não quero ter que fazer isso:
CalendarAxis calendarAxis = new CalendarAxis();
por que comprometeria a flexibilidade do meu código…
Qual vcs acham que seria a melhor solução para esta situação?
P.S.: eu sei que dá para abstrair vários aspectos do que eu disse acima e criar mais N classes, mas há minha questão não é sobre isso hehe
P.S.: não sei se esta é a melhor abordagem, porém não fecho outra maneira fazê-lo, uma vez que crio um LineChart, por exemplo, e o Spring se encarrega de injetar as dependências para eu… Enfim, sugestões de alterações no design são bem vindas =D
Abraço,
obrigado