Introduzir Objeto Nulo.
Problem
Como alguns métodos retornam null em vez de objetos reais, você tem muitas verificações de null no seu código.
Solution
Em vez de null, retorne um objeto nulo que apresenta o comportamento padrão.
##Example
Before
if (customer == null) {
plan = BillingPlan.basic();
}
else {
plan = customer.getPlan();
}After
class NullCustomer extends Customer {
boolean isNull() {
return true;
}
Plan getPlan() {
return new NullPlan();
}
// Alguma outra funcionalidade NULL.
}
// Substitui valores null por um Objeto-nulo.
customer = (order.customer != null) ?
order.customer : new NullCustomer();
// Usa o Objeto-nulo como se fosse uma subclasse normal.
plan = customer.getPlan();##Why Refactor
Dezenas de verificações de null deixam seu código mais longo e mais feio.
##How to Refactor
-
A partir da classe em questão, crie uma subclasse que desempenhará o papel de objeto nulo.
-
Em ambas as classes, crie o método
isNull(), que retornarátruepara um objeto nulo efalsepara uma classe real. -
Encontre todos os lugares onde o código pode retornar
nullem vez de um objeto real. Altere o código para que ele retorne um objeto nulo. -
Encontre todos os lugares onde as variáveis da classe real são comparadas com
null. Substitua essas verificações por uma chamada aisNull(). -
- Se métodos da classe original forem executados nesses condicionais quando um valor não é igual a
null, redefina esses métodos na classe nula e insira ali o código da parteelseda condição. Então você pode excluir todo o condicional, e o comportamento divergente será implementado por meio de polimorfismo. - Se as coisas não forem tão simples e os métodos não puderem ser redefinidos, veja se você consegue simplesmente extrair os operadores que deveriam ser executados no caso de um valor
nullpara novos métodos do objeto nulo. Chame esses métodos em vez do código antigo noelsecomo as operações padrão.
- Se métodos da classe original forem executados nesses condicionais quando um valor não é igual a