Substituir Código de Tipo por Classe.
Uma classe tem um campo que contém um código de tipo. Os valores desse tipo não são usados em condições de operadores e não afetam o comportamento do programa.
Crie uma nova classe e use seus objetos no lugar dos valores do código de tipo.
##Example
##Why Refactor
Uma das razões mais comuns para o código de tipo é o trabalho com bancos de dados, quando um banco tem campos em que algum conceito complexo é codificado com um número ou uma string.
Por exemplo, você tem a classe User com o campo user_role, que contém informações sobre os privilégios de acesso de cada usuário, seja administrador, editor ou usuário comum. Então, nesse caso, essa informação é codificada no campo como A, E e U, respectivamente.
Quais são as deficiências dessa abordagem? Os setters do campo muitas vezes não verificam qual valor é enviado, o que pode causar grandes problemas quando alguém envia valores não intencionais ou errados para esses campos.
Além disso, a verificação de tipo é impossível para esses campos. É possível enviar qualquer número ou string para eles, que não terá o tipo verificado pela sua IDE e ainda permitirá que o programa rode (e quebre depois).
##Benefits
-
Queremos transformar conjuntos de valores primitivos—que é o que os tipos codificados são—em classes completas, com todos os benefícios que a programação orientada a objetos tem a oferecer.
-
Ao substituir o código de tipo por classes, permitimos a verificação de tipos para os valores passados a métodos e campos no nível da linguagem de programação.
Por exemplo, enquanto antes o compilador não enxergava diferença entre a sua constante numérica e algum número arbitrário quando um valor era passado a um método, agora, quando dados que não correspondem à classe de tipo indicada são passados, você é avisado do erro dentro da sua IDE.
-
Assim tornamos possível mover código para as classes do tipo. Se você precisava realizar manipulações complexas com os valores do tipo por todo o programa, agora esse código pode “viver” dentro de uma ou várias classes de tipo.
##How to Refactor
-
Crie uma nova classe e dê a ela um novo nome que corresponda ao propósito do tipo codificado. Aqui vamos chamá-la de classe de tipo.
-
Copie o campo que contém o código de tipo para a classe de tipo e torne-o privado. Em seguida, crie um getter para o campo. Um valor será atribuído a esse campo somente a partir do construtor.
-
Para cada valor do tipo codificado, crie um método estático na classe de tipo. Ele criará um novo objeto da classe de tipo correspondente a esse valor do tipo codificado.
-
Na classe original, substitua o tipo do campo codificado pela classe de tipo. Crie um novo objeto desse tipo no construtor, bem como no setter do campo. Altere o getter do campo para que ele chame o getter da classe de tipo.
-
Substitua quaisquer menções a valores do tipo codificado por chamadas dos métodos estáticos relevantes da classe de tipo.
-
Remova as constantes do tipo codificado da classe original.