"Blazor permite a los desarrolladores crear interfaces de usuario web interactivas utilizando C# en lugar de JavaScript, cerrando la brecha entre el desarrollo del lado del cliente y del servidor."
--Steve Sanderson
Ahora pasaremos a hablar del Framework Blazor. Blazor es un framework para la construcción de aplicaciones web que permite trabajar tanto en el cliente como en el servidor utilizando C#. Esto significa que en Blazor no es necesario recurrir a JavaScript, jQuery o TypeScript, aunque ofrece una interoperabilidad eficiente para casos donde se necesite invocar funciones JavaScript o jQuery.
Existen dos modalidades de trabajo con Blazor:
- Blazor Server: Utilizado en este proyecto, ejecuta los componentes en el servidor, manejando la actualización de la interfaz de usuario, el manejo de eventos y las llamadas a JavaScript a través de una conexión SignalR utilizando el protocolo WebSockets.
- Blazor WebAssembly: Ejecuta los componentes en el cliente, especÃficamente en el navegador. AquÃ, los componentes, sus dependencias y el runtime de .NET se descargan al navegador, permitiendo que la actualización de la interfaz de usuario y el manejo de eventos ocurran en el mismo hilo de ejecución del navegador.
.razor, combinando HTML y C# de manera similar a las páginas Razor y las vistas MVC, pero con la posibilidad de encapsular toda la lógica C# en el bloque @code. Este bloque permite crear clases, variables, manejar eventos, definir parámetros y controlar el ciclo de vida de las componentes.@code a un archivo .cs asociado a la componente .razor.OnInitialized o OnInitializedAsync y llamar a una clase controladora que obtenga la información del modelo, similar a un servicio REST, obteniendo la información en formato JSON.
[Route("landing")]
[ApiController]
public class LandingController : Controller {
private readonly IPresenterHelper presenterHelper;
private readonly IUserState userState;
public LandingController(IPresenterHelper presenterHelper, IUserState userState) {
this.presenterHelper = presenterHelper;
this.userState = userState;
}
[HttpGet]
public async Task<ActionResult<string[]>> GetUserTypes() {
return await Task.Run(() => GetUserTypeSync()).ConfigureAwait(false);
}
}
userTypes = await HttpClient.GetFromJsonAsync<string[]>(NavigationManager.BaseUri + "landing");
Al igual que en MVC, se puede crear una clase helper para obtener la información del componente Presenters. En Blazor se manejan:
- Componentes: Tienen el rol de vistas.
- Controladores: Obtienen la información del modelo, pero las componentes solicitan la información a los controladores.
- Modelos: Contienen la información y se utilizan para el data binding con las componentes.
- Intercomunicación entre componentes mediante parámetros y servicios.
- Interoperabilidad con jQuery para inicializar componentes especÃficos como Slick.
- Uso de controles diseñados para Blazor (e.g., EditForm, InputSelect).
- Manejo de validación. Similar pero con diferencias respecto a Razor y MVC.
Comparado con Razor y MVC
- Se reutilizó el 70% del código de las páginas
.cshtml, se hizo adaptación para usar los controles de Blazor y se modificó la forma de hacer en enlazado de información. - Solo se requirió el 1% del código en jQuery (la llamada a la configuración del control Slick), cumpliendo con la promesa de Blazor de hacer todo en C#.
Conexión con la Arquitectura Establecida
La integración de Blazor con la arquitectura establecida se muestra a continuación:
En el esquema, el componente Main actúa como el punto de entrada de la aplicación, donde se hace la inyección de dependencias y por ello es que se muestra que tiene dependencia con varias componentes. En Blazor, este componente Main corresponde a los archivos Program.cs y Startup.cs.
Nota: En .NET 8 ya solo figura el archivo Program.cs.
Lo interesante aquà es notar como la vista implementada con Blazor, depende únicamente del componente Presenters.
Aquà está el video de la aplicación construida con Blazor:
Doy los créditos de las imagenes usadas de Blazor, de la documentación de Microsoft:
https://learn.microsoft.com/en-us/training/modules/build-blazor-todo-list/2-data-binding

