Substituir Valor de Dado por Objeto.
Uma classe (ou grupo de classes) contém um campo de dados. O campo tem seu próprio comportamento e dados associados.
Crie uma nova classe, coloque o campo antigo e seu comportamento na classe e armazene o objeto dessa classe na classe original.
##Example
##Why Refactor
Esta refatoração é, basicamente, um caso especial de Extrair Classe. O que a torna diferente é o motivo da refatoração.
Em Extrair Classe, temos uma única classe responsável por coisas diferentes e queremos dividir suas responsabilidades.
Na substituição de um valor de dado por um objeto, temos um campo primitivo (número, string etc.) que deixou de ser tão simples devido ao crescimento do programa e agora tem dados e comportamentos associados. Por um lado, não há nada de assustador nesses campos em si. No entanto, essa família de campos e comportamentos pode estar presente em várias classes simultaneamente, criando código duplicado.
Portanto, para tudo isso, criamos uma nova classe e movemos para ela tanto o campo quanto os dados e comportamentos relacionados.
##Benefits
- Melhora a coesão dentro das classes. Os dados e os comportamentos relevantes ficam dentro de uma única classe.
##How to Refactor
Antes de começar a refatoração, verifique se há referências diretas ao campo de dentro da classe. Se houver, use Autoencapsular Campo para escondê-lo na classe original.
-
Crie uma nova classe e copie para ela o seu campo e o getter correspondente. Além disso, crie um construtor que aceite o valor simples do campo. Essa classe não terá um setter, pois cada novo valor de campo enviado à classe original criará um novo objeto de valor.
-
Na classe original, altere o tipo do campo para a nova classe.
-
No getter da classe original, invoque o getter do objeto associado.
-
No setter, crie um novo objeto de valor. Talvez você também precise criar um novo objeto no construtor se valores iniciais tiverem sido definidos ali para o campo anteriormente.