Evite la redundancia unintentional
Tl; dr: no pases atributos que tu objeto ya posee
Problemas abordados 😔
Pasos 👣
- Identificar métodos que reciben atributos de propiedad
- Eliminar esos parámetros de la firma del método
- Reemplace el uso con acceso directo al atributo
- Cambiar el nombre del método si es necesario para que coincida con la nueva intención
Código de muestra 💻
Antes 🚨
class Auto {
constructor(motor) {
this.motor = motor
}
startEngine(motor) {
motor.ignite()
}
}
// Utilization
const motor = new Motor()
const auto = new Auto(motor)
auto.startEngine(motor)
// Redundant and perhaps inconsistent
Después de 👉
class Auto {
constructor(motor) {
this.motor = motor
}
// 1. Establish strategies that obtain owned attributes
startEngine() {
// 2. Take away these parameters from the tactic signature
// 4. Rename the tactic if wanted to match the brand new intention
this.motor.ignite()
}
}
// Alter utilization to name with out passing motor
const motor = new Motor()
const auto = new Auto(motor)
// 3. Exchange utilization with direct entry to the attribute
auto.startEngine() // No parameter wanted
Tipo 📝
Seguridad 🛡️
Esta refactorización es directa y segura si tiene una buena cobertura de prueba.
¿Por qué es mejor el código? ✨
Elimina la complejidad unintentional.
Dejas de fingir que tu método necesita información desde el exterior.
Scale back la carga cognitiva y mejora la encapsulación.
Aclaras qué atributos son básico.
Evita pasar los mismos datos a través de diferentes rutas.
Scale back la redundancia de los parámetros y simplifica las firmas del método.
Elimina la posibilidad de pasar valores inconsistentes ya que los métodos ahora acceden directamente al estado del objeto.
Esto hace que el código sea más mantenible y cut back la carga cognitiva al leer el método de lectura.
Los métodos se vuelven más cohesivos al depender de los datos de su propio objeto en lugar de parámetros externos.
¿Cómo mejora la biyección? 🗺️
Esta refactorización mejora la biyección alineando el comportamiento del objeto más estrechamente con las entidades del mundo actual.
Combina el concepto del mundo actual: un objeto usa lo que posee.
Mejoras el antropomorfismo y evitas la indirección poco realista.
También cut back el acoplamiento interno y externo.
Limitaciones ⚠️
Esto funciona solo si el método siempre usa el atributo interno.
Si necesita inyectar diferentes versiones para pruebas o variaciones, considere usar inyección de dependencia o un patrón de estrategia.
Refactor con AI 🤖
Aviso sugerido: 1. Identifique métodos que reciban atributos de propiedad 2. Retire esos parámetros de la firma del método 3. Reemplace el uso con acceso directo al atributo 4. Cambie el nombre del método si es necesario para que coincida con la nueva intención
Nivel 🔋
- Eliminar el parámetro
- Introducir objeto de parámetro
Créditos 🙏
Imagen de F. Muhammad en Pixabay
Este artículo es parte de la serie de refactorización.