Net Core - Conceptos Generales

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 38

UNIVERSIDAD CATÓLICA NORDESTANA

UCNE

FACULTAD DE INGENIERÍA
ESCUELA DE SISTEMAS

.NET CORE
Conceptos Generales
Preparado por Ing. Nelson Abreu Ed. D.
Octubre 2019
Modelo Vista-Controlador (MVC)

Modelo Vista Controlador (MVC) es un patrón de


arquitectura de software que separa los datos de una
aplicación, la interfaz de usuario, y la lógica de control en
tres componentes distintos. El patrón MVC se ve
frecuentemente en aplicaciones web, donde la vista es la
página HTML y el código que provee de datos dinámicos a
la página; el modelo es el Sistema de Gestión de Base de
Datos y la Lógica de negocio; y el controlador es el
responsable de recibir los eventos de entrada desde la vista.
Directorios del Proyecto .Net Core
Dependencies
Las dependencias en el proyecto ASP.NET Core 2.0 contienen
todos los paquetes NuGet del lado del servidor instalados, así
como los marcos del lado del cliente como jQuery, AngularJS,
Bootstrap, etc.

Properties
El nodo Propiedades incluye el archivo launchSettings.json que
incluye los perfiles de Visual Studio de la configuración de
depuración. También se puede acceder a esta configuración
dando click derecho encima del nombre del proyecto en el
solution explorer y eligiendo la opción propiedades.
Directorios del Proyecto .Net Core
wwwroot
Se encuentra en el directorio raíz e incluye archivos
estáticos como CSS, imagénes, y JS. Además, contiene la
hoja de estilo y el archivo JS por defecto para el proyecto
site.css y site.js respectivamente, los subdiretorios para
los CSS y JS de Bootstrap y Jquery.
Todas los scripts que se utilicen en el proyecto deben ser
colocados dentro de este directorio.

Para más información visitar:


https://docs.microsoft.com/es-es/aspnet/core/fundamentals/static-
files?view=aspnetcore-3.0
Directorios del Proyecto .Net Core
Controllers
Contiene todos las clases que heredan de
System.Web.Mvc.Controller.

El controller es el coordinador responsable de procesar las


entradas y luego decidir qué acciones deben ser ejecutadas.

Todas los controladores deben ser seguidos de la palabra


Controller. Ejemplo
HomeController, VentasController, ComprasController.

Sin embargo, para los fines de ruta, esta palabra es eliminada.


Directorios del Proyecto .Net Core
Models
Este directorio contiene cualquier clase que represente los
conceptos fundamentales de la aplicación, o clases que
contengan datos en un formato que es específico a una
vista en particular (view o view model).
Views
Contiene los archivos que sirven para construir la interfaz
del usuario. Cuando se utiliza RAZOR los archivos tienen
extensión .cshtml o .vbhtml.
Por lo general, el nombre de este archivo está asociado con
una acción (función) que se programe en el controlador.
Directorios del Proyecto .Net Core
Startup.cs
Es el equivalente al Global.asax en los proyectos de .Net
tradicional. Como su nombre lo sugiere es lo primero que
se ejecuta cuando la aplicación inicia.

Esta clase es donde:


 Se configuran los servicios requeridos por la aplicación.
 Se define la canalización de manejo de solicitudes.

Para más información ver este enlace:


https://docs.microsoft.com/en-
us/aspnet/core/fundamentals/?view=aspnetcore-3.0&tabs=windows
Directorios del Proyecto .Net Core
Program.cs
Una aplicación web ASP.NET Core es en realidad un proyecto de
consola que comienza a ejecutarse desde el punto de entrada
public static void Main () en la clase Program donde podemos
crear un host para la aplicación web.

appsettings.json
Es el archivo principal de opciones de configuración para una
aplicación web en .Net Core, sería el equivalente al web.config
de los proyectos .NET tradicionales. El archivo es un documento
json que define información de configuración concerniente a la
aplicación web.
Directorios del Proyecto .Net Core
El appsettings.json es un archivo muy simple que nos permite
establecer las variables de ejecución de nuestra aplicación y con
el que podemos elegir si queremos un único fichero o tener un
fichero por entorno, por ejemplo: appsettings.Development.json,
appsettings.Production.json, appsettings.Staging.json,
appsettings.XXX.json.

