Documentos de Académico
Documentos de Profesional
Documentos de Cultura
• Las aplicaciones que siguen el principio de inversión de dependencias, así como los
principios de diseño controlado por dominios (DDD), tienden a llegar a una
arquitectura similar. Esta arquitectura ha pasado por muchos nombres con los años.
Uno de los primeros nombres fue Arquitectura hexagonal, seguido por Puertos y
adaptadores. Más recientemente, se ha citado como arquitectura
cebolla o arquitectura limpia. Este último nombre, Arquitectura limpia, es el que se
usa para esta arquitectura en este libro electrónico.
• En el anterior diagrama, las dependencias fluyen hacia el círculo más interno. El
núcleo de la aplicación toma su nombre de su posición en el núcleo de este
diagrama. Y en el diagrama puede ver que el núcleo de la aplicación no tiene
dependencias de otros niveles de la aplicación. Las entidades e interfaces de la
aplicación se encuentran justo en el centro. En el exterior, pero todavía en el núcleo
de la aplicación, están los servicios de dominio, que normalmente implementan
interfaces definidas en el círculo interior. Fuera del núcleo de la aplicación, las capas
de la interfaz de usuario y la infraestructura dependen del núcleo de la aplicación,
pero no una de la otra (necesariamente).
OTROS ESTILOS DE ARQUITECTURA DE
APLICACIONES WEB
• CREAR MIGRACIONES EF
CREAR CLASES
• public partial class Genero
• {
• public Genero()
• {
• Pelicula = new HashSet<Pelicula>();
• }
• [Key]
• public int Id { get; set; }
• [Required]
• [StringLength(50)]
• public string Nombre { get; set; }
• public string Caracteristicas { get; set; }
• }
• public GeneroDTO GetGeneroById(int id)
• {
• var _genero = _context.Genero.Select(g => new GeneroDTO()
• {
• Id = g.Id,
• Nombre = g.Nombre,
• Caracteristicas = g.Caracteristicas
• }).FirstOrDefault(g => g.Id == id);
• return _genero;
• }
• public async Task<bool> UpdateGeneroAsync(GeneroDTO genero)
• {
• var entity = await _context.Genero.FirstOrDefaultAsync(e => e.Id ==
genero.Id);
• entity.Nombre = genero.Nombre;
• entity.Caracteristicas = genero.Caracteristicas;
• entity.Id = genero.Id;
• await _context.SaveChangesAsync();
• return true;
• }
• public async Task<GeneroDTO> CreateGeneroAsync(GeneroDTO genero)
• {
• try
• {
• var entity = new Genero()
• {
• Nombre = genero.Nombre,
• Caracteristicas = genero.Caracteristicas
• };
• _context.Genero.Add(entity);
• await _context.SaveChangesAsync();
• return genero;
• }
• catch (Exception ex)
• {
• throw new Exception(ex.Message);
• }
• }
CONTROLADOR
• namespace ApiPeliculas.Controllers
• {
• [Route("api/[controller]")]
• [ApiController]
• public class GeneroController : ControllerBase
• {
• private readonly IRepositorio _generoRepositorio;
• public GeneroController(IRepositorio generoRepositorio)
• {
• _generoRepositorio = generoRepositorio;
• }
• [HttpGet]
• public IEnumerable<GeneroDTO> Get()
• {
• return _generoRepositorio.GetAll();
• }
• // GET api/<GeneroController>/5
• [HttpGet("{id}")]
• public GeneroDTO Get(int id)
• {
• return _generoRepositorio.GetGeneroById(id);
• }
• [HttpPost]
• public async Task<GeneroDTO> Post(GeneroDTO genero)
• {
• return await _generoRepositorio.CreateGeneroAsync(genero);
• }
• // PUT api/<GeneroController>/5
• [HttpPut("{id}")]
• public async Task<bool> Put(GeneroDTO genero)
• {
• return await _generoRepositorio.UpdateGeneroAsync(genero);
• }
• [HttpDelete("{id}")]
• public async Task<bool> Delete(int id)
• {
• return await _generoRepositorio.DeleteGeneroAsync(id);
• }
• [HttpPut("{id}")]
• [ActionName(nameof(UpdateProductAsync))]
• public async Task<ActionResult<Products>> UpdateProductAsync(int id,Products product)
• {
• if (id != product.Id)
• {
• return BadRequest();
• }
• await _productRepository.UpdateProductAsync(product);
• return NoContent();
• }
• [HttpDelete("{id}")]
• [ActionName(nameof(DeleteProduct))]
• public async Task<ActionResult<bool>> DeleteProduct(int id)
• {
• var product = await _productRepository.GetProductById(id);
• if (product == null)
• {
• return BadRequest();
• }
• await _productRepository.DeleteProductAsync(product);
• return Ok();
• }
AZURE DEVOPS GRATIS
• https://dev.azure.com/fabioortizcharris/?acquisitionId=7c1bea87-a028-44d0-9fab-
012f5dadd76f&acquisition=true
INTRODUCCION A AZURE
• Microsoft Azure (anteriormente Windows Azure y Azure Services Platform) es un
servicio de computación en la nube creado por Microsoft para construir, probar,
desplegar y administrar aplicaciones y servicios mediante el uso de sus centros de
datos. Proporciona software como servicio (SaaS), plataforma como servicio
(PaaS) e infraestructura como servicio (IaaS) y es compatible con
muchos lenguajes, herramientas y marcos de programación diferentes, incluidos
software y sistemas específicos de Microsoft y de terceros.
• Implementación de la aplicación en Azure
• Desde el Explorador de soluciones, haga clic con el botón derecho en el proyecto y
seleccione Publicar.
EN EL CUADRO DE DIÁLOGO PUBLICAR:
SELECCIONE AZURE.
SELECCIONE NEXT (SIGUIENTE).
EN EL CUADRO DE DIÁLOGO PUBLICAR:
SELECCIONE AZURE APP SERVICE (WINDOWS) .
SELECCIONE NEXT (SIGUIENTE).
EN EL CUADRO DE DIÁLOGO PUBLICAR, SELECCIONE
CREATE A NEW AZURE APP SERVICE (CREAR UNA
INSTANCIA DE AZURE APP SERVICE).
APARECE EL CUADRO DE DIÁLOGO CREAR SERVICIO DE APLICACIONES:
• Se rellenan los campos de entrada de datos Nombre de la base de datos, Grupo de recursos,
Servidor de base de datos y Plan de App Service. Puede mantener estos nombres o
cambiarlos.
• Especifique los valores de Database administrator username (Nombre de usuario del
administrador de la base de datos) y Database administrator password (Contraseña del
administrador de la base de datos) del servidor de bases de datos seleccionado (tenga en
cuenta que la cuenta que use debe tener los permisos necesarios para crear la base de datos
de Azure SQL).
• Seleccione Crear.
• Una vez finalizada la creación, el cuadro de diálogo se cierra automáticamente y el cuadro
de diálogo Configure Azure SQL Database (Configurar base de datos de Azure SQL), vuelve
a recibir el foco:
• Rellene los campos Database connection user name (Nombre de usuario de conexión de la
base de datos) y Database connection password (Contraseña de conexión de la base de
datos). Estos son los detalles que utilizará la aplicación para conectarse a la base de datos en
tiempo de ejecución. El procedimiento recomendado es evitar el uso de los mismos detalles
que el nombre de usuario y la contraseña de administrador usados en el paso anterior.
• Seleccione Finalizar.
EN LA PÁGINA DE RESUMEN DEL PERFIL
DE PUBLICACIÓN, SELECCIONE
CONFIGURACIÓN:
• En la página Configuración del cuadro de diálogo Publicar, haga lo siguiente:
• Expanda Bases de datos y active Usar esta cadena de conexión en tiempo de
ejecución.
• Expanda Migraciones de Entity Framework y active Aplicar esta migración al
publicar.
• Seleccione Guardar. Visual Studio volverá al cuadro de diálogo Publicar.
HAGA CLIC EN PUBLICAR. VISUAL STUDIO PUBLICA LA
APLICACIÓN EN AZURE. CUANDO LA IMPLEMENTACIÓN
TERMINE, LA APLICACIÓN SE ABRE EN UN EXPLORADOR.
• Servicio de aplicaciones de Microsoft Azure: bienvenida (apipeliculas20221120123045.azur
ewebsites.net)
FRONT END
ANGULAR
• Instalar Angular
• Estructura Proyecto
• Análisis Componentes
• Crear Componentes
• Crear Servicios
• Crear Modelos
• Templates
• Múltiples componentes
• npm install -g latest
• Npm cache –forcé
• npm set audit false
• npm install -g @angular/cli@latest
• Ng new <<Proyect>>