¿Es fácil abusar del patrón observador?

Tengo un proyecto donde estoy usando el patrón de observador extensivamente por primera vez. Sin embargo, una cosa que he encontrado es que si inspecciono un objeto típico en este proyecto, tiende a ser sorprendentemente grande con todos los observadores y observables, y luego los momentos en que un observador tiene otros observadores, etc.

Eso parece estar al margen del punto ya que el rendimiento está bien. Pero he encontrado que, ocasionalmente, cuando estoy en el depurador, si intento imprimir una variable de instancia, bloqueará mi máquina hasta que finalice el proceso. Esto me preocupa de que haya alguna oportunidad para que esto suceda mientras el código está en producción. O que esto es solo una advertencia de que estoy abusando del patrón.

¿Algún consejo, sugerencias?

0
@CloseVoters: la pregunta es un poco general, pero vale la pena.
agregado el autor Andrew Grimm, fuente
Quizás el problema más grande que tengo es que hace que sea más difícil depurar mi código con la no linealidad de los eventos que se activan. Y el hecho de que esté bloqueando mi depurador no está ayudando.
agregado el autor Jeremy Smith, fuente
Bueno, solo debe usarlo cuando lo necesite, en lugar de todos sus objetos, incluso cuando no es necesario que se le notifiquen los cambios/eventos.
agregado el autor coreyward, fuente

2 Respuestas

TL; DR: Sí, pero eso no significa que no sea perfecto a veces.

"Asombrosamente grande" implica ... es bastante grande; ¿Qué significa eso en realidad ? ¿Cuántos observadores/observables hay? ¿Están profundamente anidados?

En mi opinión, la correlación entre hacer cosas en un depurador y la "vida real" no es particularmente fuerte; ha alguna vez bloqueado en producción o pruebas? Es más probable que piense que es un artefacto del proceso/aplicación de depuración.

La "acción espeluznante a distancia" crea una no-localidad que debe entenderse para razonar correctamente sobre el código y el comportamiento. Este tipo de desarrollo necesita ser preparado agresivamente; en lugar de decir "solo crearé un nuevo observador", lo construiré y seguiré razonando lo más lineal posible.

2
agregado

Puede anular el método inspect para que sea menos detallado.

0
agregado