Легко ли злоупотреблять шаблоном наблюдателя?

У меня есть проект, в котором я широко использую шаблон наблюдателя в первый раз. Одна вещь, которую я обнаружил, заключается в том, что если я проверю типичный объект в этом проекте, он имеет удивительно большое значение со всеми наблюдателями и наблюдаемыми, а затем время, когда наблюдатель имеет других наблюдателей и т. Д.

Кажется, что это не так, поскольку производительность в порядке. Но я обнаружил, что иногда, когда я в отладчике, если я пытаюсь распечатать переменную экземпляра, она закроет мою машину, пока я не убью этот процесс. Меня это беспокоит, что есть вероятность, что это произойдет, пока код находится в производстве. Или это просто предупреждение, что я злоупотребляю шаблоном.

Любые советы, предложения?

0
@CloseVoters: Вопрос немного общий, но это стоит того.
добавлено автор Andrew Grimm, источник
Возможно, самая большая проблема, с которой я сталкиваюсь, заключается в том, что сложнее отладить мой код с нелинейностью запуска событий. И тот факт, что он блокирует мой отладчик, не помогает.
добавлено автор Jeremy Smith, источник
Ну, вы должны использовать его только тогда, когда вам это нужно, и для всех ваших объектов, даже если им не нужно уведомлять об изменениях/событиях.
добавлено автор coreyward, источник

2 ответы

TL; DR: Да, но это не значит, что иногда это не идеально.

«Удивительно большой» подразумевает ... он довольно большой; что означает на самом деле ? Сколько наблюдателей/наблюдателей есть? Они глубоко вложены?

ИМО корреляция между работой в отладчике и «реальной жизни» не особенно сильна; имеет когда-либо запертую в производстве или тестировании? Я бы с большей вероятностью подумал, что это артефакт процесса отладки/приложения.

«Призрачное действие на расстоянии» создает нелокальность, которую нужно понимать, чтобы правильно рассуждать о коде и поведении. Такое развитие необходимо устраивать агрессивно; вместо того, чтобы говорить: «Я просто создаю нового наблюдателя», создайте его и держите рассуждения как можно более линейными.

2
добавлено

Вы можете переопределить метод inspect , чтобы быть менее подробным.

0
добавлено
Software Design and OOP
Software Design and OOP
1 481 участник(ов)

OOP, software design, architecture, GRASP, GoF, SOLID, separation of concerns, безысходность. Пожалуйста, придерживайтесь указанных тем. https://oopru.github.io More cool stuff: @fp_ru @tdd_ru @coding_interview_ru @coding_ru

pro.ruby
pro.ruby
1 181 участник(ов)

Язык программирования Ruby Additional docs: https://rubyreferences.github.io/rubyref/ Invite: https://telegram.me/joinchat/Be4rsT2NuB3CyJaF26j1kA Кто хочет компилировать: @crystal_ru (его синтаксис основан на Ruby) Участник @proDOT

Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
1 180 участник(ов)

https://telegram.me/rubyjob - Ruby Job По вопросам - @eugene_shved

Ruby School .us
Ruby School .us
1 045 участник(ов)

Чат-болталка для учеников руби-школы и не только. Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-03-13

Random Ruby Chat
Random Ruby Chat
589 участник(ов)

Правила публикации вакансий: https://t.me/codenamecrud/60865

Rubyata
Rubyata
333 участник(ов)

Коммюнити Ruby и Ruby On Rails Флуд не приветствуются. Вакансии можно публиковать только и ТОЛЬКО по пятницам с хештегом #вакансия.

Ruby Talks
Ruby Talks
236 участник(ов)

Национальная Флеймотека

RubyRush
RubyRush
189 участник(ов)

rubyrush.ru программирование для самых новичков