Насколько гранулированными должны быть ваши Observables / Listenables? - PullRequest
4 голосов
/ 11 сентября 2009

У вас есть ориентируемая на прослушивание Наблюдаемая / Слушаемая, которая уведомляет Наблюдателей / Слушателей при изменении какого-либо состояния.

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

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

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

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

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

Ответы [ 4 ]

2 голосов
/ 11 сентября 2009

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

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

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

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

    sport/football/england/championship/watford
1 голос
/ 11 сентября 2009

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

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

0 голосов
/ 11 сентября 2009

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

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

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

0 голосов
/ 11 сентября 2009

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

...