¿Cuáles son algunos casos en los que los árboles de expresión son útiles?
-
09-06-2019 - |
Pregunta
Entiendo completamente el concepto de árboles de expresión, pero me cuesta encontrar situaciones en las que sean útiles.¿Existe algún caso específico en el que se puedan aplicar árboles de expresión?¿O sólo es útil como mecanismo de transporte de código?Siento que me falta algo aquí.¡Gracias!
Solución
¿O sólo es útil como mecanismo de transporte de código?
Es útil como mecanismo de ejecución para el código.Utilizando el patrón de intérprete, los árboles de expresión se pueden interpretar directamente.Esto es útil porque es muy fácil y rápido de implementar.Estos intérpretes son omnipresentes y se utilizan incluso en casos que no parecen "interpretar" nada, p.para imprimir estructuras anidadas.
Otros consejos
Algunos marcos simulados de pruebas unitarias utilizan árboles de expresión para establecer expectativas/verificaciones fuertemente tipadas.Es decir:
myMock.Verify(m => m.SomeMethod(someObject)); // tells moq to verify that the method
// SomeMethod was called with
// someObject as the argument
Aquí, la expresión nunca se ejecuta realmente, pero la expresión en sí contiene información interesante.La alternativa sin árboles de expresión sería
myMock.Verify("SomeMethod", someObject) // we've lost the strong typing
Los árboles de expresión son útiles cuando necesita acceder a la lógica de funciones para modificarla o volver a aplicarla de alguna manera.
Linq a SQL es un buen ejemplo:
//a linq to sql statement
var recs (
from rec in LinqDataContext.Table
where rec.IntField > 5
select rec );
Si no tuviéramos árboles de expresión, esta declaración tendría que devolver todos los registros y luego aplicar la lógica de C# donde a cada uno.
Con árboles de expresión que where rec.IntField > 5
se puede analizar en SQL:
--SQL statment executed
select *
from [table]
where [table].[IntField] > 5