шаблон проектирования наблюдателя в остальных приложениях

Я пытаюсь изучить шаблоны проектирования, и я пришел с шаблоном Observer. Я думаю, что понимаю саму концепцию, но не вижу, когда ее использовать.

Я пытаюсь объясниться. Я работаю в основном с веб-приложениями, то есть с приложениями без сохранения состояния. Обычно клиент делает петицию из браузера (например, обновить запись). то операция завершена.

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

  • пользователь подает прошение об обновлении.
  • получить все лица, которые должны быть уведомлены.
  • поместить всех лиц, которые должны быть уведомлены, в список наблюдателей.
  • сделать обновление. (это также сделает уведомление для шаблона наблюдателя).

но... делая это таким образом, я должен повторять всех людей, которых я хочу уведомить дважды!

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

Я не знаю, является ли шаблон Observer более полезным для других типов приложений, но я могу думать об этом шаблоне только в статической форме, я имею в виду, делая Observer статическим.

Я знаю, что что-то теряю, это общепринятая и общепринятая схема, все принимают ее как правильное решение этой конкретной проблемы. Что я не понимаю?


person Albert Cortada    schedule 25.02.2016    source источник


Ответы (1)


Во-первых, давайте разберемся в терминологии.

  • Каждый человек, который хочет получать уведомления, является наблюдателем.
  • Каждый тип события, которое может инициировать уведомление, является наблюдаемым.

Каждый Наблюдатель (человек) должен зарегистрироваться на сервере. Он отправляет запрос, по сути говоря: «Меня интересуют foo Observables», что в данном случае будет означать «Меня интересуют события обновления». Сервер поддерживает отображение того, кто в каких событиях заинтересован.

Каждый раз, когда сервер делает обновление, он перебирает сопоставление наблюдателей обновлений и отправляет уведомление каждому из них.

Преимущество заключается в том, что сервер и его Observables не знают во время компиляции, кто такие наблюдатели. Наблюдатели могут свободно регистрироваться (и отменять регистрацию) во время выполнения для любого интересующего их события.

person jaco0646    schedule 25.02.2016
comment
Я согласен с этим подходом, и я не знаю, является ли сам этот подход шаблоном наблюдателя. Я имею в виду, что если я сохраню всех лиц, которые хотят зарегистрироваться, в таблице базы данных, а затем восстановлю все, что регистрируется, и уведомлю их, это будет делать то же самое, с меньшими усилиями для программиста и сервера. Но я не думаю, что это наблюдаемый шаблон проектирования... или нет? - person Albert Cortada; 26.02.2016
comment
В шаблоне Observer программист не знает, кто такие наблюдатели. Сами наблюдатели контролируют, что и когда они наблюдают; и они свободны изменить то, что наблюдают, в любое время. - person jaco0646; 26.02.2016
comment
Я думаю, я понимаю, что вы имеете в виду... речь идет не о производительности, а о гибкости... хорошо, я все еще не понимаю этого полностью, но я думаю, что у меня есть идея для размышления. - person Albert Cortada; 26.02.2016
comment
Правильный. Шаблоны проектирования в целом больше связаны с гибкостью, чем с производительностью. - person jaco0646; 26.02.2016