domingo, 28 de febrero de 2021

Inyección de dependencia en ASP.Net Core


Asp.Net Core está preparado para poder trabajar de forma nativa con Inyección de dependencia.  Para poder utilizar este mecanismo, Asp.Net Core utiliza un contenedor de IoC (Invevrsión de Control) integrado, donde para poder inyectar la dependencia de objetos de clase, lo hace a través del método constructor.

Este contenedor integrado está representado a través de la implementación de IServiceProvider. Es por eso, que los tipos administrados por el contenedor integrado IoC, se denominan Services (servicios).

Configuración

Para que Asp.Net a través del contenedor IoC , inyecte de manera automática, los servicios que vamos desarrollando dentro de la aplicación, debemos registrarlos en el método ConfigureServices de la clase Startup. Este incluye un parámetro del tipo IServiceCollection que se utiliza para registrarlos.


Vida útil

Al configurar la inyección de nuestros servicios, podemos establecer la vida útil de los mismos


Scoped: Creará una única instancia del tipo de servicio, una vez por solicitud y será compartida durante la vida de ésta.

Singleton: El contenedor IoC expondrá una única instancia del servicio durante la vida útil de la aplicación.

Transient: Se creará una instancia del tipo de servicio, cada vez que lo invoque.


Cómo utilizarlo

public class MyController : Controller
{
    // Definir una variable privada del 
    // tipo del servicio a inyectar
    private readonly ICalculos _calculos;
    // Inyectar en el constructor el servicio
    public MyController(ICalculos calculos)
    {
    // asignar a mi variable el servicio inyectado
        _calculos = calculos;
    }
    [HttpGet("suma/{num1}/{num2}")]
    public IActionResult<int> Suma(int num1, int num2)
    {
        var resultado =_calculos.sumar(num1,num2);
        return Ok(resultado);
    }
}

martes, 23 de febrero de 2021

Interceptors en Agular



Un interceptor es un servicio que permite “capturar” los request o response de nuestra aplicación en la comunicación con servicios externos, permitiéndonos transformarlos, ya sea,  para agregarle información, como por ejemplo un token de autenticación o un header, o para realizar algún tratamiento en los datos que se requiera, retornando un observable como respuesta –lo que ayuda también al manejo centralizado de errores-.

Esta característica se incorporó a Angular a partir de la implementación del servicio HTTPClient (allá por la versión 4.3) y se requiere crear una clase Injectable que implemente la interface HTTInterceptor.

Este servicio es comúnmente utilizado también, en conjunto con un Loader Service, para mostrar una animación que indique que el contenido se está cargando (“loader”) o para capturar el tiempo de la solicitud y respuesta, y así registrar el resultado con el tiempo transcurrido. También podría usarse como MOCK o para la simulación de un backend, para el desarrollo cuando aún no se lo tiene construido -cargando datos de test y luego devolviéndolos a través de un observable de HttpResponse-.

Pero no debe confundirse con los Guards –ya hablaremos en otro post sobre estos-, que se encargan de las “vistas”, mientras que éstos, de los “envíos y respuestas” con el exterior.

domingo, 21 de febrero de 2021

¿Qué es GO?


 

Go es un lenguaje de programación de código abierto, creado por Google en el año 2009. Es un lenguaje orientado al desarrollo de aplicaciones de Backend (Servicios, API Rest, Script de sistemas, Automatizaciones). 

Es un lenguaje compilado (directamente a lenguaje máquina -como Java o C-), es decir no es un lenguaje interpretado, se encuentra optimizado para lograr alta concurrencia -capacidad de ejecutar más de una tarea al mismo tiempo-. Posee un recolector automático de basura (Garbage Collector) lo que permite la optimización de recursos consumidos en memoria. Todo esto entre otras muchas cosas más, ayudan al nivel de performance de nuestras aplicaciones -en comparativas con otros lenguajes como C++, Java o C#-.

Es de tipado estático (es decir obliga a la declaración explícita de variables, no así su tipo) y multiparadigma, lo que permite programar de forma estructurada u orientada a objetos (aunque no podremos hacer uso de la herencia y el polimorfismo, lo que quedará delegado al uso de interfaces).

Su sintaxis es muy similar a C y su proceso de desarrollo es muy sencillo. Posee una curva de aprendizaje baja, hay que recordar que Google creó originalmente Go como parte de su infraestructura interna, apuntando a que el lenguaje tenía que ser fácil de comprender y haciendo fuerza en un segmento de código solo pudiese tener efectos secundarios mínimos en otras partes de un proyecto. 

Esto permite que un gran número de programadores puedan trabajar en él a la vez, a través de una sintaxis más fácil de mantener y de modificar.

Esta es la página oficial https://golang.org/ con mucha documentación y desde donde podrás descargar el instalador para tu sistema operativo.

Características en Entity Framework Core 2.1

En este post, haremos un resumen de algunas de las nuevas características de EF Core 2.1:

LazyLoading (Carga perezosa): Esta nueva funcionalidad nos permite cargar datos de entidades relacionadas solo cuando es necesario, y no antes –ej: podemos cargar una entrada de un blog y no traer los comentarios hasta que se requieran leerlos-.

ValueConversion: Transformación de valores hacia la base de datos o desde la base de datos,  transformaciones por defecto, por ej.: Enum a string o Enum a enteros.

Groupby: Esta acción no se realiza más en memoria, sino que se realiza en el motor de base de datos, utilizando la cláusula “Groupby”. Gran avance en términos de eficiencia por parte de EF Core.

Data Seeding: Poder insertar data por defecto cuando creamos una base de datos. Esto se puede “atar” a una migración, lo que nos permite tener control total de los registros que deben estar en la BD.

QueryTypes: Los modelos de query, nos permiten definir modelos de resultado de “querys” arbitrarios, solo existen para representar el resultado de esta query, pero no podrán ser utilizados para operaciones de actualización sobre la base de datos.

Include en tipos derivados: En escenarios de herencia, eso te permite hacer un query a la clase base y puedes hacer un “inlcude” para traer los datos relacionados de la propiedad de navegación de un tipo derivado.

System.Transactions: Podemos utilizar características de transacciones de ambiente con EF Core. Una transacción de ambiente (scoped), funciona a nivel de hilo. De este modo, todas las operaciones que se realicen, estarán dentro de un hilo, por tanto, tendremos la oportunidad de revertir dichas operaciones.

sábado, 20 de febrero de 2021

¿Qué es LINQ?



LINQ es un lenguaje integrado de consultas, introducido con .Net 3.5 y Visual Studio 2008. LINQ puede ser utilizado con C# o Visual Basic, para realizar  consultas a cualquier tipo de origen de datos, proporcionando una única interfaz de consulta para diferentes tipos de fuentes de datos (puede recuperar datos de diferentes tipos como colecciones, ADO.Net, DataSet, servicios web, MS SQL Server y otras bases de datos).

Las consultas LINQ devuelven resultados como objetos. Le permite utilizar un enfoque orientado a objetos en el conjunto de resultados y no preocuparse por transformar diferentes formatos de resultados en objetos.

Ejemplo

// Origen de datos (en este caso, un array)
string[] frutas = {"peras", "bananas", "manzanas", "naranjas" };

// Consulta LINQ
var frutasConM = from fruta in frutas
                where fruta.Contains('m')
                select fruta;

// Recorrer resultado de  la consulta
foreach(var f in frutasConM)
{
    Console.Write(f + " ");
}


Inyección de dependencia en ASP.Net Core

Asp.Net Core está preparado para poder trabajar de forma nativa con Inyección de dependencia.  Para poder utilizar este mecanismo, Asp.Net C...