Насколько гранулированными должны быть ваши Observables / Listenables?

StackOverflow https://stackoverflow.com/questions/1409635

Вопрос

У вас есть ориентируемая на прослушивание Observable / Listenable, которая уведомляет наблюдателей / Listeners об изменении состояния.

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

Вы обычно предпочитаете уведомлять всех наблюдателей / слушателей так или иначе и разрешать им игнорировать уведомления, когда ничего, о чем они заботятся, не изменилось?

Или вы обычно предпочитаете отдельную Observable для каждого " nugget " данных, чтобы ваши наблюдатели / слушатели гарантированно получали только те уведомления, на которые им нужно было ответить?

Зависит ли это от ситуации?

Есть ли у вас какие-либо общие мысли о гранулярности ваших Observables / Listenables?

Это было полезно?

Решение

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

В системах обмена сообщениями Pub / Sub, где стоимость доставки относительно высока (сообщения передаются по сети), обычно необходимо уделять пристальное внимание определению темы. Тщательно разработанная иерархия тем часто бывает полезна. Таким образом, мы получаем шаблоны, такие как

  sport
       football
              england 
                    premier
                    champioship
              scotland
                    spl
              france
                    ...
       cricket
              australia
                    ...
              india
              sri lanka

Следовательно, допускается подписка на разных уровнях. Вы можете подписаться на все виды спорта или (как некоторые люди могут) вплоть до

    sport/football/england/championship/watford

Другие советы

Как правило, специализированные интерфейсы приносят больше пользы, чем вреда, поэтому я бы определенно реализовал больше, чем меньше.

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

Если бы мне пришлось это сделать, я бы, вероятно, создал бы класс Observable, в котором было бы событие для каждого вида слепка и одно глобальное событие для любого слепка. Вроде как средний путь.

Это не просто обслуживание. Чем конкретнее интерфейс между Observables и Observers, тем более они связаны.

В книге «Банды четырех» есть раздел, посвященный этой самой проблеме, и они рекомендуют использовать как двухтактные, так и двухтактные модели. Модель вытягивания может быть неэффективной, модель выталкивания может быть недостаточно многократной.

Итак, это сильно зависит от ситуации. Я склонен идти чуть выше модели тяги.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top