Esta pregunta sobre SO habla de corregir lo que el OP pensó que es el código de envidia de características . Otro ejemplo en el que vi esta ingeniosa frase citada es en una respuesta dada recientemente aquí en programadores.SE. Aunque dejé un comentario a esa respuesta solicitando la información, pensé que sería de ayuda general para los programadores que siguen las preguntas y respuestas para comprender lo que significa el término envidia de características . Siéntase libre de editar etiquetas adicionales si lo considera apropiado.
53
Respuestas:
La envidia de características es un término utilizado para describir una situación en la que un objeto llega a los campos de otro objeto para realizar algún tipo de cálculo o tomar una decisión, en lugar de pedirle al objeto que haga el cálculo en sí.
Como ejemplo trivial, considere una clase que representa un rectángulo. El usuario del rectángulo puede necesitar saber su área. El programador podría exponer
width
yheight
campos y luego hacer el cálculo fuera de laRectangle
clase. Alternativamente,Rectangle
podría mantener elwidth
yheight
campos privados y proporcionar ungetArea
método. Este es posiblemente un mejor enfoque.El problema con la primera situación, y la razón por la que se considera un olor a código, es porque rompe la encapsulación.
Como regla general, cada vez que se encuentre haciendo un uso extensivo de campos de otra clase para realizar cualquier tipo de lógica o cálculo, considere mover esa lógica a un método en la clase misma.
fuente
Existe una posible situación en la que está bien usar ampliamente otros métodos de clase / estructura, cuando su clase / estructura es un contenedor de datos. Por lo general, hay algo que puede hacer con estos datos sin contexto externo.
Dichas clases aún pueden contener algo de lógica interna, pero con mayor frecuencia se usan como contenedores:
@jhewlett en su respuesta se refiere a este artículo para demostrar que no debe usar ampliamente a otros miembros de la clase, pero hay otra situación de olores de código descrita allí con defensores de mi ejemplo:
fuente