IObservable<T> в .NET Framework 4.0 Beta2
-
06-07-2019 - |
Вопрос
IObservable<T>
и IObserver<T>
интерфейсы размещаются непосредственно в System
пространство имен в .NET Framework 4.0 Beta2.Почему не в System.Collections.Generic
, как IEnumerable<T>
?
p.s.Предварительный просмотр реактивного фреймворка из Silverlight Toolkit содержит IObserver<T>
в System.Collections.Generic
пространство имен.
Решение
То, что описывают новые интерфейсы IObservable / IObserver, - это абстракция намного выше, чем просто коллекции, которые можно рассматривать как частный случай вычислений (вот почему списки в Haskell являются монадами).Таким образом, очевидно, что такое обобщение помещено в пространство имен System.
Взгляните на этот блестящий актерский состав от Эрика Мейера, где он описывает идеи, лежащие в основе интерфейсов.
Другие советы
IObservable ( Наблюдаемый ) является интерфейсом, который идентифицирует класс, реализующий Наблюдатель шаблон.Это не связано с коллекциями.Это больше связано с предоставлением альтернативы Событиям.
Хотя это старый вопрос, на который я наткнулся, я просто хотел поддержать оценку @ControlFlow о "дуализме" между IObservable и IEnumerable как коллекции "На основе выталкивания" и "на основе извлечения" со ссылкой на "Rx за 15 минут" Эрика Мейера, где он может быть процитирован как говорящий именно это. http://channel9.msdn.com/posts/Charles/Erik-Meijer-Rx-in-15-Minutes/
Следовательно, эта коллекция на основе принудительных запросов может фундаментально изменить базовую парадигму "обычной серии вызываемых событий" в асинхронную, выбираемую, доступную для запросов, проходимую и подписываемую первоклассную коллекцию декларативных действий.Что-то, что делает это, принадлежит основному пространству имен BCL или, возможно, заслуживает своего собственного, но находится слишком далеко за пределами Yet-Another-Collection, чтобы делиться своим пространством имен.Имейте в виду, это всего лишь мое мнение.