Ver este link: https://blogs.encamina.com/piensa-en-software-desarrolla-en-colores/appsettings-


environment-net-core/
Gestión de Bibliotecas o Frameworks
NuGet
Es el administrador de paquetes para la plataforma de desarrollo de Microsoft
incluyendo .NET.
Las herramientas de NuGet tienen la habilidad de producir y usar paquetes.
La galería de NuGet es el repositorio central usado por todos los autores de
paquetes y consumidores.

Cuando se usa NuGet para instalar un paquete, este copia los archivos de la
librería en la solución y automáticamente actualiza el proyecto (agrega
referencias, cambia los archivos config, etc). Si se elimina un paquete, NuGet
reversa cualquier cambio previamente realizado.

La instalación y desinstalación de paquetes se puede realizar utilizando la


interfaz gráfica o utilizando la consola de Nuget.

https://www.nuget.org/
Gestión de Bibliotecas o Frameworks
libman.json
Library Manager (LibMan) es una herramienta ligera de
gestión de bibliotecas del lado del cliente. LibMan descarga
bibliotecas y frameworks populares del sistema de archivos
o de una red de entrega de contenido (CDN). Los CDN
admitidos incluyen CDNJS, jsDelivr y unpkg. Los archivos de
biblioteca seleccionados se obtienen y se colocan en la
ubicación adecuada dentro del proyecto ASP.NET Core.
Gestión de Bibliotecas o Frameworks
Las ventajas de utilizar libman.json son:
 Solo se descargan los archivos de biblioteca que necesita.
 No se necesitan herramientas adicionales, como Node.js,
npm y WebPack, para adquirir un subconjunto de archivos
en una biblioteca.
 Los archivos se pueden colocar en una ubicación
específica sin recurrir a tareas de compilación o copia
manual de archivos.

Para más información visitar:


https://docs.microsoft.com/en-us/aspnet/core/client-side/libman/index?view=aspnetcore-2.2
https://docs.microsoft.com/en-us/aspnet/core/client-side/libman/libman-vs?view=aspnetcore-3.0
Bundling y Minification
La agrupación y la minificación (bundling and
minification) son dos optimizaciones de rendimiento
distintas que puede aplicar en una aplicación web. En
conjunto, la agrupación y la minificación mejoran el
rendimiento al reducir la cantidad de solicitudes del
servidor y el tamaño de los activos estáticos solicitados.
La agrupación y la minificación mejoran principalmente el
tiempo de carga de la solicitud de la primera página. Una
vez que se ha solicitado una página web, el navegador
almacena en caché los activos estáticos (JavaScript, CSS e
imágenes).
Bundling y Minification
Bundling
La agrupación combina múltiples archivos en un solo
archivo. La agrupación reduce la cantidad de solicitudes de
servidor que son necesarias para representar un activo web,
como una página web. Puede crear cualquier cantidad de
paquetes individuales específicamente para CSS, JavaScript,
etc. Menos archivos significa menos solicitudes HTTP desde
el navegador al servidor o desde el servicio que
proporciona su aplicación. Esto da como resultado un
rendimiento mejorado de la carga de la primera página.
Bundling y Minification
Minification
La minificación elimina caracteres innecesarios del código
sin alterar la funcionalidad. El resultado es una reducción
significativa del tamaño de los activos solicitados (como
CSS, imágenes y archivos JavaScript). Los efectos
secundarios comunes de la minificación incluyen acortar
nombres de variables a un carácter y eliminar comentarios
y espacios en blanco innecesarios.

Para más información visitar:


https://docs.microsoft.com/en-us/aspnet/core/client-side/bundling-and-
minification?view=aspnetcore-3.0&tabs=visual-studio
Bundling y Minification
Para realizar la gestión de agrupación y minificación utilizaremos el
archivo bundleconfig.json
El archivo bundleconfig.json es una colección de paquetes. Se
pueden colocar múltiples archivos de configuración en cualquier lugar
de la estructura de directorios del proyecto. Tiene la siguiente
estructura.
[
{
"inputFiles": [
"wwwroot/lib/jquery/dist/jquery.js",
"wwwroot/lib/bootstrap/dist/js/bootstrap.js"
],
"minify": {
"enabled": true,
"renameLocals": true
},
"outputFileName": "wwwroot/js/portal.min.js",
"sourceMap": false
} Para más información visitar:
] https://github.com/madskristensen/BundlerMinifier/wiki/bundleconfig.jso
n-specs
Bundling y Minification
Para realizar el proceso del agrupación y minificación
utilizaremos la herramienta

