C#, LINQ:¿Cuál es la diferencia entre un modelo de Extracción y un modelo de Inserción?

StackOverflow https://stackoverflow.com/questions/979570

  •  13-09-2019
  •  | 
  •  

Pregunta

Actualmente estoy leyendo Albahari del C# 3.0 en una cáscara de Nuez libro y en página 292 se dice esto acerca de LINQ:

LINQ sigue por la demanda, tire el modelo, en lugar de una oferta empuje modelo.

¿Qué hace la instrucción anterior significa?
Y ¿cuál es la diferencia entre un tire modelo y un empuje modelo ?

¿Fue útil?

Solución

Soy el cliente, necesito algo, tire desde el servidor.

Soy el servidor, tengo algo, empuje al cliente.

Otros consejos

Esto significa que sus consultas LINQ tirarán de datos de una fuente de datos en base a sus consultas y sólo se hará cuando se ejecuta. A diferencia de un modelo de inserción, en el que el servidor genera los datos en su extremo y luego empuja los datos a un cliente. Un modelo de inserción sería como Blackberry Enterprise Server donde el correo electrónico es empujado al dispositivo Blackberry en lugar del dispositivo constantemente tener que consultar para ello. Esto también significa que cualquier cambio desde su consulta LINQ no se reflejarán en su conjunto de datos.

Para entender realmente (y apreciar) la distinción que tendrá que considerar la diferencia entre un instrucción y un expresión . Como ya saben, los lenguajes de programación imperativos como C # y Visual Basic utilizan tradicionalmente declaraciones que se ejecutan en una secuencia de lograr algún objetivo. En este esquema, se recuperan los datos y luego empujarlo hacia algunas otras declaraciones. La programación funcional, por el contrario, tiende a utilizar expresiones que son sólo valores. En el caso de LINQ se declara una expresión de consulta, que en algún momento se evaluará como un valor, pero no lo hace hasta que sea necesario. Esto le permite, como el programador, concentrarse más en lo que hace su programa en lugar de cómo lo hace. En términos más generales, la pereza describe una estrategia de evaluación que se emplea típicamente por los lenguajes de programación funcionales. Por ejemplo, si has tenido una declaración como la siguiente:

let x = 2 * y + 7

un lenguaje de programación perezoso no se molestaría en la evaluación de la expresión hasta que se necesita explícitamente, pero en la media hora que acaba de hacer referencia a ella por la unión x . De la misma manera, cuando usted hace una declaración como la siguiente en LINQ:

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

se ha declarado en una expresión y obligado a colección , pero en realidad no lo necesite hasta que haga algo con colección . Así se puede declarar en cualquier lugar en el código y no preocuparse por ello ocupar la memoria cuando no está siendo utilizado y por lo tanto usted ahora está pensando más en el problema que estamos tratando de resolver en lugar de especificar en detalle exhaustivo de cómo el equipo debe ir sobre la solución de la misma.

Así, en resumen, en un estilo imperativo (ganas) de la programación agarrar los datos y luego empuje que en alguna función que va a actuar en consecuencia. En un estilo (perezoso) funcional de la programación, se declara una expresión y en algún momento se evaluará cuando se necesita, lo que, en el caso del material de base de datos significa que la función que necesita el valor de la expresión de consulta será tire que cuando lo necesita. Push / Pull realmente es pobre terminolgy sin embargo.

En un modelo de extracción, el procesamiento se inicia por parte del consumidor de que el resultado (el resultado está siendo "tirado" a través de la canalización de procesamiento).

En un modelo de inserción el proceso es iniciado por el productor de los datos (los datos se "inserta" en la canalización de procesamiento).

De modo que los datos que serán procesados es lo que se está actuando en cualquiera de los casos y la "dirección" (push/pull) se está moviendo es relativo a la persona a la activación de la transformación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top