2015-12-16 7 views
1

Microsoft says, «разработчики представляют асинхронные потоки данных с Observables». Я пытаюсь понять эту идею. Если бы я коснулся концепции неявно, я бы предположил, что это всего лишь все, что можно было наблюдать в потоке данных. Код должен быть более точным.Что такое «наблюдаемое» в реактивном программировании?

Как я узнал бы «наблюдаемый», если бы увидел это? Не могли бы вы дать мне лучшее объяснение того, что такое «наблюдаемое»?

ответ

2

Microsoft says, "developers represent asynchronous data streams with Observables." I'm trying to reason through the idea. If I were to tackle the concept implicitly, I would imagine that it's just, anything that could be observed in the data stream. Code should be more precise.

Код на самом деле точнее. Наблюдаемый представлен IObservable<T> interface. Основная задача IObservable<T> - обрабатывать IObserver<T> с. Эти два работают в тандеме: IObservable<T> представляет поток типа T, на который можно подписаться. IObserver<T> представляет собой обработчик, который подписывается на наблюдаемый для обработки этих событий.

Есть три типа событий, которые наблюдаемый могут неявно выделяющие:

  1. OnNext: Следующий Экземпляр T
  2. OnCompleted: Не-ошибка (пусто-сообщение) терминатор.
  3. OnError: Терминатор ошибки.

Однако наблюдаемые данные не излучают эти сообщения напрямую, а излучают их только подписчикам-наблюдателям.

How would I know an "observable" if I saw it? Could you give me a better explanation of what an "observable" is?

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

  1. Следующей наиболее последняя цена акций
  2. рынка закрыты
  3. Какого-то сбой (сбой подключения будет наиболее типичным)

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

1

From Wikipedia:

The observer pattern is a software design pattern in which an object, called the subject, maintains a list of its dependents, called observers, and notifies them automatically of any state changes, usually by calling one of their methods.

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

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

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

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

Microsoft использует термины наблюдатель и Наблюдаемые в то время как в некоторых других реактивных структур они могут использовать другие термины. Getting started от Introduction to Rx может помочь вам прояснить эти концепции, а вся книга - бесплатный драгоценный камень. Обратите внимание, что эта книга предпочитает использовать термин последовательность, чтобы обратиться к потоку событий.

I would imagine that it's just, anything that could be observed in the data stream.

Это верно. Фактически, в Microsoft Rx, основным ядром являются только два интерфейса интерфейса, определяющие контракт между наблюдателями и наблюдаемыми, остальное в значительной степени абстрагируется.

0

Я думаю, что терминология меняется, но если вы ищете функциональные реактивные документы программирования, например. в Google Scholar вы найдете определения поведения и событий основных концепций. Я думаю, что следующие два определения из бумаги из Functional Reactive Programming from First Principles репрезентативно:

Behavior is a value of type a that changes over time

Event is a time-ordered sequence of event occurences

Intuitively, a behavior is a stream transformer: a function that takes an infinite stream of sample times, and yields an infinite stream of values. Similarly, an event is a stream transformer, and can be thought of as a behavior where, at each time t, the event either occurs or does not occur.

кажется MS плавит как в понятие наблюдаемого.

Я думаю, что полезно прочитать некоторые справочные документы, чтобы получить терминологию. papers from Conal Elliott - хорошее начало. Или вы можете записаться в Principles of Reactive Programming в coursera, если хотите более интерактивное введение.

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