Defensa Proyecto David Amador DAW con Alberto Corredera como tutor.
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Defensa Proyecto David Amador DAW con Alberto Corredera como tutor.
Buenas tardes, David. Hoy, día 11 de junio, a las 20 y 19, estamos convocados a través de la Jefatura del Departamento para la defensa del módulo profesional de proyecto de ciclo formativo del grado superior de desarrollo de aplicaciones web.
00:00:03
Te informo que esta grabación se usará en el entorno cerrado de EducaMadrid con fines educativos y solo estará a disposición de los profesores evaluadores en el aula virtual para llevar a cabo la evaluación y calificación de la defensa del proyecto.
00:00:22
En el aula virtual de proyectos habéis sido informados de los criterios y rúbrica de calificación.
00:00:37
calificación, el orden de la presentación del proyecto es la siguiente. Primero, 15
00:00:42
minutos máximo para defender el proyecto, luego 5 minutos para las preguntas por parte
00:00:47
del tribunal, en este caso soy solo yo, y dicho esto, tu tiempo de exposición comienza
00:00:53
a partir de este momento. Adelante y mucha suerte.
00:00:57
Buenas tardes. Bueno, el proyecto que voy a presentar consiste en el desarrollo de software
00:01:08
utilizando CleanArchitecture y Tecnologías.net.
00:01:18
Básicamente se trata de una aplicación de gestión de contenidos
00:01:24
y demás componentes que he ido investigando para hacer este proyecto.
00:01:28
En la parte de abajo de la presentación podéis ver un repositorio de código público
00:01:37
en el que poder acceder al código Fuen.
00:01:42
Además, cabe recalcar que el proyecto consiste en la construcción de sistemas que sean fáciles de mantener y expandir. Eso es prácticamente lo que me he basado en este proyecto, más que en la propia aplicación WeaponSig, sino en la construcción de un software que se pueda evolucionar en el tiempo.
00:01:44
Vale, requisitos de software que tenemos que tener en cuenta para realizar este proyecto.
00:02:08
Como base de datos he utilizado SQL Server, he utilizado la versión Express, que es una versión gratuita para el desarrollo y la realización de pruebas. También he utilizado Azure DevOps para la parte del repositorio de código en la nube y también una serie de herramientas que tiene esta aplicación que en las próximas diapositivas voy a comentar.
00:02:29
Como IDE de desarrollo de software he utilizado Microsoft Visual Studio 2022, la versión Community, que también es una versión gratuita.
00:03:03
Como cliente de SQL Server he utilizado Zure Data Studio. Es un cliente parecido a lo que vendría siendo Visual Studio Code, pero para el manejo y la administración y las consultas de SQL Server.
00:03:13
También, para el despliegue de aplicaciones he utilizado Docker. Docker tiene una versión de escritorio que es también gratuita. Se llama Docker Desktop Community y también en las siguientes diapositivas pasaré un poco a comentar esta herramienta.
00:03:35
Vale. Clean Architecture. También llamada arquitectura limpia, ¿qué es lo que es? Pues es un estilo de arquitectura de software que está creado por Robert F. Martin, que fue el autor que escribió el libro de Clean Code, que es un libro relativamente conocido en el mundo del desarrollo de software.
00:04:03
y se basa básicamente en crear sistemas fáciles de entender, mantener y escalar.
00:04:36
Tiene una serie de principios que es independiente de frameworks, independiente de la interfaz de usuario,
00:04:44
independiente de la base de datos e independiente de los sistemas o agentes externos.
00:04:52
Es decir, que en cualquier momento del desarrollo, si se ha llevado a buena práctica este sistema de arquitectura,
00:04:56
podrás cambiar el framework de la aplicación la interfaz de usuario la base de datos o sistemas
00:05:02
externos a la aplicación sí que eso repercuta en lo que viene siendo la aplicación en el sistema
00:05:09
hoy perdón me ha ido de aquí vale a continuación a explicar el modelo de capas que tiene la
00:05:17
arquitectura limpia es el modelo y la estructura organizativa que he integrado en el proyecto en
00:05:32
primer lugar tendríamos la capa de dominio que es el corazón de la arquitectura limpia totalmente
00:05:43
independiente contiene las entidades enumeraciones excepciones clases bases tipos y lógicas específicos
00:05:48
de la capa. La capa de aplicación se implementa en los casos de uso e interactúa con la capa
00:05:56
de dominio. También define las interfaces implementadas por la capa de persistencia
00:06:03
y la capa de infraestructura. Contiene la lógica de aplicación, de teos, mapeadores
00:06:08
y etc. Capa de persistencia nos permite interactuar con bases de datos externas u otro tipo de
00:06:12
repositorios de datos. Básicamente en esta capa es la que tiene la conexión directa
00:06:18
con la base de datos y realiza las consultas y las modificaciones.
00:06:25
La capa de infraestructura contiene clases para acceder a los recursos externos como bases de datos, servicios web, mensajería, etc.
00:06:31
Se basan en interfaces definidas en la capa de aplicación.
00:06:40
En este caso he comentado tanto en la capa de persistencia como en la de infraestructura el uso de base de datos,
00:06:43
pero bueno, lo que vendría siendo la base de datos del core de la aplicación sería la capa de persistencia.
00:06:50
En la capa de presentación representa la interfaz de datos, pudiendo ser una API, una aplicación web, etc.
00:06:57
Y interactúa con la capa de aplicación.
00:07:03
Además, para el proyecto utilizado, una capa transversal, que esto no vendría siendo una capa de la arquitectura limpia de por sí,
00:07:07
pero se puede manejar como una capa de comodín
00:07:18
que nos permitirá interactuar con objetos genéricos
00:07:22
utilizados en las demás capas
00:07:26
como el uso de logins
00:07:28
o a lo mejor un objeto genérico para las respuestas
00:07:30
y enviarlos a la capa de publicación
00:07:34
como se puede ver en la imagen
00:07:36
podemos observar
00:07:42
que las capas tienen una dependencia hacia adentro, es decir, la capa de dominio no depende de las capas externas, es al revés.
00:07:44
Las capas externas dependen de la capa de dominio. Es una dependencia inversa para que el dominio no tenga ningún acople a las demás capas.
00:07:54
Entre una de las desventajas que puede tener este sistema de arquitectura es que puede decirse que tiene demasiada burocracia
00:08:07
Se tienen que crear muchas carpetas, funciona todo con interfaces
00:08:18
Ya que en la capa de aplicación deberemos crear las interfaces que se comuniquen con las demás capas y realicen su implementación
00:08:22
Es decir, en nuestro caso, la capa de persistencia no se comunica con la capa de presentación, ni la capa de infraestructura se comunica con la capa de presentación, se hace a través de la capa de aplicación.
00:08:37
Además, para la realización de la arquitectura limpia hay que utilizar una serie de patrones de diseño.
00:08:54
Podría hablar también de los principios SOLID, pero es añadir mucha información. He recopilado estos tres patrones de diseño que he utilizado en la aplicación. Vendría siendo el patrón repositorio, que se basa en crear una capa de atracción entre la capa de acceso a datos y la capa de lógica empresarial.
00:09:03
El patrón de unidad de trabajo o Unit of Work para tratar como una unidad todos aquellos objetos nuevos, modificados o eliminados respecto a la fuente de datos y permite centralizar las operaciones contra la fuente de datos. Evita el exceso de conexiones contra la base de datos a la hora de persistir un conjunto de acciones a ejecutar.
00:09:27
Por último, tendríamos la inyección de dependencias. Esta es una implementación del principio de inversión de control en el cual nosotros no creamos, distanciamos objetos como vendría siendo haciendo un new de un objeto.
00:09:50
Lo hacemos a través del constructor y permite la modularidad y el desacoplamiento de objetos.
00:10:07
En ETH Core integra la inyección de dependencias de forma nativa a través de la clase Program, que vendría siendo la clase del proyecto de presentación, pudiéndose una API o una aplicación web.
00:10:16
Y en esa clase se inyectan los objetos.
00:10:30
Según los tiempos de vida, bueno, estos objetos se llaman servicios y según el tiempo de vida pueden ser de tres tipos,
00:10:36
que vendría siendo scope, que son servicios creados por cada request, singleton,
00:10:45
una y sola distancia compartida durante todo el flujo de la aplicación,
00:10:53
y Transient una nueva instancia creada cada vez que se requiera.
00:10:56
Resumiendo un poco, yo si tengo un objeto en el que le hice una inyección de dependencias
00:11:02
en la clase Program y la pongo de tipo Transient, cada vez que se requiera ese objeto
00:11:08
se va a crear una instancia de él.
00:11:18
Pasando con lo siguiente, voy a hablar un poquito de Azure DevOps.
00:11:25
Azure DevOps es un conjunto de herramientas y servicios en la nube de Microsoft
00:11:30
Tiene una serie de componentes principales como Azure Boards para la planificación y seguimiento del trabajo
00:11:35
Azure Reports para la gestión del código fuente
00:11:42
Este código fuente puede estar hecho en JIT o también en Team Foundation
00:11:46
Yo en mi caso para el proyecto lo he hecho en JIT
00:11:50
Azure Pipelines para automatizar compilaciones, pruebas y despliegues
00:11:54
Azure Test Plane para pruebas y gestión de calidad
00:11:58
y Azure Artifacts para la gestión de librerías y dependencias
00:12:03
Está muy enfocado Azure DevOps también para el tema de la integración continua
00:12:08
es decir, que yo puedo tener un servidor en el que tengo un agente
00:12:15
creado con el runtime del SDK, por ejemplo, de .NET
00:12:20
Y cada vez que subo una versión de código a Azure Repos, puedo crear una pipeline para que pueda compilar el proyecto. Y si el proyecto no compila y no está bien desarrollado, puedes enviar una notificación al desarrollador.
00:12:26
Aquí podemos ver una imagen del proyecto que he realizado. En la imagen de la izquierda podemos observar la parte de Azure Reports con el repositorio del proyecto y luego la imagen de la derecha de Azure Boards,
00:12:49
en el cual puedes crear tareas, asignar desarrollos evolutivos a un desarrollador y demás.
00:13:15
Ahí he puesto un ejemplo de las tareas que me he creado yo para organizarme en el proyecto.
00:13:27
NETBLADZOR.
00:13:38
Bueno, NetBlazor en el caso del desarrollo del proyecto vendría siendo la parte cliente, la parte de presentación. NetBlazor es un centro para aplicaciones web interactivas.
00:13:38
Es un framework de código abierto para la creación de aplicaciones web interactivas y SPA. Utiliza César en cliente y servidor en lugar de Javascript. Usa una sintaxis denominada Razor, similar a HTML, con inclusión de código de César.
00:13:55
Y tiene componentes reutilizables y encasulados para construir aplicaciones web. Es decir, yo en la aplicación puedo crear una página que al final y al cabo es un punto Razor y esa página puedo crear dentro de ella más componentes Razor y un componente Razor puede ser una tabla, puede pasarle parámetros, puede hacer un montón de cosas.
00:14:15
Los modos de funcionamiento de Blazor
00:14:42
Existen tres modos de funcionamiento
00:14:47
Uno es Blazor Server
00:14:49
En el cual la lógica de la aplicación se ejecuta en el servidor
00:14:53
Mediante una conexión SILINAR AR
00:14:58
Para la comunicación en tiempo real entre el servidor y cliente
00:15:01
Es decir, para Blazor Server la comunicación es en tiempo real
00:15:05
no puedes realizar ninguna acción offline en el proyecto
00:15:11
y bueno, entre otras cosas que ahora enseñaré.
00:15:17
Blazor WebAssembly es un código fuente compilado en el navegador.
00:15:24
Es decir, cuando yo tengo una aplicación que funciona con Blazor WebAssembly
00:15:29
esa parte de WebAssembly se compila en el navegador.
00:15:35
Y no tiene conexión con el servidor, aunque puedes hacer conexiones HTTP a un servidor. Luego, Blazor Híbrido está especialmente utilizado para aplicaciones móviles y dispositivos.
00:15:39
En el caso del proyecto que he desarrollado, está realizado con Blazor WebAssembly, pero por detrás tiene un proyecto de servidor en el que le hago desde el WebAssembly consultas por HTTP.
00:16:00
Aquí podemos observar una tabla comparativa de las diferencias entre las versiones de Blazor.
00:16:23
Disculpa, David
00:16:29
Llevamos ya unos 15 minutos
00:16:32
Por si quieres ir un poquito
00:16:34
Agilizar hacia las conclusiones
00:16:37
Hay un poco de flexibilidad
00:16:39
Pero vamos, por irnos
00:16:41
Vale
00:16:43
Vale, vale
00:16:43
Vale, voy a hablar un poco de
00:16:45
NF8
00:16:51
NF8 es el
00:16:52
Framework utilizado para el proyecto
00:16:55
Para la parte de servidor, es multiplataforma
00:16:57
Tiene
00:16:59
mejor rendimiento y consumo que otras versiones
00:17:01
de Net Framework, tiene integración con Azure,
00:17:04
Docker y luego, bueno, utiliza
00:17:07
el Netcore Routime, tiene bibliotecas
00:17:09
nativas y luego el SDK.
00:17:13
Voy a pasar a hablar de
00:17:17
Nugget.org. Nugget.org es un repositorio en línea gratuito
00:17:19
y de código abierto para la distribución y administración de paquetes
00:17:22
Nugget. Vale, es simplemente un gestor de
00:17:25
librerías en el que está totalmente integrado con
00:17:28
Visual Studio. Aquí podemos observar una captura de Nugget integrado en Visual Studio y podemos
00:17:31
observar varias bibliotecas. Entity Framework Core. Entity Framework Core es un ORM para trabajar con
00:17:44
base de datos usando objetos.net. En este caso, lo he utilizado para hacer las conexiones
00:17:53
con la base de datos. A partir de Entity Framework puedes realizar la gestión del esquema de
00:18:05
base de datos a lo largo del ciclo de vida de la aplicación. Codefresh es el sistema
00:18:13
que he utilizado para la gestión de base de datos, a través de este modelo lo que hacemos
00:18:23
es que creamos la base de datos a partir de las clases entidad que tenemos en nuestro
00:18:31
proyecto de software y a través de una serie de comandos recopilamos esas entidades y Entity
00:18:38
framework nos crea una migración que la podemos ejecutar para sincronizar la base de datos con
00:18:47
las entidades del proyecto. Tenemos también Moot Blazor, que es un framework para Blazor y
00:18:54
componentes Razor que he utilizado. Simplemente te ayuda a crear una interfaz de usuario
00:19:05
fácil de manipular y de desarrollar, permite personalizar temas a través de templates,
00:19:11
tiene una API, también tiene objetos en .NET que puedes modificarlos y demás.
00:19:19
Otro componente que he utilizado es Atom Mapper, que es una librería de mapeo de objetos en .NET.
00:19:30
Define mapeos en una configuración centralizada, realiza mapeo automático basado en convenciones de nomenclatura
00:19:35
Personalización de mapeos, soporte para una amplia variedad de escenarios de mapeo
00:19:43
Y una optimización para el proceso de mapeo para reducir la carga de rendimiento
00:19:49
Al final lo utilizado es para mapear los DTOs con las entidades que están sincronizadas en el Entity Framework de la aplicación
00:19:53
Docker. Como he dicho antes, Docker lo he utilizado para hacer despliegues en el entorno de desarrollo. Es una plataforma de código abierto. Tiene catálogas turísticas como portabilidad, aislamiento, eficacia, automatización, versionado y consistencias en diferentes entornos.
00:20:05
Despliegue rápido, facilita la escalabilidad y mejora el trabajo con integración continua.
00:20:29
Para el despliegue en Docker lo que hay que hacer es descargar la imagen, lo que he hecho es descargar la imagen del SDK de .NET, crearla en Docker, luego crear la imagen del proyecto a través de un archivo que se llama Dockerfile y a través de la imagen creada del proyecto crear un contenedor.
00:20:37
Aquí tenemos dos imágenes, la parte de Docker Desktop con la imagen creada del proyecto, bueno, con el contenedor, perdón, y en la imagen de la derecha tenemos la aplicación ejecutándose en un template de Modulazor.
00:20:58
Y eso sería todo, muchas gracias.
00:21:23
Muchas gracias David. Yo ahora voy a pasar a hacerte algunas preguntas.
00:21:26
Y, bueno, lo primero te felicito por el proyecto porque veo que le has dedicado tiempo y que además tienes muchos componentes. Sé que es muy difícil explicar en solo 15 minutos todas las cosas que has hecho y cada uno de los módulos, pero vamos, me queda clara la idea de cómo has, bueno, lo que intentas transmitir.
00:21:30
Pero, bueno, me gustaría preguntarte, en primer lugar, o sea, ¿cuáles son las principales dificultades que te has encontrado en este proyecto?
00:21:54
Muchas, han sido muchas.
00:22:04
La que más ha sido las migraciones de CodeFields con Entity Framework, porque, claro, para realizar las migraciones,
00:22:08
No solo es criarte las clases
00:22:16
Entidad, la base de datos
00:22:20
También tienes que configurar una serie
00:22:22
De cosas como las relaciones
00:22:24
Las primary case
00:22:26
Desde GESAT
00:22:28
Y era una cosa que nunca había hecho
00:22:30
Entonces al intentar
00:22:32
Realizar la migración pues
00:22:34
Me daban errores, no conseguía armar
00:22:35
La aplicación
00:22:38
Y otros errores que he tenido
00:22:39
También ha sido con
00:22:42
Bueno, en el desarrollo
00:22:43
en el tema de la inyección de dependencias
00:22:45
que siempre había alguna dependencia
00:22:47
que claro, no conseguía
00:22:49
inyectar en la ejecución
00:22:51
de la aplicación y me fallaban las
00:22:53
interfaces por el modelo de arquitectura
00:22:55
y luego también
00:22:57
con Docker a la hora de crear
00:22:59
el contenedor Docker
00:23:01
Una cosa, si te parece David
00:23:03
puedes dejar de compartir
00:23:05
la pantalla un momento
00:23:06
y así ya
00:23:09
se queda grabada en otras imágenes
00:23:10
Vale, perfecto
00:23:13
He visto que has usado PureBoards y bueno, pues aparte de lo que es hacer una arquitectura clean, lleva implícito también la metodología Agile de desarrollo.
00:23:18
Entonces, te quería preguntar si la has llegado a utilizar para tu propio trabajo o simplemente lo has puesto como un ejemplo.
00:23:35
Al principio esa era mi idea, pero luego entre la falta de tiempo, el trabajo, el curso, los exámenes y demás, al final ha sido el día que me ponía me tiraba hasta las 3 de la mañana.
00:23:43
Eso es lo que he hecho. Pero sí, ha sido mi idea inicial que he querido un poco reflejar, pero no la he llevado a cabo al 100%.
00:24:03
Bueno, otra pregunta que me surge es, bueno, ¿cuál es tu valoración de hacer una Clean Architecture cuando estamos también usando el framework del 8.0 de .NET?
00:24:14
El tema de Clean Architecture, el otro día vi un vídeo de un YouTube que sigo que es desarrollador.net
00:24:36
y decía, yo no lo sé exactamente, pero decía que es una arquitectura que se utiliza mucho en .NET
00:24:51
pero en otros lenguajes no se utiliza mucho.
00:25:02
Por lo que decía. El tema de la integración con NET8, pues yo creo que es, bueno, quitando todos los problemas a nivel conceptual, está bien almoldada por el tema, sobre todo por el tema que NET8 tiene integración, inyección de dependencia nativa.
00:25:08
entonces eso a la hora de
00:25:34
de
00:25:36
de inyectar las interfaces
00:25:38
con su implementación
00:25:40
lo que he comentado antes en la clase
00:25:42
program del proyecto
00:25:44
y que te cree esos objetos
00:25:46
lo veo que está muy bien
00:25:48
los que lo han
00:25:52
creado lo que sea
00:25:54
está muy bien encajado
00:25:55
última pregunta
00:25:58
porque ya nos hemos pasado el tiempo así
00:26:02
Te quería preguntar un poco en la misma línea donde tú mismo enfocas a este proyecto inicialmente haciendo una arquitectura limpia y como sabes una de las cosas es que el predicamento es que sea independiente del framework.
00:26:04
Entonces, ¿crees que el desarrollo que has hecho, a pesar de intentar hacerlo con esto en mente, tiene algunas dependencias, tanto de la estructura de base de datos, algunos componentes o del propio framework?
00:26:25
Sí, sí, no te sabría decir muy bien porque claro, como nunca lo he hecho, es la primera vez que lo hago
00:26:40
y no he utilizado otros frameworks para hacerla, pero hay un punto curioso sobre el tema de Clean Architecture
00:26:48
que, por ejemplo, un proyecto que hay, el proyecto de ejemplo, uno de los proyectos de ejemplo más famosos
00:26:56
que hay en Github, que tiene no sé cuántas estrellas por la comunidad
00:27:03
tiene, si veis el proyecto
00:27:07
tiene una dependencia
00:27:10
está hecho en .NET
00:27:11
e integra
00:27:13
entity framework
00:27:15
pero se puede observar
00:27:18
que tiene una dependencia directa
00:27:20
con la capa de
00:27:22
repositorio
00:27:24
es decir que
00:27:25
para, si extraes ese
00:27:29
framework
00:27:31
si extraes ese entity framework
00:27:32
tendrías que
00:27:35
cambiar, bueno, que hacer cambios en varios puntos de la aplicación
00:27:37
para quitar esa dependencia. Para eso se utiliza
00:27:41
una capa de repositorio, que es lo que he utilizado yo
00:27:45
que es lo que lo hace independiente a ese
00:27:49
framework, a ese entity framework, pero
00:27:52
otro problema hay es que dicen también que poner
00:27:56
una capa de repositorio a entity framework
00:28:01
que es un antipatrón porque
00:28:05
Entity Framework ya tiene una capa de
00:28:07
repositorio que son los DBS
00:28:09
que son las entidades relacionadas
00:28:11
con el contexto de Entity Framework
00:28:13
entonces yo lo he visto en la
00:28:15
comunidad y hay gente que no le gusta
00:28:17
esta arquitectura, hay gente que sí
00:28:19
le gusta, hay gente que dice que bueno
00:28:21
no es tan independiente como
00:28:23
parece
00:28:25
como se puede sentir
00:28:26
Bueno
00:28:28
con esto ya finalizamos
00:28:30
te felicito una vez más por tu proyecto
00:28:32
y nada, voy a cortar ahora mismo la grabación
00:28:35
y hablamos un momento a continuación.
00:28:39
- Idioma/s:
- Autor/es:
- Alberto Corredera
- Subido por:
- Alberto C.
- Licencia:
- Reconocimiento - No comercial
- Visualizaciones:
- 5
- Fecha:
- 11 de junio de 2024 - 21:16
- Visibilidad:
- Clave
- Centro:
- IES CIFP a Distancia Ignacio Ellacuría
- Duración:
- 28′ 43″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 365.75 MBytes