Будут подобные IQueryable дополнения к IObservable? (.NET Rx)

Это - метаответ, но Подсказки по Perl архивы содержат все виды интересных приемов, которые могут быть сделаны с Perl. Архив предыдущих подсказок онлайн для просмотра и может быть подписан на с помощью списка рассылки или Atom-ленты.

Некоторые мои любимые подсказки включают исполняемые файлы здания с ПАРИТЕТОМ , , использование автоумирает для выдавания исключения автоматически , и использование переключатель и умное соответствие конструкции в Perl 5.10.

Раскрытие: я - один из авторов и специалистов по обслуживанию Подсказок по Perl, таким образом, я, очевидно, думаю очень высоко о них.;)

8
задан Ruben Bartelink 11 February 2010 в 10:23
поделиться

4 ответа

Что ж, вы получили это в последней версии Rx в виде интерфейса под названием IQbservable (произносится как IQueryableObservable). Следите за новостями на канале 9, которое выйдет на эту тему в начале следующей недели.

Чтобы немного описать эту особенность, нужно понимать, что существует три концептуально ортогональных оси к загадке Rx / Ix:

  • На какую модель данных вы нацеливаетесь. Здесь мы находим модели на основе вытягивания и модели на основе выталкивания. Их отношения основаны на двойственности . Между этими мирами существуют преобразования (например, ToEnumerable).
  • Где вы выполняете операции, которые управляют вашими запросами (sensu lato). Некоторым операторам нужен параллелизм. Здесь на помощь приходят планирование и интерфейс IScheduler. Существуют операторы для переключения между доменами параллелизма (например, ObserveOn).
  • Как выражение запроса должно выполняться. Либо дословно (IL), либо переводимое (деревья выражений). Их родство основано на гомиконности . Преобразования существуют между обоими представлениями (например, AsQueryable).

Все, что позволяет интерфейс IQbservable (который является двойным по отношению к IQueryable и древовидному представлению запроса IObservable), является последней точкой. Иногда люди путают процесс преобразования запросов («как» выполнять) с аспектами удаленного взаимодействия («где» выполнять). Хотя обычно вы переводите запросы на некоторый целевой язык (например, WQL, PowerShell, DSQL для служб облачных уведомлений и т. Д.) И удаленно их в какую-то целевую систему, обе проблемы могут быть развязанный. Например, вы можете использовать представление дерева выражений для оптимизации локальных запросов.

Что касается возможных проблем безопасности, это не отличается от возможностей IQueryable. Обычно удаляется только язык выражений, а не какие-либо операторы с «действительно побочными эффектами» (что бы это ни значило для языков, отличных от фундаменталистских функциональных). В частности, операции Subscribe и Run остаются локальными и выводят вас из запрашиваемой монады (поэтому запускают перевод, как это делает GetEnumerator в мире IQueryable). Я оставлю на усмотрение читателя, как бы вы удалили процесс подписки.

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

9
ответ дан 5 December 2019 в 12:11
поделиться

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

0
ответ дан 5 December 2019 в 12:11
поделиться

Хотя это звучит как интересная возможность, у меня есть несколько оговорок по поводу реализации этого.

1) Просто поскольку вы не можете сериализовать нетривиальные лямбда-выражения, используемые IQueryable, сериализовать их для Rx также сложно. Вы, вероятно, захотите иметь возможность сериализовать многострочные лямбда-выражения и лямбда-выражения операторов как часть этой структуры. Для этого вам, вероятно, потребуется реализовать что-то вроде других любимых проектов Эрика Мейера - Dryad и Volta.

2) Даже если бы вы могли сериализовать эти лямбда-выражения, я был бы обеспокоен возможностью запуска произвольного кода на сервере, отправленного от клиента. Это может легко создать гораздо большую проблему безопасности, чем межсайтовый скриптинг. Я сомневаюсь, что потенциальная выгода от разрешения клиенту отправлять выражения на сервер для выполнения перевешивает последствия уязвимости безопасности.

3
ответ дан 5 December 2019 в 12:11
поделиться

Судя по результатам интервью с новым каналом9 , в каталоге IObserver / IObservable будет поддержка LINQ. BCL of .NET 4.

Однако по сути это будут запросы в стиле LINQ-to-Objects, поэтому на данном этапе это не похоже на «умную подписку», как вы ее выразили. Это что касается базовых реализаций .NET 4. (Насколько я понимаю из приведенного выше интервью)

Сказав, что , Reactive framework (Rx) может иметь более подробные реализации IObserver ] / IObservable , или вы можете написать свой собственный переход в Expression

0
ответ дан 5 December 2019 в 12:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: