Design Patterns na prática – Parte 3- .Net Magazine 78

Este artigo fala de técnicas de refatoração. Ensina como identificar e corrigir problemas de engenharia no software. É claro que para corrigir estes problemas alguns princípios de orientação a objetos também são utilizados. Para atingir o objetivo você também vai ver como criar métodos abstratos e como sobrescrever métodos. Além de entender para que serve e qual a diferença entre as instruções abstract, virtual e override.

Fique por dentro

Refatorar é o processo de mudar a estrutura interna do software sem alterar seu comportamento externo. Esta técnica evita que o software se desgaste durante a vida útil do mesmo. Com esta técnica você consegue melhorar seu software sem que os clientes se sintam perdidos em cada alteração que você fizer.

Este tema é muito útil para sistemas com códigos desorganizados, pois a refatoração vai ajudar a melhorar o entendimento do código além de evitar a inclusão de novos defeitos durante futuras modificações. O artigo da edição anterior apresentou os conceitos básicos da orientação a objetos sem se preocupar com a arquitetura que estava sendo criada a aplicação de agendamento de tarefas – sem aplicar padrões de projetos. Já este artigo começa a refatorar o código da primeira versão a fim de corrigir os problemas de engenharia existentes.

Na parte anterior deste artigo a primeira versão do agendador ficou pronta, mas com uma série de problemas. Não estamos falando de erros, pois a aplicação funcionava sem gerar erro algum. Estamos falando de problemas estruturais – alguns chamariam de problemas administrativos. Embora o agendador esteja cumprindo com sua obrigação de executar tarefas em horários pré-programados, estruturalmente ele está em péssimas condições. Não é necessário observar muito para perceber os problemas de engenharia presentes no código. No próximo parágrafo você encontra uma breve descrição dos problemas que o código do sistema possui. Desta maneira, se você ainda não leu a parte anterior desta série, poderá ler este artigo sem ficar perdido no assunto.

O maior problema da primeira versão é que toda a lógica do programa está dentro da classe do formulário principal. Tudo está neste formulário: salvar tarefas, salvar agendamentos, monitorar os agendamentos, cálculo da próxima execução de uma tarefa, cálculo da próxima execução de um agendamento, cálculo para saber se está na hora de executar uma tarefa e até mesmo o método para executar as tarefas.

Nota do DevMan: Refatoração é o processo de modificar o sistema para melhorar a estrutura do código sem alterar seu comportamento externo. Sempre que um pedaço de código da sua aplicação estiver "cheirando mal", você deve aplicar uma das quase 100 técnicas de refatoração disponíveis no site Refactoring Home Page. Este site é mantido pelo próprio Martin Fowler que é o autor do livro Refactoring: Improving the Design of Existing Code - um dos livros mais importantes sobre o assunto. O link do site está no final do artigo.
Nota: Este artigo não apresenta a aplicação de um Design Pattern em específico, mas vamos preparar o “terreno” para que isso seja feito na próxima parte da série. No entanto, os temas discutidos neste artigo, princípios básicos da orientação a objetos, estão intimamente relacionados ao tema principal da série.

“Bad smells in code”

Nota: Se você tiver o código fonte da primeira versão, esse vai ajudar a entender os próximos parágrafos. Junto com os arquivos disponíveis para download está o código fonte da primeira versão do agendador. Caso você não tenha, poderá baixá-los.

Quando dissemos que tudo estava dentro da classe do formulário, não estávamos exagerando. Repare nos itens que citamos no último parágrafo da introdução: o que mais a primeira versão faz além do que foi citado lá? Não faz mais nada. Tudo que o agendador faz foi escrito dentro da classe do formulário. Embora existam mais duas classes – Tarefa e Agendador – nenhuma vantagem da orientação a objetos foi usada. A classe do formulário está muito grande e cheia de desvios feitos através de testes (instruções IF). Qualquer alteração no programa resultará em uma modificação na classe do formulário e como esta classe está cheia de responsabilidades interligadas, qualquer modificação feita nela significa que outra parte da aplicação pode começar a gerar erros por conta disto – por isto todas as funções da aplicação devem ser testadas novamente.

Estes são um dos motivos para criar um sistema cujas responsabilidades estão separadas em classes, porém, existem muitos outros. Imagino eu que, se você já leu até aqui é porque você conhece os problemas de uma codificação ruim e deve estar mais interessado em como fazer da maneira certa do que nas consequências de se fazer da maneira mais fácil. Por isto vamos direto ao ponto. Veja o que é e como refatorar um código, usando como exemplo a classe do formulário do agendador."

[...] continue lendo...
Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados