Ir al contenido principal

Blazor en .Net Core, C# para front end.

Microsoft ha liberado recientemente una de sus nuevas herramientas de programación, esta es blazor, esta herramienta nos permite crear aplicaciones web usando C# en vez de javascript!!, de tal forma nuestra aplicacion es programada tanto en el Front End como en el Back End con C#, en potencia es una gran ayuda ya que nos liberaría de tener que usar un lenguaje aparte para la interfaz gráfica como lo es javascript (con sus diferentes frameworks) que es todo un stack de desarrollo.

Estuve dando un vistazo a esta herramienta y quiero compartirles como fue mi experiencia, para este ejemplo he utilizado visual studio community edition 2019, la versión con nos permite trabajar con las ultimas características de .Net core.

Empecemos.

Primero por supuesto creamos el proyecto y elegimos Nuevo proyecto -> "Blazor App", elegimos un nombre para la aplicación, lo mismo para la solución y damos clic en crear, luego hay una lista con el tipo de proyecto Blazor que queremos crear, elegimos "Blazor Server App", este tipo de aplicación nos permite tener comunicación entre el servidor y front end usando la librería SignalR, siendo este proceso transparente para el desarrollador. Finalmente volvemos dar clic en Crear y nos aseguramos que la versión del framework sea .Net Core 3.1.

Una vez creado veremos la siguiente estructura de archivos:


Por defecto Visual Studio crea el proyecto con una aplicacion de ejemplo, un contador y un servicio del clima, no lo tocaremos pero es libre de explorarlo, si habrimos el explorador de soluciones podemos ver los diferentes componentes: la carpeta "Pages" como su nombre nos indica es donde están las paginas de nuestra aplicación, "Index" que es la pagina de inicio por defecto, una pagina de error y los otros archivos de la aplicación, todos terminan .razor, esto indica que son archivos blazor (no confundir con paginas razor que tienen terminación .cshtml), hay una carpeta "Shared" donde esta "NavMenu.razor" el menú y "MainLayout.razor" el "panel" principal que contiene nuestras otras paginas; finalmente esta el archivo "App.razor" esta es la raíz de nuestro front end, desde allí se empieza a construir nuestra interfaz web. El resto es tal y como cualquier proyecto web en .Net

Nustra App para este ejemplo será una librería y tendrá la lista de los diferentes títulos disponibles, primero recuperaremos la lista y la mostraremos en la página, por ultimo podremos agregar un nuevo libro y guardarlo en el servidor.

Modelo

Creemos la clase que representa el modelo de nuestro libro, clic derecho sobre el nombre del proyecto y añadimos una carpeta llamada "Modelos", clic derecho sobre esta carpeta y agregamos la clase "LibroModel.cs", agregamos las siguientes propiedades:


DataAccess


A continuación crearemos una carpeta llamada "DataAccess" que representa nuestro acceso a información, clic derecho sobre el proyecto, agregar -> Carpeta y la nombramos "DataAccess" clic derecho sobre esta y agregamos una clase llamada "LibroDataAccess.cs" que representará el acceso a la base de datos.

Esta clase simplemente simula el acceso a la información y nos retorna una lista de libros mediante el método "ObtenerLibros()".


Razor Page.

Ahora damos clic derecho en la carpeta "Pages" luego Agregar -> Nuevo Item y elegimos "Razor Component", le ponemos un nombre "ListaLibros.razor" para este caso y damos clic en agregar.

El archivo creado no se diferencia de una típica pagina cshtml:


Primero configuramos la ruta a la página, esto se hace usando la directiva @page "/Libros"  en la parte superior del archivo así la ruta de esta página sería: http://localhost/Libros.
Ahora necesitamos inyectar, obtener una instancia del objeto de la clase "LibroDataAccess.cs" para esto agregamos "@using DataAccess" y a continuación copiamos "@inject LibroDataAccess libroDataAccess":


No nos olvidemos de configurar nuestra Inyección de dependencias en el método "ConfigureServices" de la clase "Startup.cs":


Ahora si podemos proceder y usar C#, lo primero que haremos será sobreescribir el método "OnInitialized" que claramente es el método que se llama al inicializar la página, y desde esta recuperamos la información y llenamos la tabla con los datos:


Estamos llamando el método "ObtenerLibros()" directamente y este nos retorno una Lista de "LibroModel" que luego mostramos en una tabla, esta es la magia, no tuvimos que hacer ningún llamado al servidor, la misma herramienta usando SignalR se ha comunicado con el back end y traido la información como si estuviéramos invocando cualquier método.

Enviar Información.


Ahora procederemos a guardar información, para esto crearemos un método en la clase "libroDataAccess" llamado "GuardarLibro" donde simplemente nos envían una instancia del objeto "LibroModel" y lo añadimos a la lista:


Regresamos a la pagina "ListaLibros.razor" y creamos el metodo "InsertarLibro" donde invocaremos nuestro data access y añadiremos el libro, finalmente creamos un formulario, para esto .Net nos provee con diferentes componentes:


  • EditForm: El formulario.
  • Model: El modelo.
  • OnValidSubmit: El método que vamos a llamar si es valido los datos.
  • @bind-Value: El valor que atamos a cada entrada.
  • DataAnnotationsValidator: Para usar anotaciones.
  • ValidationSummary: Para mostrar errores de la información.

Finalmente nuestra clase queda así:


Validar Información.

Podemos añadir anotaciones al modelo de nuestro libro, para validar los datos que ingresan:


En Conclusión.

Finalmente podemos ver nuestro pequeño proyecto y observar como guarda y recupera información usando solo C#, todo sin tener que usar javascript.

Comentarios

Entradas más populares de este blog

Ocelot Gateway y microservicios con .Net Core

Microservicios es una de las arquitecturas más usadas para grandes aplicaciones hoy en día, una vez el proyecto ha alcanzado un tamaño considerable debemos sopesar si lo mejor es dividir este en módulos de tal forma que cada uno de estos tenga una tarea independiente y un grupo de métodos propios, de esta forma facilitamos el mantenimiento, el rendimiento, la escalabilidad y podemos dividir nuestros grupos de desarrollo de tal forma que cada cual pueda enfocarse en una tarea en particular. Los Microservicios al final vendría siendo una colección de APIs cada una lo mas independiente posible de la otra, cada una con sus tareas, cada una con su propia base de datos, Ocelot Gateway nos permite agrupar todas estas APIs en una (o las que necesitemos) puertas de entrada, de tal forma que expongamos un solo conjunto de APIs a los clientes y no varias regadas a través de los diferentes microservicios. Empecemos. En este ejemplo construiremos una API y adicionaremos Ocelot Gateway para ...

Configurar Entity Framework en .Net Core 3.1, usando SQL Server.

En el post de hoy aprenderemos como configurar Entity framework (EF) para trabajar en una aplicación .Net. Entity es un Framework ORM (Mapeo Objeto-Relacional) que nos permite acceder más fácilmente a la base de datos, funciona de tal forma que los objetos de negocio están directamente relacionados con las tablas y columnas de la base de datos. Hay tres formas de programar en EF: Code First, Database First y Model First para este caso usaremos la primera, Code Firs como su nombre lo indica significa que primero programamos y luego usamos EF para construir la base de datos. Para este ejemplo usaremos Visual Studio 2019 y .Net Core 3.1. Empecemos. Para este ejemplo utilizaremos dos proyectos, uno como Interfaz y otro como una librería de acceso a datos, esto con el objetivo de que nuestra solución implemente la separación de intereses (separation of concerns). Creamos los proyectos. Crearemos dos proyectos, para el primero elegimos una aplicación " ASP.Net Core Web Ap...