Introducir objeto nulo.
Como algunos métodos devuelven null en lugar de objetos reales, tienes muchas comprobaciones de null en tu código.
En lugar de null, devuelve un objeto nulo que muestre el comportamiento por defecto.
##Example
if (customer == null) {
plan = BillingPlan.basic();
}
else {
plan = customer.getPlan();
}class NullCustomer extends Customer {
boolean isNull() {
return true;
}
Plan getPlan() {
return new NullPlan();
}
// Otra funcionalidad NULL.
}
// Reemplaza los valores null por el objeto nulo.
customer = (order.customer != null) ?
order.customer : new NullCustomer();
// Usa el objeto nulo como si fuera una subclase normal.
plan = customer.getPlan();##Why Refactor
Docenas de comprobaciones de null hacen que tu código sea más largo y feo.
##How to Refactor
-
A partir de la clase en cuestión, crea una subclase que desempeñará el papel de objeto nulo.
-
En ambas clases, crea el método
isNull(), que devolverátruepara un objeto nulo yfalsepara una clase real. -
Encuentra todos los lugares donde el código pueda devolver
nullen lugar de un objeto real. Cambia el código para que devuelva un objeto nulo. -
Encuentra todos los lugares donde las variables de la clase real se comparan con
null. Reemplaza estas comprobaciones por una llamada aisNull(). -
- Si en estos condicionales se ejecutan métodos de la clase original cuando un valor no es igual a
null, redefine estos métodos en la clase nula e inserta ahí el código de la parteelsede la condición. Entonces podrás eliminar todo el condicional y el comportamiento diferente se implementará mediante polimorfismo. - Si las cosas no son tan sencillas y los métodos no pueden redefinirse, comprueba si puedes simplemente extraer a nuevos métodos del objeto nulo las operaciones que debían realizarse en el caso de un valor
null. Llama a estos métodos en lugar del código antiguo enelsecomo las operaciones por defecto.
- Si en estos condicionales se ejecutan métodos de la clase original cuando un valor no es igual a