Se debe instalar desde la consola de NuGet utilizando el


siguiente comando:
Install-Package BuildBundlerMinifier

Luego debe dar un rebuild al proyecto y volverlo a


ejecutar. La herramienta se encarga de realizar el
proceso de bundling y minification.
CONTROLLER
El controlador, dentro del patrón de MVC, es responsable
de responder a las entradas del usuario. Por lo general, lo
hace realizando cambios al modelo en respuesta a las
entradas recibidas.
Es responsable del flujo de la aplicación, trabajando con los
datos que recibe y enviando datos relevantes hacia una vista
(View).

Cada método público colocado dentro de un controller es


considerado como un método de acción. Esto significa
que puede ser invocado desde la web vía alguna URL para
realizar la acción.
ESTRUCTURA DE UN CONTROLLER

HOME CONTROLLER

MÉTODOS PÚBLICOS

Index Contacto

VIEWS

index.cshtml contacto.cshtml
Rutas en .Net Core
Tanto para los modelos, vistas y controladores, las
aplicaciones de MVC utilizan el sistema de enrutamiento de
ASP.NET Core, el cual decide cómo las URL son mapeadas
con los controladores particulares y sus acciones. Las
siguientes rutas enviarán el navegador a la acción Index del
controlador HomeController:
/
/Home
/Home/Index
Rutas en .Net Core
Para cambiar el formato predeterminado se debe ir al
archivo Startup.cs y ubicar la siguiente sección:

Aquí se puede sustituir el controlador y la acción por


defecto del proyecto.
Rutas en .Net Core
Cuando un navegador solicita http://tusitio/ o
http://tusitio/Home, este enruta la salida de vuelta al
HomeController y específicamente al método Index.
Como un controlador puede tener varios métodos
públicos, cada método tiene su propia dirección. Ejemplo:
Si se tiene el método CalcularArea() en el HomeController
el URL sería:

http://tusitio/Home/CalcularArea
Rutas .Net Core
Si los métodos en los controladores reciben parámetros,
como por ejemplo:
public string CalcularArea(double b, double a)
{
return string.Format(“El área es: {0}”, b*a/2);
}

La URL correspondiente sería:

http://tusitio/Home/CalcularArea?b=23.5&a=88.35
IActionResult
Cuando se utiliza el objeto IActionResult como tipo de
dato a retornar en un método de acción, se le instruye a
MVC que debe asociarlo con una vista. La vista es un
archivo que termina con .cshtml o .vbhtml y debe ser
agregado al proyecto.

public IActionResult Index() {


return View();
}

Cuando se utiliza return View() se indica que debe enviar el


control de la acción al archivo de vista (view) asignado sin
parámetro alguno.
IActionResult
Para indicar que un método de un controller puede recibir
valores nulos se utiliza la siguiente sintaxis.

public bool? EsEmpleado { get; set; }

En este caso se indica que la propiedad puede recibir


valores true, false y null.
ViewBag
Es un objeto dinámico de la clase Controller a el que se le
pueden asignar valores arbitrarios que luego pueden ser
enviados desde el método de la acción hasta la vista
asociada con dicho método.

public IActionResult Index() {


int hour = DateTime.Now.Hour;
ViewBag.Saludos = hour < 12 ? “Buenos días" : “Buenas Tardes”;
return View();
}
ViewBag
En la vista (view) se invoca de la siguiente forma:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
@ViewBag.Saludos Mundo
</div>
</body>
</html>
Etiquetas de Ayuda de MVC .Net Core
Los Tag Helpers permiten que el código del lado del
servidor participe en la creación y representación de
elementos HTML en archivos Razor.

Para más información visitar:


