Refatoração para coleta de estatísticas e alteração da interface

Juntamente com a coleta de estatísticas, foi pedido que se reformulasse a interface do programa, que já estava ficando com muitos controles devido às novas funcionalidades; foi pedido para que se adicionassem menus contendo parte dos parâmetros configuráveis do programa, deixando apenas os mais relevantes no painel lateral.

Para implementar essas alterações, refatorou-se novamente a classe MainWindow, retirando dela a responsabilidade de manter os parâmetros da simulação e, assim, isolando mais a camada de visualização da camada de modelo.

A fim de facilitar o entendimento posterior do código e aumentar a flexibilidade do sistema, nesta refatoração foram introduzidos padrões de projeto e arquiteturais sempre que possível.

Foi criada a classe Configuration para manter a responsabilidade pelos parâmetros da simulação, implementando o padrão Singleton, garantindo, assim, que o mesmo objeto é acessado pelos diversos controles da interface e pelas classes do modelo da simulação.

A classe Simulation foi quebrada em duas: uma responsável pelo controle da simulação e outra, pela visualização, numa instância do padrão arquitetural MVC3, onde o modelo são as classes Environment, Molecule, Path, Type e Configuration.

A responsabilidade de criar o ambiente de simulação foi retirada da classe EnvironmentCombo e colocada numa nova classe, EnvironmentFactory, numa instância do padrão de projeto Factory Method. Com isso, isolou-se um pouco mais a parte de visualização da parte de modelo.

O resultado desta refatoração pode ser visto na Figura [*]. É possível notar que, mesmo depois da refatoração, ainda há um certo acoplamento entre o modelo e a visualização da simulação devido à presença das referências às classes da biblioteca VTK nas classes do modelo. De acordo com o padrão arquitetural MVC, a camada de visualização deve ter acesso às classes de modelo, e não o contrário, como ocorre após a refatoração.

Figura: Diagrama de classes do programa após a segunda refatoração da classe MainWindow, implementando parcialmente o padrão arquitetural MVC
Image UML-v2-r41

Luiz Fernando Oliveira Corte Real 2008-11-28