"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