С# LINQ: В чем разница между моделью Pull и моделью Push?

73
6

Я сейчас читаю Albahari С# 3.0 в двух словах и на стр. 292, это говорит о LINQ:


LINQ следует по требованию модель, а не приводом нажмите модель.



Что означает вышеуказанное утверждение?

И в чем разница между моделью тяги и моделью push?

спросил(а) 2021-01-14T01:04:23+03:00 2 недели назад
1
Решение
120

Я клиент, мне нужно что-то, вытащить его с сервера.

Я сервер, у меня есть что-то, push для клиента.

ответил(а) 2021-01-14T01:04:23+03:00 2 недели назад
94

Это означает, что ваши запросы LINQ будут извлекать данные из источника данных на основе ваших запросов и будут выполняться только при выполнении. В отличие от модели push, где сервер генерирует данные на своем конце, а затем передает данные клиенту. Модель push будет похожа на Blackberry Enterprise Server, где электронная почта будет перенесена на устройство Blackberry, а не на устройство, которое постоянно запрашивает его. Это также означает, что любые изменения, так как ваш запрос LINQ не будет отображаться в вашем наборе данных.

ответил(а) 2021-01-14T01:04:23+03:00 2 недели назад
84

Чтобы действительно понять (и оценить) различие, вам нужно будет рассмотреть разницу между выражением и выражением. Как вы знаете, императивные языки программирования, такие как С# и VB, традиционно используют операторы, которые выполняются в последовательности для достижения определенной цели. В такой схеме вы извлекаете данные, а затем нажимаете их на некоторые другие операторы. Функциональное программирование, напротив, имеет тенденцию использовать выражения, которые являются просто значениями. В случае LINQ вы объявляете выражение запроса, которое в какой-то момент будет оценивать до значения, но оно не делает этого, пока оно не понадобится. Это позволяет, как программисту, больше сосредоточиться на том, что делает ваша программа, а не на том, как она это делает. В более широком смысле лень описывает стратегию оценки, которая обычно используется на языках функционального программирования. Например, если у вас есть объявление вроде следующего:


let x = 2 * y + 7

ленивый язык программирования не стал бы оценивать выражение до тех пор, пока он явно не понадобится, но в то же время вы можете просто ссылаться на него привязкой x. Точно так же, когда вы делаете в LINQ объявление следующего вида:


var collection = from s in S where predicate(s)

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


Итак, в целом, в (нетерпеливом) императивном стиле программирования вы захватываете данные, а затем нажимаете на какую-то функцию, которая будет действовать на нее. В (ленивом) функциональном стиле программирования вы объявляете выражение, и в какой-то момент он будет оцениваться, когда это необходимо, что в случае с базой данных означает, что функция, которая нуждается в выражении запроса, вытащит ее, когда она нуждается в этом. Push/Pull на самом деле плохой терминологии.

ответил(а) 2021-01-14T01:04:23+03:00 2 недели назад
61

В модели pull моделирование инициируется потребителем результата (результат "вытягивается" через конвейер обработки).


В push-модели обработка инициируется производителем данных (данные "толкаются" в конвейер обработки).


Таким образом, данные, которые будут обработаны, - это то, что действует в любом случае, и движение "направление" (push/pull), которое оно перемещает, относится к человеку, вызывающему обработку.

ответил(а) 2021-01-14T01:04:23+03:00 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема