[0:00] Hola deps Bueno Este es quizás uno de [0:04] los contenidos que más nos habíais [0:07] estado pidiendo a lo largo del Canal y [0:11] Bueno aquí estamos otra vez al comienzo [0:14] de un largo camino puesto que una vez [0:18] más nos vamos a meter en el lío de [0:20] grabar un nuevo curso profesional en [0:24] este caso larabel dd y hexagonal Y es [0:27] que bueno era que teníamos pendient hace [0:31] mucho tiempo y el otro día no recuerdo [0:35] muy bien cuándo estaba viendo por ahí [0:37] YouTube y en los shorts me salió este [0:39] vídeo de aquí una de las cosas que veo [0:41] que me da un poco de pena Es que me da [0:43] la sensación que no podemos hacer [0:44] contenido que se salga de lo básico [0:46] porque entonces Os salís todos corriendo [0:48] entonces luego la gente me dice Ah vamos [0:49] a hacer arquitectura exagonal Sí hago [0:52] arquitectura exagonal y estoy aquí solo [0:53] haciendo arquitectura sagon Y bueno pues [0:56] eh lo estaba viendo y digo pues es una [1:00] Lástima que Que poca gente se anime a a [1:03] grabarlo ya sea [1:04] por por número de gente que pueda estar [1:07] interesado en seguir lo demás [1:09] afortunadamente nosotros no tenemos ese [1:12] problema porque ya sabéis que esto no es [1:15] no es una profesión es simplemente el [1:17] ánimo de compartir con vosotros Así que [1:20] listo no le demos más vueltas curso de [1:24] larabel de de day hexagonal profesional [1:26] vamos a [1:28] [Música] [1:40] muy bien y antes de comenzar vamos a [1:42] establecer a una serie de requisitos que [1:44] van a ser necesarios para poder seguir [1:46] este curso con normalidad Y es que [1:48] tenéis que tener en cuenta que este no [1:50] es un curso básico sino que vamos a [1:52] necesitar ciertos conocimientos previos [1:55] para poder seguirlo con [1:57] normalidad lo primero que vamos a [1:59] necesitar evidentemente vamos a estar [2:01] aplicando arquitectura exagonal y DVD a [2:04] en este caso larabel por lo tanto [2:07] necesitamos conocer l arabel si no lo [2:10] conocéis os lo dejo por aquí y si no en [2:12] la descripción os aparecerá el enlace al [2:15] curso profesional del arabel que tenemos [2:17] en el canal ya sabéis que todo es [2:19] totalmente gratuito podéis verlo sin [2:21] problemas todo en YouTube muy bien Si ya [2:25] conocemos la arabel y hemos visto ese [2:28] curso que sería el necesario ya sea [2:31] porque lo habéis superado o bueno porque [2:35] ya conocíais la arabel con [2:36] anterioridad y evidentemente todos los [2:40] requisitos que este tiene el siguiente [2:42] paso sería conocer los principios del [2:45] domain driven design y de la [2:47] arquitectura [2:49] hexagonal Si no los conocéis Pues [2:52] también tenéis un vídeo en el canal [2:54] también os lo dejo por aquí o en la [2:56] descripción os aparecerá para que podáis [3:00] ver arquitectura hexagonal y domain [3:03] driving design los fundamentos teóricos [3:05] es un vídeo muy cortito para que sepamos [3:08] en todo momento de qué estamos hablando [3:10] y sepamos ubicarnos dentro del contexto [3:12] de trabajo que vamos a estar realizando [3:15] por último Y de forma transversal vamos [3:17] a estar utilizando los principios solid [3:19] a lo largo de todo el curso Si no los [3:23] conoces y este ya por último también te [3:26] lo dejo por ahí o en la descripción para [3:28] que puedas verlo así pues si tenemos los [3:31] conocimientos necesarios sobre el arabel [3:34] en este caso el el framework de trabajo [3:37] y todos los requerimientos previos que [3:39] este tiene si conocemos solid Y si [3:43] conocemos los fundamentos de la [3:46] arquitectura que vamos a estar [3:47] trabajando eso es suficiente para poder [3:50] seguir este contenido y si te falta [3:54] Cualquiera de esos conocimientos [3:55] Recuerda que ahí tienes los vídeos para [3:57] verlos cuando quieras y poder comenzar [4:00] si no estás seguro de si tienes el nivel [4:03] necesario Pues yo te annimo a que [4:04] empieces a verlo y si ves que te quedas [4:08] cojo en alguna parte pues siempre tienes [4:10] ahí esas listas de reproducción Para [4:12] volver a los basics cuando lo [4:17] necesites aclarado esto quiero también [4:21] poner [4:23] otro punto importante que creo que es [4:26] relevante porque es una consulta que [4:28] suele aparecer mucho en los los [4:30] comentarios del Canal y Es sobre las [4:32] versiones de trabajo en este caso [4:35] nosotros vamos a estar trabajando con la [4:37] versión del arabel 12 que a día de esta [4:39] grabación es la última que hay la [4:42] larabel 12 sin embargo tened en cuenta [4:45] que el equipo de larabel saca Major [4:48] version cada 6 meses por lo tanto es [4:51] potencialmente posible que cuando veas [4:53] este vídeo la ya estemos en la versión [4:56] 13 o incluso en la 14 porque al final si [4:59] sale meor versión cada 6 meses el ritmo [5:02] es muy elevado sin embargo no tienes que [5:06] preocuparte por esos problemas no tienes [5:08] por qué preocuparte en exceso por la [5:11] versión en la cual estás trabajando [5:13] nosotros estamos ubicando conceptos que [5:16] son transversales al framework y que no [5:20] están sujetos o no son muy sensibles [5:23] a modificaciones que pudiesen estar [5:26] afectándolo lo mismo con el curso de [5:29] Lara del profesional del árabe del [5:30] básico que si no recuerdo mal estaba con [5:32] la versión 10 creo recordar o parte con [5:35] la nueve y parte con la [5:36] 10 y no hay ningún problema al final los [5:40] fundamentos son fundamentos y siguen [5:42] estando ahí y en el caso de arquitectura [5:45] exagonal y dd va a ocurrir lo mismo todo [5:47] lo que vamos a estar aplicando dentro [5:49] del contenido va a seguir estando ahí en [5:51] las nuevas versiones porque no estamos [5:53] trabajando partes muy sensibles no [5:57] obstante si por supuesto en algún [5:59] momento momento saliese alguna [6:01] actualización en estos Major version que [6:03] estuviese afectando de una forma directa [6:05] a lo que estáis viendo pues en esta [6:07] misma lista de reproducción os [6:09] encontraría siempre por ahí algún vídeo [6:11] de actualización explicando esos cambios [6:14] que pudiese haber y Este es otro de los [6:18] puntos que quería comentaros tenéis por [6:22] ahí la lista de reproducción yo os [6:24] recomiendo que la guardéis para que [6:26] podáis ir viendo las diferentes clases y [6:30] así no os perdáis nada el ritmo de [6:33] publicación si lo estás viendo en [6:34] directo va a ser todos los lunes a las 8 [6:39] hora española ese va a ser el ritmo de [6:42] publicación y me gustaría si el tiempo [6:46] nos respeta y dentro de lo posible que [6:49] se organizas en ocho sesiones ocho [6:53] sesiones de Cara a que quizás nos puedan [6:57] quedar un poquito más extensas Esta es [6:59] el esta primera clase simplemente la [7:01] toma de contacto pero las posteriores [7:03] quizás sean más extensas duren más de [7:06] una hora que es más o menos el formato [7:08] al cual nos hemos [7:09] intentado ajustar los cursos [7:11] profesionales el de 50 horas de View y [7:14] el de arabel ambos tienen ese formato [7:18] más o menos de una intentar hacer una [7:20] hora por vídeo pero [7:22] eh Claro si hacemos un proyecto como [7:24] hicimos en View de 50 horas Pues nos va [7:27] a quedar al final [7:30] un contenido muy extenso en el tiempo y [7:32] al final de viw fueron más de un año [7:35] Casi casi algo más de un año grabando [7:37] clases y no es mi intención mi intención [7:40] es que sea se ejecute en un tiempo más [7:43] reducido Yo creo que si lo hacemos en [7:44] ocho sesiones lo estamos encajando si si [7:47] publicamos uno a la semana durante ocho [7:49] sesiones pues van a ser dos meses y en [7:52] dos meses tenemos el curso terminado y [7:55] podemos movernos hacia otros temas como [7:58] podría ser tenemos dos todavía pendiente [8:00] dentro del larabel que es Quizá el tema [8:02] que no nos trata dentro de aquí tenemos [8:04] todavía pendiente cqrs tenemos todavía [8:07] pendiente microservicios tenemos todavía [8:11] eh [8:14] pendiente d design y un poquito de por [8:17] ahí conexiones con Rabbit and que y [8:18] algunas cosillas que hemos hablado en [8:21] alguna ocasión todo eso pues irá [8:22] viniendo y para que pueda ir viniendo [8:24] Necesitamos ir limpiando parrilla Así [8:26] que vamos a intentar encerrarlo en esas [8:29] 8 semanas muy bien dicho Todo esto Ahora [8:33] sí manos al código a [8:38] [Música] [8:44] programar y gracias a la magia de la [8:47] edición ya nos encontramos aquí en las [8:49] oficinas de 64 para continuar avanzando [8:52] en la parte de codificación de toda la [8:53] solución y lo primero que vamos a estar [8:55] realizando va a ser la generación de un [8:57] boiler Plate que nos pueda dar aporte a [9:00] todos los desarrollos que vayamos a [9:02] estar haciendo de aquí en adelante con [9:04] este patrón de diseño y arquitectura Y [9:07] es que si lo pensamos o lo tenemos en [9:10] cuenta larabel por defecto está pensado [9:13] estructuralmente para soportar una [9:15] arquitectura de nvc o modelo vista [9:17] controlador y nuestro interés va a ser [9:19] adaptarla para que se ajuste mejor a [9:23] cualquier desarrollo en este caso [9:26] hexagonal punto importante también sobre [9:28] este aspecto Y es que yo voy a estar [9:30] hablando tanto de domain driven design [9:33] como hexagonal que son ambas [9:35] eh Son ambas soluciones las que vamos a [9:38] ir eh desarrollando a lo largo del [9:40] contenido pero tenemos que ser [9:43] consciente de que aunque ambos conceptos [9:46] son complementarios y funcionan muy bien [9:48] Juntos son conceptos distintos dom Mind [9:50] driven design es un patrón de diseño y [9:53] arquitectura hexagonal es un patrón de [9:55] arquitectura son cosas distintas en la [9:57] caja de descripción os dejo la [9:59] información de los fundamentos teóricos [10:01] y la diferencia por si queréis echarle [10:04] un vistazo podáis tenerla a mano y que [10:06] no confundamos terminología no obstante [10:09] nosotros a lo largo de este contenido [10:11] vamos a estar viendo ambas soluciones y [10:13] vamos a estar integrando los dos pero [10:14] para que sepamos diferenciarlos Muy bien [10:17] pues como decía lo primero que vamos a [10:18] hacer es un Boiler Plate vamos a hacer [10:20] una estructura que nos pueda servir para [10:24] adaptar L arabel y utilizar todo este [10:26] tipo de patrones en esta eh primera fase [10:29] o fase inicial nosotros vamos a estar [10:33] construyéndolo de tal forma que nos dé [10:35] soporte a la estructura básica y en las [10:38] lecciones finales vamos a estar [10:40] adaptándolo también para eh algunos de [10:43] vosotros Probablemente lo sabrá los [10:45] hacer las adaptaciones sobre el orm para [10:50] trabajar también no solo con en este [10:52] caso con eloquent sino con algún [10:54] doctrine o alguna versión más dat mapper [10:56] que también nos pueda funcionar mejor en [10:59] en esta situación pero todo eso lo [11:01] iremos viendo más adelante de momento [11:03] vamos a comenzar por el principio voy a [11:05] hacer por aquí una un [11:10] directorio para comenzar a trabajar y lo [11:13] que voy a hacer es dentro del [11:19] mismo lo tenemos por aquí vamos a [11:22] abrirlo con visual Studio code y vamos a [11:24] crear un primer proyecto sobre el cual [11:27] ir aplicando toda esta estructura bien [11:30] comenzamos por el principio me vengo por [11:33] aquí al [11:37] terminal Y como decía el primer paso va [11:41] a ser [11:45] generar nuestro proyecto que en este [11:48] caso yo lo voy a llamar d boiler Plate [11:50] puesto que es lo que vamos a estar [11:53] realizando como siempre aquellos que ya [11:55] habéis seguido alguno de nuestros [11:57] contenidos no os preocupéis por los [11:59] mensajes que me aparecen aquí en consola [12:01] a vosotros no os saldrán es porque yo [12:03] tengo habilitado eh esta parte de [12:05] verbosidad sobre la parte de preciados [12:07] porque lo utilizamos nosotros en la [12:10] empresa bien eh dentro de las preguntas [12:14] que me va a estar haciendo el arabel [12:17] Installer no vamos a usar ningún starter [12:19] kit vamos a dejarlo todo de base y da [12:22] igual el framework que eh especifiques [12:26] para los test puesto que los test los [12:29] trataremos de forma aparte ahora mismo [12:31] para nuestro boiler Plate nos da igual [12:33] yo voy a poner php unit pero podríais [12:36] estar colocando pest o el que prefiráis [12:38] aquí va a ser eh totalmente indiferente [12:41] de hecho esa es quizás una de las [12:45] ventajas que vamos a estar aplicando con [12:47] este tipo de arquitectura y va a ser la [12:49] posibilidad de abstra de todo este tipo [12:51] de instalaciones vamos a dejarlo todo [12:54] preparado vamos a esperar a que finalice [12:57] el scaffolding inicial y ahora sobre [12:59] este scaffolding vamos a estar haciendo [13:01] algunas modificaciones Y es que [13:05] eh cuando estamos trabajando dentro del [13:07] arabel con patrón de arquitectura en vic [13:09] o modelo vista controlador si recordáis [13:11] nosotros tenemos una estructura que está [13:14] 100% acoplada al framework es decir todo [13:17] lo que nosotros vamos a estar trabajando [13:19] va a estar acoplado de de forma [13:23] inherente a toda la estructura del [13:25] framework de trabajo siguiendo los [13:27] patrones que vamos a estar apc and [13:29] nosotros deberíamos evitar el [13:32] acoplamiento tanto a infraestructura [13:35] como también dentro de forma interna el [13:38] acoplamiento de clases o el acoplamiento [13:40] de las diferentes áreas de negocio o [13:43] entidades entonces para poder hacer todo [13:45] esto vamos a necesitar hacer algunas [13:47] modificaciones sobre la estructura de [13:50] larabel entonces una vez una vez se [13:53] finalice lo primero que vamos a estar [13:55] haciendo es ahora que cuando tengamos el [13:58] el el autoload va a ser modificar la [14:01] carpeta de trabajo vamos a en primer [14:04] lugar no mezclar el contenido que [14:06] tenemos con el contenido que ya nos [14:08] ofrece arabel si si estáis habituados [14:11] Pues sabéis que toda la parte que [14:14] correspondería aacen va dentro del [14:17] directorio app o app y nosotros lo que [14:20] vamos a hacer es moverlo hacia un [14:22] directorio nuevo donde vamos a estar [14:24] trabajando de una forma aislada para eso [14:26] vamos a estar eh Pues modificando un [14:29] poquito el en este caso el composer muy [14:32] bien Vamos a esperar a que finalice y [14:35] continuamos muy bien ya ha finalizado el [14:38] scaffolding ya simplemente me pregunta [14:40] eh Qué motor de bases de datos vamos a [14:44] estar utilizando yo en mi caso pues voy [14:46] a marcar squel Lite porque es lo más [14:49] cómodo ahora mismo para comenzar pero [14:51] recordad que en cualquier momento si [14:54] queréis modificarlo pues podemos [14:56] utilizar my squel o cualquiera de otros [14:58] obviamente luego para pasar a a [15:00] producción modificarías ese ese motor [15:03] pero ahora mismo me vale No y bueno me [15:05] pregunta si deseo ejecutar las [15:07] migraciones voy a decirle que sí y Listo [15:10] ya tenemos nuestro eh Pro el scaffolding [15:14] finalizado con nuestro proyecto [15:15] preparado Entonces lo primero que voy a [15:17] hacer antes de nada Y como siempre va a [15:18] ser Acceder al directorio de trabajo [15:21] para poder comenzar a realizar las [15:25] modificaciones y la primera que vamos a [15:27] estar realizando como decía va a es cómo [15:30] vamos a estar afectando a la estructura [15:32] de directorios si os fijáis y lo [15:35] conocemos más que de sobra verdad dentro [15:38] de la estructura de directorios dentro [15:40] del eh directorio app o app lo que [15:43] tenemos es aquí Toda la estructura de lo [15:46] que corresponde al backend de la [15:47] aplicación al igual que por ejemplo las [15:49] vistas las tenemos por aquí dentro de [15:51] los resources muy bien nosotros lo que [15:54] vamos a hacer es desacoplar un poco todo [15:57] lo que vamos a ir realizando ya [15:59] directamente eh del toda la estructura [16:02] incluso del directorio para que luego [16:04] tengamos muy bien diferenciado todo lo [16:06] que hemos ido trabajando nosotros de [16:07] todo lo que el arabel aporta a nivel de [16:10] infraestructura entonces lo que voy a [16:12] hacer es crear un nuevo folder y este [16:15] folder yo lo voy a llamar eh src o [16:18] source o como queráis llamarlo el nombre [16:21] no es relevante podéis llamarlo como [16:22] prefiráis yo estoy acostumbrado a [16:24] llamarlo eh src Ya que es bastante [16:28] descriptivo de lo que vamos a estar [16:30] ubicando dentro de esta parte y son en [16:32] este caso todos nuestros recursos muy [16:36] bien ya lo tenemos por aquí sin embargo [16:38] eh Como bien sabéis cuando nosotros [16:41] creamos aquí un directorio no es [16:44] reconocido por l arabel es decir [16:46] nosotros lo hemos introducido aquí pero [16:48] no forma parte del proyecto necesitamos [16:52] que forme parte del proyecto y para ello [16:54] lo que vamos a estar haciendo es [16:56] modificar nuestro compost ser Jason para [17:00] que pueda indexar toda esta parte del [17:03] contenido que nosotros vamos a estar [17:05] desarrollando aquí en src y de esta [17:07] forma podamos utilizarlo bien si [17:10] acudimos por aquí al autoload que tiene [17:14] el composer Jason este se encarga de [17:17] realizar las cargas para los diferentes [17:20] directorios y fijaos como nos autocarga [17:22] ya o nos mapea ya el directorio de [17:25] App [17:27] nosotros vamos a indicar [17:29] que también queremos mapear el [17:31] directorio [17:36] src y el directorio src que vamos a [17:39] estar mapeando va a ir contra el [17:41] directorio que acabamos de crear que es [17:45] este de [17:46] aquí muy bien ahora además de estar [17:50] tomando el app del directorio app que es [17:53] lo que ya hacía por Norma general además [17:55] va a estar utilizando el src [17:59] que nosotros hemos marcado aquí como src [18:02] Y de esa forma Ya lo tenemos mapeado ya [18:05] podremos hacer el el seguimiento Muy [18:09] bien pues ya tenemos la primera de las [18:12] partes que vamos a ir necesitando ahora [18:16] además de eso vamos a realizar alguna [18:19] modificación adicional para que no solo [18:22] nos mape toda esta parte sino que [18:24] podamos ir trabajando con el eh resto de [18:28] de elementos que vamos a necesitar para [18:30] ir configurando nuestra estructura vamos [18:33] a por [18:34] [Música] [18:40] ello Muy bien pues vamos a continuar [18:42] adaptando nuestra estructura y para [18:44] poder realizarlo lo primero que vamos a [18:46] tener que hacer es entender cuál va a [18:49] ser la estructura de directorios que [18:51] nosotros vamos a estar construyendo [18:53] dentro de ese rc bien la estructura que [18:57] vamos a seguir va a ser la siguiente y [18:58] va ser bastante sencillo de entender [19:01] sobre todo si ya habéis visto el el [19:02] vídeo del de dday hexagonal Y es que lo [19:05] primero que vamos a hacer dentro de src [19:07] o en primer lugar lo que vamos a hacer [19:09] es colocar un directorio por cada [19:12] bounded context es decir por cada [19:15] contexto vamos a crear un eh directorio [19:18] dentro de src recordamos que dentro de [19:22] los bounded context pues vamos a [19:24] entender los diferentes usos que se [19:26] pueden estar dando de nuestra [19:29] plataforma no de nuestro desarrollo como [19:31] podría ser por ejemplo Oye pues voy a [19:33] crear un bounded context para el panel [19:37] de administración o para el admin voy a [19:39] crear un bounded context para el uso de [19:42] este proyecto de la plataforma dentro de [19:44] una web y voy a crear también a lo mejor [19:46] pues no sé un tercer bounded context [19:50] para para landing y material de [19:53] marketing no independiente aquí cada [19:55] cada proyecto tendría su bounded context [19:57] concreto nosotros Pues dentro de la [20:00] estructuración que vamos Air realizando [20:01] voy a usar eso de momento como ejemplo [20:03] para que podamos entender cuál va a ser [20:05] la estructura entonces lo que decía si [20:07] nosotros estamos haciendo vamos a [20:09] suponer por ejemplo pues una plataforma [20:11] de formación una plataforma e-learning [20:14] tipo como la que podría ser además o [20:15] como podría ser cser o como podría ser [20:18] cualquiera de las otras pues lo primero [20:22] que haría sería crear un bounded context [20:25] admin lo voy a llamar así para colocar [20:28] ahí todo lo referente a administración [20:31] después vamos a crear otro bound context [20:34] que en este caso lo voy a llamar cuidado [20:37] que se creen src Ahí está que lo podría [20:40] llamar pues por ejemplo e lms user [20:45] platform o lo que sea es decir en este [20:47] caso pues el contenido del desarrollo [20:51] y voy a llamarlo si queréis platform que [20:54] es más genérico para que lo entendamos [20:56] vale platform de la plataforma y después [20:59] Podría tener otro bounded context pues [21:01] eso para landing marketing y otro tipo [21:04] de elementos entonces cada uno de los [21:06] bounded context lo vamos a generar en [21:08] una carpeta todo esto lo iremos con la [21:11] práctica ejemplificando y veréis que no [21:14] es tan complicado es bastante sencillo [21:16] al final ir diferenciando Cuáles son los [21:18] contextos de uso que va a tener nuestra [21:21] plataforma en este caso pues podemos [21:23] marcar estos tres No ahora supongamos [21:25] que yo inicialmente pues voy a estar [21:27] desarrollando la plataforma en misma y [21:29] ahora aquí dentro de la de de esta [21:33] plataforma voy a definir cada uno de eh [21:37] los módulos que voy a estar trabajando [21:39] cada uno de los elementos cada una de [21:42] las entidades con todo su contexto todo [21:44] esto lo iremos viendo [21:47] en sucesivas eh clases para que podáis [21:51] entender muy bien Cuál es su [21:53] estructura así pues ahora lo que vamos a [21:55] estar haciendo es introducir dentro de [21:58] cada uno de los bounded context los [21:59] diferentes entidades o dominios que [22:01] vamos a tener en cada uno de los [22:03] elementos estas entidades o dominios que [22:06] vamos a [22:07] colocar Aunque ahora para que podamos [22:09] entender la estructura pues vamos a ir [22:11] ubicando una unas cuantas para hacer un [22:14] ejemplo evidentemente luego a la hora de [22:17] desarrollar pues las iremos creando [22:19] conforme las vayamos necesitando en este [22:22] caso ahora mismo yo por ejemplo pues voy [22:24] a suponer de que en esta plataforma [22:26] hubiese el [22:29] curso que tuviese también el usuario por [22:35] ejemplo y pues que hubiese también otro [22:39] que fuesen por ejemplo pues [22:42] certificaciones o diplomas o algo [22:47] así muy bien como ejemplo nos vale no [22:50] tenemos nuestro directorio src y nuestro [22:53] dentro de nuestro directorio src los [22:55] tres bounded context que hemos definido [22:57] el uso de administrador el uso de [22:59] landing y el uso para la plataforma y en [23:02] el caso de la plataforma pues tenemos el [23:04] curso el diploma y el usuario De igual [23:08] forma si yo por ejemplo dentro de la [23:11] Administración dentro del panel de [23:13] administración también tuviese que usar [23:15] por ejemplo el usuario también lo [23:18] generaría dentro es decir también [23:20] crearía aquí el usuario dentro de admin [23:23] o suponiendo que dentro de admin Pues [23:25] también esté por ejemplo eh usando el la [23:29] administración de cursos por ejemplo [23:31] Pues podría tenerlo podría darse ese [23:33] caso de hecho es natural y normal que se [23:36] dé porque aunque se llamen igual van a [23:38] tener un contexto distinto en el caso de [23:41] El bounded context de administración [23:44] pues lo referente a a user pues serán [23:47] acciones para Pues a lo mejor pues [23:49] banear un usuario o eh restablecer la [23:53] contraseña o dentro de los cursos Pues [23:55] será para crear cursos para ah [23:58] visualizar métricas de cursos lo que sea [24:00] dentro de lo que tiene sentido dentro [24:02] del panel de administración mientras que [24:05] dentro de la sección de plataforma por [24:06] ejemplo el la sección de usuario pues [24:10] estará más enfocada a que un usuario [24:12] pueda modificar su perfil por ejemplo o [24:14] dentro de la sección de cursos pues lo [24:16] que tendremos será listar cursos [24:17] apuntarse a un curso etcétera cada uno [24:20] le dará un uso distinto en base a su [24:23] contexto todo esto lo sabemos del vídeo [24:25] de arquitectura hexagonal y ddd bien [24:29] teniendo esto Ahora como ejemplo y ya [24:32] siguiendo esa estructura Pues por cada [24:34] uno de los directorios que vayamos [24:38] construyendo vamos a tener siempre y [24:40] aquí tenemos nuestra capa de [24:45] aplicación nuestra capa de [24:49] dominio y nuestra capa de [24:54] infraestructura qué es lo que Define a [24:58] todo tod lo que estamos trabajando esto [24:59] seguro que lo sabéis del vídeo es uno de [25:02] los puntos más importantes con los que [25:03] tenemos que quedarnos bien [25:07] Entonces esto lo vamos a hacer por cada [25:09] uno de ellos es decir si yo aquí dentro [25:11] de diploma Pues también tendría [25:15] infraestructure structure [25:18] aquí tendría también [25:21] domain tendría también [25:26] application De igual forma con el resto [25:29] igual concurso y también Dentro de este [25:32] contexto con los [25:34] correspondientes muy bien y ahora en [25:37] base a [25:39] eh aquí hay un punto un poco más [25:41] subjetivo y por eso os comento ambas [25:43] soluciones para que escojáis la que [25:45] prefiráis Y es que ahora podemos dentro [25:49] de la capa de dominio de usuario colocar [25:51] Su contenido dentro de la capa de [25:53] aplicación colocar Su contenido y De [25:56] igual forma dentro de la capa de [26:00] infraestructura colocar Su contenido y [26:02] ya está o podemos también Seguir [26:06] generando más estructura de directorios [26:10] para [26:11] diferenciarlo un poquito más No pues por [26:13] ejemplo dentro de la capa de [26:15] infraestructura Pues yo ahora podría [26:17] diferenciar entre Pues no sé pues rutas [26:21] podría diferenciar por ejemplo con [26:23] perdón con repositorio [26:29] podríamos eh eh tener también pues la [26:34] capa de no sé de de [26:37] observadores todo lo que pudiésemos [26:39] necesitar no igual en la capa de domain [26:43] donde podríamos tener por ejemplo la [26:45] entidad las entidades normalmente la [26:48] entidad y podríamos tener por ejemplo [26:51] los value objects [26:58] y De igual forma también en aplicación [27:01] es decir podríamos ir diferenciando [27:04] dentro de cada uno de cada una de las [27:06] capas a su vez cada una de las subpartes [27:08] que estas incluyen o [27:11] no Cómo podemos hacerlo aquí como [27:14] prefiráis no hay ninguna Norma que sea [27:16] mejor que [27:17] otra en mi caso yo suelo generar eh [27:23] subestructura Si veo que los elementos [27:26] Pues bueno pues tienen una estructura [27:29] que lo merece es decir si solo voy a [27:31] tener un par de casos de uso de la [27:35] aplicación con una única con un único [27:38] repositorio y una entidad con tres value [27:42] objects Pues para eso quizá no merece la [27:44] pena eh generar sub eh directorios o [27:49] subestructura en el caso de que eh [27:51] nuestros dominios sean más grandes [27:53] nuestras entidades sean más mayores son [27:54] mayores Bueno en ese caso pues Quizás sí [27:56] que puede ser necesario en en este caso [28:00] Yo a lo largo para seguir una [28:01] metodología dentro de las clases yo sí [28:04] voy a ir generando esos subdirectorios [28:06] asumiendo de que lo que estamos [28:08] desarrollando Pues bueno pudiese tener [28:10] luego muchos adaptadores pudiese tener [28:12] luego mucho contenido no entonces en [28:14] base a eso voy a crear el subdirectorio [28:16] Pero insisto si os sentís más cómodos no [28:19] eh subdividiendo tanto el contenido [28:21] también podéis hacerlo sin ningún [28:24] problema bien hemos tenemos Entonces ya [28:28] eh entendida Cuál va a ser la estructura [28:30] de trabajo ya sabemos cómo vamos a ir [28:32] ubicando cada uno de los elementos [28:35] dentro del directorio src bounded [28:38] context dentro de bounded context los [28:40] diferentes eh dominios con sus este [28:43] application lo escrito [28:45] mal Ahí está con sus eh infraestructura [28:51] dominio y aplicación representando a [28:53] cada una de las tres capas y luego ya [28:54] dentro de cada uno de ellos como queráis [28:56] podéis colocarlo todo dentro o podéis [28:59] también generar subestructuras como [29:01] estoy haciendo yo aquí muy [29:05] bien primera pregunta que os puede [29:07] surgir en este punto y es Eh bueno pues [29:12] una de las cosas que podemos apreciar es [29:15] que la estructuración de cada uno de los [29:17] elementos necesita de múltiples carpetas [29:21] No es simplemente un fichero o lo que [29:23] sea sino que tenemos que colocar [29:25] diferentes eh directorios con [29:28] subdirectorios etcétera y esta tarea se [29:30] puede hacer tediosa [29:34] entonces Cómo podemos [29:36] eh acelerar esto bien os voy a dejar [29:41] en en el la descripción en la cajita de [29:44] descripción un comando que he escrito [29:48] para que nos genere toda esta estructura [29:50] de código sin necesidad de que tengamos [29:54] que estar haciendo cada uno de de los [29:58] directorios cada vez os voy a explicar [30:01] cómo funciona por si queréis utilizarlo [30:03] si no queréis utilizarlo pues no pasa [30:05] nada podéis hacerlo también como [30:07] prefiráis podéis crear vuestros [30:08] directorios lo que más cómodo os resulte [30:11] pero yo os lo voy a pasar porque es muy [30:13] tedioso tener que estar creando [30:15] directorio directorio directorio a veces [30:17] estos directorios Pues nos podemos [30:19] equivocar como me ha ocurrido a mí [30:20] anteriormente y tener un error de [30:22] tipográfico o lo que sea y para evitar [30:25] todo eso pues os voy a dejar ahora un un [30:28] comando para utilizarlo lo primero que [30:29] voy a hacer antes de nada eso sí [30:32] recordad que en la versión eh 12 del [30:36] arabel la parte de appi no nos aparece [30:40] instalada por defecto Así que vamos a [30:42] instalarla El Comando install Api [30:45] siempre lo pongo al [30:47] revés muy bien para dejarla eh instalada [30:52] sin la sección De Api para que este eh [30:55] esta infraestructura del arabel pues lo [30:56] soporte que recorda que ahora desde las [30:59] últimas versiones Hay que hacerlo [31:01] manualmente no viene en el scaffolding [31:03] inicial muy [31:06] bien Esto Ya termina Por [31:09] aquí sí vamos a migrar todo lo [31:12] necesario y vamos a poner el Trade en el [31:17] modelo de [31:18] usuario para dejarlo ya totalmente [31:21] instalado [31:29] como ya sabéis hacer aquí nada [31:35] nuevo muy [31:37] bien y ahora que tenemos esta parte De [31:39] Api como decía ya tenemos eh sabemos [31:42] Cuál va a ser la estructura que vamos a [31:44] desear generar Así que os voy a enseñar [31:47] ese comandito que tengo por ahí me lo [31:49] voy a traer a este proyecto y eh si [31:53] queréis usarlo Pues a vuestra [31:55] disposición queda [31:58] [Música] [32:04] muy bien ya tengo por aquí El Comando [32:07] que tengo creado para esto eh lo podéis [32:11] importar desde desde el repo que tenéis [32:13] en la descripción para os lo podéis [32:15] traer Y si queréis hacerlo manualmente [32:17] es muy sencillo en [32:19] App directorio console si no está lo [32:22] creáis directorio commands si no está lo [32:25] creáis y dentro [32:27] fichero del Comando para poder usarlo [32:32] este Comando es muy sencillo simplemente [32:33] os el la firma es decir lo llamamos con [32:37] make do. ddd y ahora nos va a pedir dos [32:41] elementos en primer lugar el bounded [32:43] context donde tiene que crear el la [32:46] estructura y si no existe la creará Y en [32:50] segundo lugar la entidad que debe crear [32:55] hagamos un ejemplo nosotros por ejemplo [32:57] aquí tenemos en src Pues tenemos la [33:01] sección platform y aquí tenemos por [33:05] ejemplo curso diploma y usuario No pues [33:07] vamos a suponer que tuviésemos otro que [33:12] fuese por ejemplo pues el contexto de [33:15] compra por ejemplo de purchase no vamos [33:18] a hacerlo si yo ahora digo php artisan [33:21] make do pun ddd que es como se llama el [33:27] El Comando que os estoy pasando y a [33:30] partir de ahí le digo Cuál es el bounded [33:32] context donde Quiero crear la estructura [33:35] por ejemplo en este caso la el de [33:38] platform y dentro de platform ahora voy [33:41] a indicarle cuál es la entidad que voy a [33:44] estar desarrollando en este caso pues [33:46] hemos dicho que [33:49] purchase lo ejecutamos perfecto os [33:52] debería ir avisando por aquí de todo lo [33:54] que ha hecho vale porque eso es lo que [33:56] tengo escrito aquí básicamente os va [33:59] informando de que va creando la [34:00] estructura de que va creando cada una de [34:02] las cosas entonces veréis que os va [34:04] avisando de todo lo que ha ido creando Y [34:07] si acudimos ahora a la sección del src [34:11] platform ahora encontramos que nos ha [34:13] creado el purchase y aquí ya os ha [34:15] generado toda la estructura dentro de [34:18] infraestructura os ha creado los [34:20] controladores eventos lisen repositorios [34:22] rutas validadores que son las más [34:25] comunes puede que tengáis más además os [34:28] ha creado el archivo de rutas ya [34:32] preparado con algunos ejemplos [34:34] comentados por si queréis ya des [34:36] comentarlos y usarlos y dentro de [34:39] controladores os ha generado también por [34:41] aquí algún controlador de ejemplo y [34:44] dentro de aplicación no no os genera [34:48] nada no es necesario y dentro de domain [34:50] pues toda su estructura los contratos [34:51] que son las interfaces que vamos a estar [34:53] trabajando las entidades y los value [34:56] objects de tal forma de que a mí este [34:59] Comando cuando lo escribí lo escribí [35:01] sobre todo porque me resultaba Útil para [35:03] no tener que estar copiando directorio [35:06] por directorio una y otra vez Así que si [35:09] os resulta de interés pues os lo dejo [35:11] por ahí para que lo podáis usar pero [35:13] siempre si no lo queréis usar no es [35:16] necesario podéis hacerlo también [35:17] manualmente o acudir a cualquier otro [35:19] tipo de automatización en función al [35:21] editor que estéis utilizando solo un [35:24] punto más dentro de esta parte de de [35:26] estructuración y ya lo dejamos todo [35:29] listo y es que [35:33] em Cómo cargamos las rutas dentro de [35:37] toda esta estructura Pues bien las rutas [35:41] como bien sabéis el punto de entrada es [35:43] este de aquí el rotes punto en este caso [35:46] api.php y si os fijáis El Comando que yo [35:50] os he pasado Ya os va a crear la lectura [35:54] de vuestro fichero de rutas fijaos que [35:57] cuando cu hemos ejecutado el make ddd [35:59] pues os ha creado Aquí esta ruta de aquí [36:02] que os genera el platform purchase que [36:06] está [36:07] apuntando a la estructura que ha creado [36:11] es decir con el comando que os he pasado [36:12] no os tenéis que preocupar de derivar [36:15] las rutas pero es posible que prefiráis [36:19] hacer alguna otra estructura que [36:22] prefiráis hacer una derivación por [36:24] ejemplo que no dependa del Api sino que [36:27] queráis por ejemplo cargarla dentro [36:30] de pues por ejemplo que queréis hacer un [36:32] service Provider o un Root service [36:34] Provider para ello o que a lo mejor [36:37] queráis veniros aquí al boostrap app y [36:40] aquí donde mapea las rutas Pues igual [36:43] que mapea las rutas de web o De Api [36:46] queréis modificarle el mapeo de las [36:49] rutas para que lea directamente las de [36:51] ese directorio como prefiráis lo que sí [36:55] es importante que tengamos en cuenta es [36:56] que los directorios de rutas l arabel [37:00] tiene que conocerlos porque es el punto [37:02] de conexión Vale entonces eso eso debe [37:04] conocerlo Sabiendo eso y teniendo eso [37:07] controlado todo lo demás da igual [37:08] podemos hacerlo como prefiráis en [37:11] cualquier caso no tenéis que preocuparos [37:14] por ello porque lo vamos a ir viendo [37:16] paso a paso todo lo que hemos hecho a lo [37:18] largo de este primer vídeo única y [37:20] exclusivamente es preparar nuestro [37:23] entorno del arabel para que sea un poco [37:26] más cómodo y nos permita trabajar bien [37:29] con las estructuras hexagonales y con [37:32] ddd Entonces ahora sí lo tenemos ya [37:36] preparado tenemos nuestra carpeta src [37:39] que está siendo descubierta por el [37:41] autoload del composer y dentro de ella [37:44] Vamos a ir colocando los bounded context [37:46] con las diferentes entidades con las [37:48] tres capas la de infraestructura la de [37:51] dominio y la de aplicación Esa es la [37:54] base que tenemos que tener Clara y para [37:57] acelerar toda esta parte del proceso [37:59] tenemos este [38:00] eh este Comando que os paso por aquí que [38:04] os comparto por si os resulta de interés [38:06] para no perder mucho tiempo generando [38:08] esas estructuras de forma [38:10] repetitiva bien tenemos Entonces el toda [38:16] la base que necesitamos para poder [38:18] construir nuestros proyectos vamos a ir [38:19] construyendo [38:21] diferentes desarrollos a lo largo de [38:23] esta serie de vídeos por lo tanto yo os [38:25] recomiendo que os hagáis un Boiler Plate [38:28] con esto es decir sub subí al repo esta [38:31] parte que es común y así cada vez que [38:33] empecéis un nuevo proyecto solo tenéis [38:35] que clonar os ese boiler Plate que os [38:37] habéis creado Y partís desde ahí y no [38:39] tenéis que estar haciendo todo este [38:41] proceso una vez y otra vez de hecho os [38:43] recomiendo que en este boiler Plate añad [38:46] todo lo que os pueda resultar [38:47] interesante no solo esto por ejemplo si [38:49] queréis Añadir la documentación de [38:51] scramble o si queréis hacer eh añadirle [38:55] alguna implementación de panel de [38:57] administración cualquier filament lo que [38:59] sea todas las cosas que siempre usáis [39:01] dentro de vuestro desarrollo o que son [39:04] comunes ubicad lasas ya Dentro de este [39:06] boiler Plate y así cada vez que [39:08] empecemos a desarrollar lo único que [39:09] tenéis que hacer es clonar ese proyecto [39:12] base y ya tenéis toda la estructura para [39:15] comenzar desde ahí Muy bien pues tenemos [39:20] todo preparado como decía el siguiente [39:23] lunes tenemos el el segundo vídeo de la [39:26] serie Espero que os resulte de interés a [39:30] toda esta línea A toda esta serie si os [39:33] interesa de verdad toda esta parte pues [39:34] dadle apoyo ya sabéis que todos los [39:37] likes suscripciones y todo eso siempre [39:39] se aprecian mucho y nos vemos en el [39:41] siguiente vídeo yo me voy a trabajar a [39:44] programar [39:46] [Música] [40:05] you