Recognising Feature Envy
Reconociendo la Envidia de Características
G14: Feature Envy is a code smell where a method in one class is obsessed with the data of another class. Instead of working with its own data, it makes repeated calls to getters — or directly reads fields — of a foreign object. The tell-tale sign: the method's parameter list or body references one external object far more than its own class.
G14: La Envidia de Características es un olor a código donde un método en una clase está obsesionado con los datos de otra clase. En lugar de trabajar con sus propios datos, realiza llamadas repetidas a getters — o lee directamente campos — de un objeto externo. La señal reveladora: la lista de parámetros o el cuerpo del método hace referencia a un objeto externo mucho más que a su propia clase.
The Refactoring: Move the Method
La Refactorización: Mover el Método
The cure is almost always the same: move the method to the class it envies. If Billing.calculateBill reads only Customer data, it belongs in Customer. The enclosing class becomes a thin coordinator — it calls the method on the object that owns the logic. This improves cohesion, reduces coupling, and makes the code easier to test in isolation.
La cura es casi siempre la misma: mueve el método a la clase que envidia. Si Billing.calculateBill solo lee datos de Customer, pertenece a Customer. La clase contenedora se convierte en un coordinador delgado — llama al método en el objeto que posee la lógica. Esto mejora la cohesión, reduce el acoplamiento y hace el código más fácil de probar en aislamiento.
✏️
Code Challenge
Desafío de Código
Move the billing calculation method to the Customer class.
Mueve el método de cálculo de facturación a la clase Customer.
💡 Key takeaway
A method belongs where its data lives. If it envies another class, move it there.
Un método pertenece donde viven sus datos. Si envidia a otra clase, muévelo allí.