https://docs.microsoft.com/en-us/aspnet/core/mvc/views/tag-helpers/intro?view=aspnetcore-2.2
Etiquetas de Ayuda de MVC .Net Core
_ViewImports.cshtml
Utilizar o crear este archivo para colocar las referencias a
tag helpers no incorporados. Permite que el tag helper se
puede utilizar en las vistas. Colocar el siguiente contenido:

@using NombreProyecto
@using NombreProyecto.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@using NombreProyecto.Helpers
@addTagHelper *, NombreProyecto

@using ReflectionIT.Mvc.Paging
@addTagHelper *, ReflectionIT.Mvc.Paging
Model Binding
Es una característica de MVC que permite convertir los
datos (name/id de HTML), recibidos vía la solicitud HTTP, al
dominio del modelo especificado en el View. Es decir copia
los valores de las etiquetas al modelo especificado para ser
usado. Evita utilizar Request.Form[] y
Request.QueryString[] para obtener los valores del
formulario pasados vía POST o GET respectivamente.

Este proceso es lo opuesto a las etiquetas de ayuda


(helpers) que permiten crear elementos de HTML con los
atributos id y name a partir de los nombres de las
propiedades de la clase modelo utilizada en el View.
Manejo de Formularios
Es recomendable manejar las solicitudes tipo GET y POST
en diferentes métodos para una misma acción.Ya que los
dos métodos tienen responsabilidades distintas. Ambas
acciones son invocadas por la misma URL, pero MVC se
asegura de que el método correcto sea invocado basado
en si es GET o POST.

GET: será responsable de presentar el formulario dentro


del View con la información de los campos en blanco.

POST: será responsable de recibir los datos enviados


desde el formulario para su procesamiento.
Manejo de Formularios
[HttpGet]
public IActionResult Estudiante()
{
return View();
}
[HttpPost]
public IActionResult Estudiante(Estudiante est)
{
return View(est);
}

[HttpGet] Para manejar las solicitudes tipo GET.


[HttpPost] Para manejar las solicitudes tipo POST.

Se debe incluir el using del namespace de models. El


IActionResult Estudiante está sobrecargado.
Manejo de Formularios
View: EstudianteRegistrado.cshtml
Este es un View fuertemente tipiado con el modelo Estudiante.

@model MvcApplication1.Models.Estudiante
@{
ViewBag.Title = "EstudianteRegistrado";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Estudiante Registrado</h2>
<p>
El estudiante <strong>@Model.Nombre @Model.Apellido</strong> fué registrado con éxito.
@if (Model.Sexo.Equals("F"))
{
@:El sexo es Femenimo.
}
else
{
@:El sexo es masculino.
}
</p>
Manejo de Formularios
[HttpPost]
public IActionResult Estudiante(Estudiante est)
{
return View("EstudianteRegistrado", est);
}
Esta forma de usar el View, envía los datos recibidos vía POST de
la clase modelo Estudiante al View EstudianteRegistrado.
Validación de Modelos
Las reglas de validación se colocan en la definición de la
clase que servirá del modelo en MVC.
Se debe importar el espacio de nombres:
System.ComponentModel.DataAnnotations
Algunos ejemplos:
[Required(ErrorMessage = "El nombre del estudiante no puede estar en blanco.")]
public string Nombre { get; set;}

[Required(ErrorMessage = "El Email no puede estar en blanco.")]


[RegularExpression(".+\\@.+\\..+", ErrorMessage = "Email inválido")]
public string Email { get; set; }

[StringLength(30, ErrorMessage = “La longitud máxima es de 30 caracteres. ")]


public string Apellido { get; set; }

https://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations%28v=vs.110%29.aspx
Validación de Modelos
Validación de Modelos
[HttpPost]
public ActionResult Estudiante(Estudiante est)
{
if (ModelState.IsValid)
{
//Si no hay error..
return View("EstudianteRegistrado", est);
}
else
{
//si hay error.
return View();
}
}

Para que las validaciones surtan efecto en el View y para


verificar en el controller con ModelState.IsValid, debe
agregar la siguiente línea:
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
Validación de Modelos
Se usa ModelState.AddModelError() para mostrar errores
desde el modelo.

También podría gustarte