DDD y CQRS: Preguntas Frecuentes

āđāļŠāļĢāđŒ
āļāļąāļ‡

āļ„āļ§āļēāļĄāļ„āļīāļ”āđ€āļŦāđ‡āļ™ • 31

  • @CodelyTV
    @CodelyTV  6 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Ya disponible el curso de CQRS completo donde entramos mucho mÃĄs en detalle y lo ilustramos con ejemplos de implementaciÃģn tanto en PHP como en Scala. MÃĄs informaciÃģn: pro.codely.tv/library/cqrs-command-query-responsibility-segregation-3719e4aa/62554/about/

  • @pedritoalejos3694
    @pedritoalejos3694 āļŦāļĨāļēāļĒāđ€āļ”āļ·āļ­āļ™āļāđˆāļ­āļ™

    CÃģmo gestionan cuando el command bus es asíncrono , como se entera de que ha sucedido un error si no se espera una respuesta ?

  • @FPontiDev
    @FPontiDev 8 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +2

    Gracias por vuestros vídeos. Enhorabuena!

  • @d-landjs
    @d-landjs 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Excelente video amigos!!!

  • @kakenn20
    @kakenn20 2 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Eso de dejar el metodo vacio es un poco smell no? Tiene toda la pinta de estar aplicando mal la herencia

  • @kmilo93sd
    @kmilo93sd 6 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

    Saludos, geniales sus vídeos, he aprendido un montÃģn con ellos. Deberían hacer unos cuantos videitos sobre patrones de diseÃąo y cuando usarlos correctamente. De pronto podrÃĄ ser algo de novatillo tal vez, pero tienen una facilidad tremenda para explicar.

    • @CodelyTV
      @CodelyTV  6 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

      Para nada es algo de novato!
      De hecho en el Último vídeo puedes ver cÃģmo usamos algunos patrones de diseÃąo para hacer el cÃģdigo mÃĄs legible: th-cam.com/video/t_gPxAeC3rc/w-d-xo.html 🙂
      ÂĄSaludos!

  • @francescocavallari7841
    @francescocavallari7841 5 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Video super Útil e interesante. Tengo unas preguntas: cuando hablÃĄis de delegar al cliente la responsabilidad sobre el UUID del recurso a crear, como lo planteÃĄis a nivel de API? Imaginando que el caso de uso es crear un Post de un blog: el recurso a nivel de API incluye el UUID y nos esperamos que haya un endpoint POST /posts que en el body tenga el UUID? O pedimos un PUT /posts/{uuid}? Y cuando definimos el GET /posts/{uuid} en el body de la respuesta vuelve a aparecer el uuid como parte de la definiciÃģn de ese recurso? Cual sería vuestra propuesta ideal? Gracias y enhorabuena!!

  • @joecolmer7292
    @joecolmer7292 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    con lo de crear el Id desde cÃģdigo, que pasa con la concurrencia. TambiÃĐn, otra cosa, es muy improbable que se repita, pero y si se repite? Mas que nada pensando en el Murphy... No creo que sea una buena prÃĄctica lo de crear ids para que los tests sean mas fÃĄciles, los tests, no son la aplicaciÃģn, no se si me explico.

  • @gcaqp
    @gcaqp 5 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    17:20 pero se puede hacer un MockService o MockBus Tranquilamente para que no suceda eso... aislas la funcionalidad de ese raiseEvent y que da pruebas lo puntual sin afectar a lo demas, tan secillo como eso

    • @mauricioelliff4117
      @mauricioelliff4117 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      Yo creo q pondría una variable global q de estar con valor TEST, omitiera el lanzado de eventos

    • @mauricioelliff4117
      @mauricioelliff4117 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      .... O ampliando, haría esto. Cada capa del dominio tendría su extend abstract, así tendría una clase para implementaciÃģn, infraestructura, o como quiera subdividirse los casos de uso y nuestros test, luego entonces si, tendría la variable global q indicaría q parte se estÃĄ testeando y el cÃģdigo sabría q funcionalidad deberÃĄ ejecutarse o omitirse.

  • @alexandervidaurrearroyo3151
    @alexandervidaurrearroyo3151 5 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

    10:15 tenia entendido que en DDD el controlador pertenece a la capa de presentacion, no a la de aplicacion
    4:10 Otra cosa que tenia entendido es no usar excepciones ni para las validaciones ni para la logica de negocio o para el control de flujo en general. "Deja las excepciones para situaciones excepcionales".
    Por ultimo, Âŋusar un uuid como clave primaria (o cualquier campo no numerico) no disminuye el rendimiento de las consultas que requieren joins?

    • @hazelhumor
      @hazelhumor 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +2

      Hola, aunque ya ha pasado un aÃąo y quizÃĄs ya has resuelto tus dudas, creo que puedo aportar algo al respecto.
      1) Cuando hablan de "aplicaciÃģn' en 10:15, no se refieren a la capa de "AplicaciÃģn" de Arquitectura Hexagonal, sinÃģ mÃĄs bien al típico directorio "apps" que contiene los puntos de entrada (i.e. controllers) y otros ficheros de configuraciÃģn del propio framework o de otros bundles.
      2) En cuanto a lo de las UUIDs y el bajo rendimiento al hacer joins, CQRS es tu amigo. Uno de los grandes beneficios de CQRS es que dispones de un modelo de escritura y varios de lectura. La clave estÃĄ en el modelo de lectura, puesto que estÃĄ tan "denormalizado" como necesites para facilitar las consultas de bÚsqueda, minimizando el nÚmero de JOINS, haciendo que solo sean necesarios de forma excepcional, ganando así bastante rendimiento.
      Imagina que en un modelo relacional de toda la vida tienes "user" y "user_info" dÃģnde "user_info.user_id" es una FK a la tabla "user". Para buscar la info por DNI, desde un punto de vista "tradicional", tendrías que hacer un JOIN entre ambas tablas, pero con CQRS simplemente tendrías una Única tabla (modelo de lectura) con TODOS los campos de "user" y "user_info". Ahí te ahorras el JOIN. De hecho, si al trabajar con DDD tus consultas suelen tener muchos JOIN, suele ser un síntoma de que el dominio no estÃĄ bien modelado y hay que segregar mÃĄs entre modelo de escritura y modelo de lectura.

  • @thevolcomstone10
    @thevolcomstone10 8 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +1

    Buen video, apenas estoy intentando aprender todo esto y no se por donde comenzar, que me recomiendan.

    • @CodelyTV
      @CodelyTV  7 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +2

      ÂĄBuenas!
      Si te interesan estos temas, te recomendamos los vídeos de:
      * IntroducciÃģn a Arquitectura Hexagonal: th-cam.com/video/GZ9ic9QSO5U/w-d-xo.html
      * De cÃģdigo acoplado al framework hasta microservicios pasando por DDD: th-cam.com/video/o0w-jYun6AU/w-d-xo.html
      * Si programas en PHP, el libro "DDD in PHP" tambiÃĐn te puede ser de ayuda :)
      * MÃĄs vídeos en proceso!

  • @davidpccode
    @davidpccode 6 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +2

    Que pros!

  • @gcaqp
    @gcaqp 5 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    16:50 mi punto de vista es que utilizar un ORM es una metida de pata que comunmente sucede, pierdes control de tu sentencias, Solo quiza para manipulacion de datos (IUD) pero nunca para recuperar datos. Ademas hacerlo por reflection, consume mas procesador, prefiero la programacion mas tipada

    • @FiliusDeiPatris
      @FiliusDeiPatris 5 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      Giancarlo Huarcaya Pero si cambiar la bd es transparente gracias a usar un orm

    • @SimaDamian
      @SimaDamian 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      @@FiliusDeiPatris Es la teÃģria, pero en la prÃĄctica depende mucho... si es necesaria esa potencial facilidad para cambiar de db.
      Por otro lado la base de datos debería estar desacoplada, tanto en interfaz de consulta como de modificaciones

  • @mcarra66
    @mcarra66 8 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Âŋque opinÃĄis de usar MongoId en lugar de UUID como identificador Único?

    • @mcarra66
      @mcarra66 8 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      Yo me refiero a la unicidad que te da MongoId vs UUID. Mediante el driver de mongo en PHP puedes hacer un new \MongoId() i persistir despuÃĐs en base de datos usando ese objeto, sin necesidad de flushear para saber que MongoId te ha generado la base de datos.

    • @mcarra66
      @mcarra66 8 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

      eso es cierto...tal vez ese es el motivo que hace que no sea aconsejable usar \MongoId como identificador Único. gracias!

    • @CodelyTV
      @CodelyTV  8 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +2

      Realmente el principal beneficio que se busca aquí es poder generar los identificadores desde el exterior de nuestra aplicaciÃģn, y no desde la infraestructura como sería el caso de IDs autoincrementales. Buscamos este beneficio principalmente por testing tal y como se explica en el vídeo :)
      @Dani va bien encaminado, pero aÚn así, podríamos pensar en usar la implementaciÃģn de \MongoId como adaptador de esos identificadores en vez de una librería de UUIDs. Aquí el voto personalmente seguiría yendo para UUIDs. Es un formato mÃĄs estÃĄndar que incluso algunas bases de datos y lenguajes ya reconocen como tipo primitivo. AdemÃĄs, se hace mÃĄs fÃĄcil encontrar soporte en otros lenguajes como por ejemplo JavaScript, en vez de MongoIds :)

  • @alexandreicasuriaga9850
    @alexandreicasuriaga9850 7 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +2

    Hola,
    He estado estudiando vuestro proyecto (github.com/CodelyTV/cqrs-ddd-example/) y me surgen las siguientes dudas:
    Por cada entidad creÃĄis un bundle (CodelyTv\Context\Video\Infrastructure\Symfony\Bundle) que puede contener diferente conexiÃģn a bd?
    Gracias por vuestros vídeos!

  • @DLuffyPaul
    @DLuffyPaul 3 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    esta muy bajo el audio :(

  • @bonaoenchelcha
    @bonaoenchelcha 5 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +2

    estos conceptos me parecen tan confusos :(

  • @BackDoorMann
    @BackDoorMann 6 āļŦāļĨāļēāļĒāđ€āļ”āļ·āļ­āļ™āļāđˆāļ­āļ™

    Estos quienes son? Vuestros hijos?

  • @dvddavizcky3254
    @dvddavizcky3254 8 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§ +2

    hablen mÃĄs duro pls

  • @dmsanz_youtube
    @dmsanz_youtube 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    Buen programa chicos. Si me lo permitís, para los programadores .NET he creado unos vídeos explicando cÃģmo implementar Event Sourcing desde cero sin utilizar ningÚn framework ni librería.
    Event sourcing complementa a CQRS a la perfecciÃģn hasta el punto en el que como bien decís se puede usar CQRS sin event sourcing pero no se puede usar Event Sourcing sin CQRS (o digamos que no sería prÃĄctico)
    Aquí dejo informaciÃģn de lo que es event sourcing y de lo sencillo que es su implementaciÃģn.
    A vuestra disposiciÃģn si le veis utilidad!
    Parte 1 de 3 (teoría): th-cam.com/video/dw6TLp2wDgs/w-d-xo.html
    Parte 2 de 3 (implementaciÃģn de componentes de event sourcing): th-cam.com/video/EIJTg3NLH_Y/w-d-xo.html
    Parte 3 de 3 (implementaciÃģn de demo): th-cam.com/video/qNZ-_cBACk8/w-d-xo.html

  • @victorpanchuk1824
    @victorpanchuk1824 4 āļ›āļĩāļ—āļĩāđˆāđāļĨāđ‰āļ§

    ÐŧŅƒŅ‡ŅˆÐĩ Ðą Ð―Ð° Ņ€ŅƒŅŅÐšÐūО ÐēÐĩŅ‰Ð°ÐŧÐļ