2009-06-11 7 views
2

Я сейчас читаю книгу C# 3.0 in a Nutshell Albahari и на page 292 он говорит это о LINQ:C# LINQ: В чем разница между моделью Pull и моделью Push?

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

Что означает вышеуказанное утверждение?
И в чем разница между моделью и моделью push моделью?

ответ

7

Я клиент, мне нужно что-то, pull с сервера.

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

+0

Почему именно это было downvoted? Не достаточно многословие? – Soviut

4

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

1

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

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

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

+0

Я узнаю, что аватар! http://www.warrenrobinett.com/rockysboots/ –

+0

Мне нравилось играть в Rocky's Boots и Robot Odyssey на старом Apple II + в качестве танка! Вы первыми узнали его. :-) – dmo

3

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

let x = 2 * y + 7 

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

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

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

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

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

  • Нет связанных вопросов^_^