1 00:00:03,569 --> 00:00:21,570 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. 2 00:00:22,570 --> 00:00:35,750 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. 3 00:00:37,090 --> 00:00:42,750 En el aula virtual de proyectos habéis sido informados de los criterios y rúbrica de calificación. 4 00:00:42,750 --> 00:00:47,829 calificación, el orden de la presentación del proyecto es la siguiente. Primero, 15 5 00:00:47,829 --> 00:00:53,030 minutos máximo para defender el proyecto, luego 5 minutos para las preguntas por parte 6 00:00:53,030 --> 00:00:57,829 del tribunal, en este caso soy solo yo, y dicho esto, tu tiempo de exposición comienza 7 00:00:57,829 --> 00:01:01,909 a partir de este momento. Adelante y mucha suerte. 8 00:01:08,370 --> 00:01:18,140 Buenas tardes. Bueno, el proyecto que voy a presentar consiste en el desarrollo de software 9 00:01:18,140 --> 00:01:22,340 utilizando CleanArchitecture y Tecnologías.net. 10 00:01:24,579 --> 00:01:28,299 Básicamente se trata de una aplicación de gestión de contenidos 11 00:01:28,299 --> 00:01:35,700 y demás componentes que he ido investigando para hacer este proyecto. 12 00:01:37,040 --> 00:01:42,420 En la parte de abajo de la presentación podéis ver un repositorio de código público 13 00:01:42,420 --> 00:01:44,799 en el que poder acceder al código Fuen. 14 00:01:44,799 --> 00:02:08,919 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. 15 00:02:08,919 --> 00:02:29,580 Vale, requisitos de software que tenemos que tener en cuenta para realizar este proyecto. 16 00:02:29,580 --> 00:03:03,250 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. 17 00:03:03,250 --> 00:03:13,270 Como IDE de desarrollo de software he utilizado Microsoft Visual Studio 2022, la versión Community, que también es una versión gratuita. 18 00:03:13,270 --> 00:03:35,919 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. 19 00:03:35,919 --> 00:04:03,949 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. 20 00:04:03,949 --> 00:04:36,529 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. 21 00:04:36,529 --> 00:04:43,170 y se basa básicamente en crear sistemas fáciles de entender, mantener y escalar. 22 00:04:44,470 --> 00:04:52,540 Tiene una serie de principios que es independiente de frameworks, independiente de la interfaz de usuario, 23 00:04:52,819 --> 00:04:56,459 independiente de la base de datos e independiente de los sistemas o agentes externos. 24 00:04:56,459 --> 00:05:02,500 Es decir, que en cualquier momento del desarrollo, si se ha llevado a buena práctica este sistema de arquitectura, 25 00:05:02,500 --> 00:05:09,939 podrás cambiar el framework de la aplicación la interfaz de usuario la base de datos o sistemas 26 00:05:09,939 --> 00:05:17,139 externos a la aplicación sí que eso repercuta en lo que viene siendo la aplicación en el sistema 27 00:05:17,139 --> 00:05:32,509 hoy perdón me ha ido de aquí vale a continuación a explicar el modelo de capas que tiene la 28 00:05:32,509 --> 00:05:43,230 arquitectura limpia es el modelo y la estructura organizativa que he integrado en el proyecto en 29 00:05:43,230 --> 00:05:48,629 primer lugar tendríamos la capa de dominio que es el corazón de la arquitectura limpia totalmente 30 00:05:48,629 --> 00:05:56,610 independiente contiene las entidades enumeraciones excepciones clases bases tipos y lógicas específicos 31 00:05:56,610 --> 00:06:03,470 de la capa. La capa de aplicación se implementa en los casos de uso e interactúa con la capa 32 00:06:03,470 --> 00:06:08,110 de dominio. También define las interfaces implementadas por la capa de persistencia 33 00:06:08,110 --> 00:06:12,750 y la capa de infraestructura. Contiene la lógica de aplicación, de teos, mapeadores 34 00:06:12,750 --> 00:06:18,810 y etc. Capa de persistencia nos permite interactuar con bases de datos externas u otro tipo de 35 00:06:18,810 --> 00:06:25,329 repositorios de datos. Básicamente en esta capa es la que tiene la conexión directa 36 00:06:25,329 --> 00:06:30,569 con la base de datos y realiza las consultas y las modificaciones. 37 00:06:31,550 --> 00:06:40,149 La capa de infraestructura contiene clases para acceder a los recursos externos como bases de datos, servicios web, mensajería, etc. 38 00:06:40,629 --> 00:06:43,769 Se basan en interfaces definidas en la capa de aplicación. 39 00:06:43,990 --> 00:06:50,110 En este caso he comentado tanto en la capa de persistencia como en la de infraestructura el uso de base de datos, 40 00:06:50,110 --> 00:06:55,850 pero bueno, lo que vendría siendo la base de datos del core de la aplicación sería la capa de persistencia. 41 00:06:57,209 --> 00:07:03,470 En la capa de presentación representa la interfaz de datos, pudiendo ser una API, una aplicación web, etc. 42 00:07:03,810 --> 00:07:05,970 Y interactúa con la capa de aplicación. 43 00:07:07,870 --> 00:07:18,410 Además, para el proyecto utilizado, una capa transversal, que esto no vendría siendo una capa de la arquitectura limpia de por sí, 44 00:07:18,410 --> 00:07:22,649 pero se puede manejar como una capa de comodín 45 00:07:22,649 --> 00:07:26,910 que nos permitirá interactuar con objetos genéricos 46 00:07:26,910 --> 00:07:28,490 utilizados en las demás capas 47 00:07:28,490 --> 00:07:30,209 como el uso de logins 48 00:07:30,209 --> 00:07:34,449 o a lo mejor un objeto genérico para las respuestas 49 00:07:34,449 --> 00:07:36,350 y enviarlos a la capa de publicación 50 00:07:36,350 --> 00:07:42,610 como se puede ver en la imagen 51 00:07:42,610 --> 00:07:44,449 podemos observar 52 00:07:44,449 --> 00:07:54,490 que las capas tienen una dependencia hacia adentro, es decir, la capa de dominio no depende de las capas externas, es al revés. 53 00:07:54,490 --> 00:08:07,589 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. 54 00:08:07,589 --> 00:08:18,649 Entre una de las desventajas que puede tener este sistema de arquitectura es que puede decirse que tiene demasiada burocracia 55 00:08:18,649 --> 00:08:22,990 Se tienen que crear muchas carpetas, funciona todo con interfaces 56 00:08:22,990 --> 00:08:37,029 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 57 00:08:37,029 --> 00:08:49,370 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. 58 00:08:54,769 --> 00:09:03,769 Además, para la realización de la arquitectura limpia hay que utilizar una serie de patrones de diseño. 59 00:09:03,769 --> 00:09:27,649 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. 60 00:09:27,649 --> 00:09:50,250 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. 61 00:09:50,250 --> 00:10:07,389 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. 62 00:10:07,389 --> 00:10:15,190 Lo hacemos a través del constructor y permite la modularidad y el desacoplamiento de objetos. 63 00:10:16,350 --> 00:10:30,990 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. 64 00:10:30,990 --> 00:10:35,710 Y en esa clase se inyectan los objetos. 65 00:10:36,210 --> 00:10:45,009 Según los tiempos de vida, bueno, estos objetos se llaman servicios y según el tiempo de vida pueden ser de tres tipos, 66 00:10:45,929 --> 00:10:52,649 que vendría siendo scope, que son servicios creados por cada request, singleton, 67 00:10:53,309 --> 00:10:56,990 una y sola distancia compartida durante todo el flujo de la aplicación, 68 00:10:56,990 --> 00:11:02,450 y Transient una nueva instancia creada cada vez que se requiera. 69 00:11:02,850 --> 00:11:08,669 Resumiendo un poco, yo si tengo un objeto en el que le hice una inyección de dependencias 70 00:11:08,669 --> 00:11:18,009 en la clase Program y la pongo de tipo Transient, cada vez que se requiera ese objeto 71 00:11:18,009 --> 00:11:20,169 se va a crear una instancia de él. 72 00:11:25,899 --> 00:11:30,059 Pasando con lo siguiente, voy a hablar un poquito de Azure DevOps. 73 00:11:30,059 --> 00:11:35,139 Azure DevOps es un conjunto de herramientas y servicios en la nube de Microsoft 74 00:11:35,139 --> 00:11:42,860 Tiene una serie de componentes principales como Azure Boards para la planificación y seguimiento del trabajo 75 00:11:42,860 --> 00:11:46,039 Azure Reports para la gestión del código fuente 76 00:11:46,039 --> 00:11:50,139 Este código fuente puede estar hecho en JIT o también en Team Foundation 77 00:11:50,139 --> 00:11:54,019 Yo en mi caso para el proyecto lo he hecho en JIT 78 00:11:54,019 --> 00:11:58,600 Azure Pipelines para automatizar compilaciones, pruebas y despliegues 79 00:11:58,600 --> 00:12:03,259 Azure Test Plane para pruebas y gestión de calidad 80 00:12:03,259 --> 00:12:08,059 y Azure Artifacts para la gestión de librerías y dependencias 81 00:12:08,059 --> 00:12:15,580 Está muy enfocado Azure DevOps también para el tema de la integración continua 82 00:12:15,580 --> 00:12:20,659 es decir, que yo puedo tener un servidor en el que tengo un agente 83 00:12:20,659 --> 00:12:26,480 creado con el runtime del SDK, por ejemplo, de .NET 84 00:12:26,480 --> 00:12:49,379 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. 85 00:12:49,379 --> 00:13:15,240 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, 86 00:13:15,240 --> 00:13:27,279 en el cual puedes crear tareas, asignar desarrollos evolutivos a un desarrollador y demás. 87 00:13:27,519 --> 00:13:33,480 Ahí he puesto un ejemplo de las tareas que me he creado yo para organizarme en el proyecto. 88 00:13:38,309 --> 00:13:38,909 NETBLADZOR. 89 00:13:38,909 --> 00:13:55,559 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. 90 00:13:55,559 --> 00:14:15,500 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. 91 00:14:15,500 --> 00:14:42,960 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. 92 00:14:42,960 --> 00:14:47,039 Los modos de funcionamiento de Blazor 93 00:14:47,039 --> 00:14:49,899 Existen tres modos de funcionamiento 94 00:14:49,899 --> 00:14:53,120 Uno es Blazor Server 95 00:14:53,120 --> 00:14:58,399 En el cual la lógica de la aplicación se ejecuta en el servidor 96 00:14:58,399 --> 00:15:01,519 Mediante una conexión SILINAR AR 97 00:15:01,519 --> 00:15:05,460 Para la comunicación en tiempo real entre el servidor y cliente 98 00:15:05,460 --> 00:15:11,159 Es decir, para Blazor Server la comunicación es en tiempo real 99 00:15:11,159 --> 00:15:17,419 no puedes realizar ninguna acción offline en el proyecto 100 00:15:17,419 --> 00:15:23,600 y bueno, entre otras cosas que ahora enseñaré. 101 00:15:24,220 --> 00:15:29,700 Blazor WebAssembly es un código fuente compilado en el navegador. 102 00:15:29,700 --> 00:15:35,519 Es decir, cuando yo tengo una aplicación que funciona con Blazor WebAssembly 103 00:15:35,519 --> 00:15:39,919 esa parte de WebAssembly se compila en el navegador. 104 00:15:39,919 --> 00:16:00,220 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. 105 00:16:00,220 --> 00:16:19,059 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. 106 00:16:23,159 --> 00:16:29,860 Aquí podemos observar una tabla comparativa de las diferencias entre las versiones de Blazor. 107 00:16:29,860 --> 00:16:32,200 Disculpa, David 108 00:16:32,200 --> 00:16:34,960 Llevamos ya unos 15 minutos 109 00:16:34,960 --> 00:16:37,399 Por si quieres ir un poquito 110 00:16:37,399 --> 00:16:39,440 Agilizar hacia las conclusiones 111 00:16:39,440 --> 00:16:41,700 Hay un poco de flexibilidad 112 00:16:41,700 --> 00:16:43,460 Pero vamos, por irnos 113 00:16:43,460 --> 00:16:43,919 Vale 114 00:16:43,919 --> 00:16:45,779 Vale, vale 115 00:16:45,779 --> 00:16:51,110 Vale, voy a hablar un poco de 116 00:16:51,110 --> 00:16:52,610 NF8 117 00:16:52,610 --> 00:16:55,350 NF8 es el 118 00:16:55,350 --> 00:16:57,129 Framework utilizado para el proyecto 119 00:16:57,129 --> 00:16:59,690 Para la parte de servidor, es multiplataforma 120 00:16:59,690 --> 00:17:01,389 Tiene 121 00:17:01,389 --> 00:17:04,349 mejor rendimiento y consumo que otras versiones 122 00:17:04,349 --> 00:17:06,930 de Net Framework, tiene integración con Azure, 123 00:17:07,289 --> 00:17:09,750 Docker y luego, bueno, utiliza 124 00:17:09,750 --> 00:17:13,150 el Netcore Routime, tiene bibliotecas 125 00:17:13,150 --> 00:17:16,130 nativas y luego el SDK. 126 00:17:17,789 --> 00:17:19,289 Voy a pasar a hablar de 127 00:17:19,289 --> 00:17:22,309 Nugget.org. Nugget.org es un repositorio en línea gratuito 128 00:17:22,309 --> 00:17:25,309 y de código abierto para la distribución y administración de paquetes 129 00:17:25,309 --> 00:17:28,069 Nugget. Vale, es simplemente un gestor de 130 00:17:28,069 --> 00:17:31,230 librerías en el que está totalmente integrado con 131 00:17:31,230 --> 00:17:44,230 Visual Studio. Aquí podemos observar una captura de Nugget integrado en Visual Studio y podemos 132 00:17:44,230 --> 00:17:53,630 observar varias bibliotecas. Entity Framework Core. Entity Framework Core es un ORM para trabajar con 133 00:17:53,630 --> 00:18:05,309 base de datos usando objetos.net. En este caso, lo he utilizado para hacer las conexiones 134 00:18:05,309 --> 00:18:13,509 con la base de datos. A partir de Entity Framework puedes realizar la gestión del esquema de 135 00:18:13,509 --> 00:18:23,700 base de datos a lo largo del ciclo de vida de la aplicación. Codefresh es el sistema 136 00:18:23,700 --> 00:18:31,099 que he utilizado para la gestión de base de datos, a través de este modelo lo que hacemos 137 00:18:31,099 --> 00:18:38,019 es que creamos la base de datos a partir de las clases entidad que tenemos en nuestro 138 00:18:38,019 --> 00:18:47,140 proyecto de software y a través de una serie de comandos recopilamos esas entidades y Entity 139 00:18:47,140 --> 00:18:54,160 framework nos crea una migración que la podemos ejecutar para sincronizar la base de datos con 140 00:18:54,160 --> 00:19:05,539 las entidades del proyecto. Tenemos también Moot Blazor, que es un framework para Blazor y 141 00:19:05,539 --> 00:19:11,299 componentes Razor que he utilizado. Simplemente te ayuda a crear una interfaz de usuario 142 00:19:11,299 --> 00:19:19,920 fácil de manipular y de desarrollar, permite personalizar temas a través de templates, 143 00:19:19,920 --> 00:19:28,599 tiene una API, también tiene objetos en .NET que puedes modificarlos y demás. 144 00:19:30,579 --> 00:19:35,779 Otro componente que he utilizado es Atom Mapper, que es una librería de mapeo de objetos en .NET. 145 00:19:35,779 --> 00:19:43,599 Define mapeos en una configuración centralizada, realiza mapeo automático basado en convenciones de nomenclatura 146 00:19:43,599 --> 00:19:49,220 Personalización de mapeos, soporte para una amplia variedad de escenarios de mapeo 147 00:19:49,220 --> 00:19:53,779 Y una optimización para el proceso de mapeo para reducir la carga de rendimiento 148 00:19:53,779 --> 00:20:05,059 Al final lo utilizado es para mapear los DTOs con las entidades que están sincronizadas en el Entity Framework de la aplicación 149 00:20:05,059 --> 00:20:29,240 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. 150 00:20:29,240 --> 00:20:36,119 Despliegue rápido, facilita la escalabilidad y mejora el trabajo con integración continua. 151 00:20:37,200 --> 00:20:58,740 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. 152 00:20:58,740 --> 00:21:20,160 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. 153 00:21:23,099 --> 00:21:24,380 Y eso sería todo, muchas gracias. 154 00:21:26,079 --> 00:21:30,380 Muchas gracias David. Yo ahora voy a pasar a hacerte algunas preguntas. 155 00:21:30,819 --> 00:21:54,700 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. 156 00:21:54,700 --> 00:22:02,940 Pero, bueno, me gustaría preguntarte, en primer lugar, o sea, ¿cuáles son las principales dificultades que te has encontrado en este proyecto? 157 00:22:04,440 --> 00:22:05,839 Muchas, han sido muchas. 158 00:22:08,539 --> 00:22:16,779 La que más ha sido las migraciones de CodeFields con Entity Framework, porque, claro, para realizar las migraciones, 159 00:22:16,779 --> 00:22:20,779 No solo es criarte las clases 160 00:22:20,779 --> 00:22:22,339 Entidad, la base de datos 161 00:22:22,339 --> 00:22:24,539 También tienes que configurar una serie 162 00:22:24,539 --> 00:22:26,759 De cosas como las relaciones 163 00:22:26,759 --> 00:22:28,680 Las primary case 164 00:22:28,680 --> 00:22:30,039 Desde GESAT 165 00:22:30,039 --> 00:22:32,119 Y era una cosa que nunca había hecho 166 00:22:32,119 --> 00:22:34,380 Entonces al intentar 167 00:22:34,380 --> 00:22:35,960 Realizar la migración pues 168 00:22:35,960 --> 00:22:38,319 Me daban errores, no conseguía armar 169 00:22:38,319 --> 00:22:39,680 La aplicación 170 00:22:39,680 --> 00:22:42,299 Y otros errores que he tenido 171 00:22:42,299 --> 00:22:43,680 También ha sido con 172 00:22:43,680 --> 00:22:45,779 Bueno, en el desarrollo 173 00:22:45,779 --> 00:22:47,980 en el tema de la inyección de dependencias 174 00:22:47,980 --> 00:22:49,759 que siempre había alguna dependencia 175 00:22:49,759 --> 00:22:51,940 que claro, no conseguía 176 00:22:51,940 --> 00:22:53,980 inyectar en la ejecución 177 00:22:53,980 --> 00:22:55,900 de la aplicación y me fallaban las 178 00:22:55,900 --> 00:22:57,960 interfaces por el modelo de arquitectura 179 00:22:57,960 --> 00:22:59,819 y luego también 180 00:22:59,819 --> 00:23:01,839 con Docker a la hora de crear 181 00:23:01,839 --> 00:23:03,200 el contenedor Docker 182 00:23:03,200 --> 00:23:05,380 Una cosa, si te parece David 183 00:23:05,380 --> 00:23:06,759 puedes dejar de compartir 184 00:23:06,759 --> 00:23:09,359 la pantalla un momento 185 00:23:09,359 --> 00:23:10,599 y así ya 186 00:23:10,599 --> 00:23:13,980 se queda grabada en otras imágenes 187 00:23:13,980 --> 00:23:18,240 Vale, perfecto 188 00:23:18,240 --> 00:23:35,140 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. 189 00:23:35,480 --> 00:23:43,460 Entonces, te quería preguntar si la has llegado a utilizar para tu propio trabajo o simplemente lo has puesto como un ejemplo. 190 00:23:43,460 --> 00:24:03,460 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. 191 00:24:03,460 --> 00:24:14,660 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%. 192 00:24:14,660 --> 00:24:36,200 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? 193 00:24:36,200 --> 00:24:51,380 El tema de Clean Architecture, el otro día vi un vídeo de un YouTube que sigo que es desarrollador.net 194 00:24:51,380 --> 00:25:02,720 y decía, yo no lo sé exactamente, pero decía que es una arquitectura que se utiliza mucho en .NET 195 00:25:02,720 --> 00:25:07,819 pero en otros lenguajes no se utiliza mucho. 196 00:25:08,279 --> 00:25:34,049 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. 197 00:25:34,049 --> 00:25:36,990 entonces eso a la hora de 198 00:25:36,990 --> 00:25:38,589 de 199 00:25:38,589 --> 00:25:40,710 de inyectar las interfaces 200 00:25:40,710 --> 00:25:42,049 con su implementación 201 00:25:42,049 --> 00:25:44,730 lo que he comentado antes en la clase 202 00:25:44,730 --> 00:25:46,269 program del proyecto 203 00:25:46,269 --> 00:25:48,230 y que te cree esos objetos 204 00:25:48,230 --> 00:25:52,809 lo veo que está muy bien 205 00:25:52,809 --> 00:25:54,730 los que lo han 206 00:25:54,730 --> 00:25:55,970 creado lo que sea 207 00:25:55,970 --> 00:25:58,950 está muy bien encajado 208 00:25:58,950 --> 00:26:02,599 última pregunta 209 00:26:02,599 --> 00:26:04,319 porque ya nos hemos pasado el tiempo así 210 00:26:04,319 --> 00:26:25,420 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. 211 00:26:25,420 --> 00:26:40,960 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? 212 00:26:40,960 --> 00:26:48,880 Sí, sí, no te sabría decir muy bien porque claro, como nunca lo he hecho, es la primera vez que lo hago 213 00:26:48,880 --> 00:26:56,720 y no he utilizado otros frameworks para hacerla, pero hay un punto curioso sobre el tema de Clean Architecture 214 00:26:56,720 --> 00:27:03,279 que, por ejemplo, un proyecto que hay, el proyecto de ejemplo, uno de los proyectos de ejemplo más famosos 215 00:27:03,279 --> 00:27:07,299 que hay en Github, que tiene no sé cuántas estrellas por la comunidad 216 00:27:07,299 --> 00:27:10,539 tiene, si veis el proyecto 217 00:27:10,539 --> 00:27:11,559 tiene una dependencia 218 00:27:11,559 --> 00:27:13,779 está hecho en .NET 219 00:27:13,779 --> 00:27:15,680 e integra 220 00:27:15,680 --> 00:27:18,039 entity framework 221 00:27:18,039 --> 00:27:20,559 pero se puede observar 222 00:27:20,559 --> 00:27:22,019 que tiene una dependencia directa 223 00:27:22,019 --> 00:27:24,220 con la capa de 224 00:27:24,220 --> 00:27:25,119 repositorio 225 00:27:25,119 --> 00:27:29,039 es decir que 226 00:27:29,039 --> 00:27:31,900 para, si extraes ese 227 00:27:31,900 --> 00:27:32,799 framework 228 00:27:32,799 --> 00:27:35,759 si extraes ese entity framework 229 00:27:35,759 --> 00:27:37,180 tendrías que 230 00:27:37,180 --> 00:27:41,640 cambiar, bueno, que hacer cambios en varios puntos de la aplicación 231 00:27:41,640 --> 00:27:45,380 para quitar esa dependencia. Para eso se utiliza 232 00:27:45,380 --> 00:27:49,480 una capa de repositorio, que es lo que he utilizado yo 233 00:27:49,480 --> 00:27:52,900 que es lo que lo hace independiente a ese 234 00:27:52,900 --> 00:27:56,480 framework, a ese entity framework, pero 235 00:27:56,480 --> 00:28:01,480 otro problema hay es que dicen también que poner 236 00:28:01,480 --> 00:28:05,799 una capa de repositorio a entity framework 237 00:28:05,799 --> 00:28:07,539 que es un antipatrón porque 238 00:28:07,539 --> 00:28:09,759 Entity Framework ya tiene una capa de 239 00:28:09,759 --> 00:28:11,299 repositorio que son los DBS 240 00:28:11,299 --> 00:28:13,859 que son las entidades relacionadas 241 00:28:13,859 --> 00:28:15,519 con el contexto de Entity Framework 242 00:28:15,519 --> 00:28:17,720 entonces yo lo he visto en la 243 00:28:17,720 --> 00:28:19,819 comunidad y hay gente que no le gusta 244 00:28:19,819 --> 00:28:21,779 esta arquitectura, hay gente que sí 245 00:28:21,779 --> 00:28:23,640 le gusta, hay gente que dice que bueno 246 00:28:23,640 --> 00:28:25,519 no es tan independiente como 247 00:28:25,519 --> 00:28:26,339 parece 248 00:28:26,339 --> 00:28:28,599 como se puede sentir 249 00:28:28,599 --> 00:28:30,000 Bueno 250 00:28:30,000 --> 00:28:32,900 con esto ya finalizamos 251 00:28:32,900 --> 00:28:35,779 te felicito una vez más por tu proyecto 252 00:28:35,779 --> 00:28:39,539 y nada, voy a cortar ahora mismo la grabación 253 00:28:39,539 --> 00:28:41,819 y hablamos un momento a continuación.