Saltar navegación

Defensa Proyecto David Amador DAW con Alberto Corredera como tutor.

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 11 de junio de 2024 por Alberto C.

5 visualizaciones

Defensa Proyecto David Amador DAW con Alberto Corredera como tutor.

Descargar la transcripción

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 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:
es
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

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid