No projeto original, foram encontrados diversos code smells tais quais:
- Duplicated Code
- Long parameter list
- Long method
- Dead code
- Middle man
- Long class
- Switch Statements
- Primitive Obsession
Foram usados os seguinte padrões de design para refatoramento:
-
Strategy: Para cada botão de submissão que é apertado, uma nova janela é criada, e ela depende de algumas checagens. Tais checagens têm a estrutura geral semelhante, mas são diferentes em seu fim. Desta forma, decidi implementar o padrão de design complexo Strategy, pois pude utilizar de conceitos de herança e polimorfismo para diminuir consideravelmente o número de linhas utilizado, além de melhorar a organização.
-
Extract Method: Com este padrão de design eu pude eliminar tanto os long methods quanto as long class. Pude também terceirizar grandes switch statements.
-
Extract Class: Muitas linhas de código eram repetidas para criar-se botões e seus frames. Dessa forma, criei uma classe que terceiriza estas ações e usei o padrão de design Command para lidar com os requests dos botões. Lidei também com Primitive Obsession e com Long Class usando este padrão de design
-
Command: Cada botão precisa executar um request único! Por isso, usei o padrão Command para organizar e simplificar o código do menu principal.
Houveram muitas diferenças no código depois de implementados os design patterns. Você pode checar elas neste commit.