2009-09-11 2 views
3

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

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

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

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

Влияет ли оно на ситуацию?

Есть ли у вас какие-либо общие соображения относительно детализации ваших наблюдательных/слуховых аппаратов?

ответ

2

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

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

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

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

sport/football/england/championship/watford 
+0

Если мы будем следовать этой дороге, я думаю, мы придем к «отфильтрованным» событиям, где фильтр может быть функцией сложности арбитража. –

+0

согласитесь, что это может стать интересным, если оно сложным. Водитель - это стоимость доставки. Если в вашей среде затраты на доставку низки (где это может быть из-за комбинации нескольких наблюдателей, нескольких событий, низкой стоимости за единицу за единицу), тогда сохраните ее просто. Когда затраты растут (например, из-за сетевых накладных расходов), сложность становится ценной.И должно ли это произойти, будет полезно повторное использование чужих шаблонов (или кода). – djna

+0

Прежде чем спрашивать, это был мой предпочтительный способ сделать это. Большим преимуществом является то, что если вы начнете с предположения, что у вас будут специализированные темы, даже если вы не ведете слишком далеко, вы можете расширить, как вам нужно. –

1

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

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

0

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

0

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

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

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

Смежные вопросы