É fácil abusar do padrão observador?

Eu tenho um projeto onde estou usando extensivamente o padrão observador pela primeira vez. Uma coisa que eu descobri é que, se eu inspecionar um objeto típico neste projeto, ele tende a ser surpreendentemente grande com todos os observadores e observáveis, e então os momentos em que um observador tem outros observadores, etc.

Isso parece estar além do ponto, já que o desempenho está bom. Mas descobri que, ocasionalmente, quando estou no depurador, se tento imprimir uma variável de instância, ele bloqueia minha máquina até que eu mate o processo. Isso me preocupa que haja alguma oportunidade para que isso aconteça enquanto o código estiver em produção. Ou que isso seja apenas um aviso de que estou abusando do padrão.

Alguma dica, sugestões?

0
@CloseVoters: A questão é um pouco geral, mas vale a pena.
adicionado o autor Andrew Grimm, fonte
Talvez o maior problema que estou tendo é que torna mais difícil depurar meu código com a não linearidade de eventos disparando. E o fato de estar bloqueando meu depurador não está ajudando.
adicionado o autor Jeremy Smith, fonte
Bem, você só deve usá-lo quando precisar, em relação a todos os seus objetos, mesmo quando eles não precisarem ser notificados sobre alterações/eventos.
adicionado o autor coreyward, fonte

2 Respostas

TL: DR: Sim, mas isso não significa que não seja perfeito às vezes.

"Surpreendentemente grande" implica ... é muito grande; o que isso realmente significa? Quantos observadores/observáveis ​​existem? Eles estão profundamente aninhados?

IMO a correlação entre fazer coisas em um depurador e "vida real" não é particularmente forte; tem alguma vez trancado em produção ou teste? Eu provavelmente pensaria que é um artefato do processo/aplicativo de depuração.

"Ação assustadora à distância" cria uma não-localidade que deve ser entendida para raciocinar corretamente sobre código e comportamento. Esse tipo de desenvolvimento precisa ser preparado de forma agressiva; em vez de dizer "vou criar um novo observador", arquitetar e manter o raciocínio o mais linear possível.

2
adicionado

Você poderia substituir o método inspecionar para ser menos detalhado.

0
adicionado