Desacoplando Laravel de tu aplicación

Desacoplando Laravel de tu aplicación

Deja un comentario

Comment as a guest.

  1. Buen Artículo, excelente la explicación pero no entendí bien, pero por culpa mía no del profesor jaja me re intereso el tema pero siento que me falta leer bastante para lograr hacer algo así. Fijate que la parte de la bibliografia justo al menos yo no puedo verla

    1. Muchas gracias Mauro! Voy a mencionar los libros en el artículo porque algunas personas también ya me han dicho que no los pueden ver.

  2. Ciertamente cómo mencionas en el post, una de las contras de aplicar esta arquitectura es la complejidad que conlleva crearla, en lo personal me gusta usar sólo algunos de los conceptos del DDD como los objetos de valor, inmutabilidad, pero pienso que desacoplarse tanto del framework es a su vez desaprovecharlo porque se asume que dentro del diseño se debe contemplar el framework a usar, de todas formas, excelente post.

    1. Concuerdo! Y, como siempre, todo depende del contexto en el que este tu proyecto y el nivel de abstracción que quieras manejar.
      En este mismo ejemplo utilizo cosas de Laravel. Pero creo que lo importante es que tu dominio si este abstraído lo máximo posible del framework, de la base de datos, de servicios de 3ros, etc.
      Muchas gracias por tu comentario :).

  3. Excelente artículo!!!
    Tu solución es mucho más simple que la que hice yo cuando empecé a aplicar DDD con Laravel (5.6)

    Así que ahora me toca Refactoriar mucho!!!!

    Pero no me importa 😉
    Me gusta su solución!
    Enhorabuena!

    PD: Te comento sólo dos detalles (por empezar con algo 🙂
    1. Los id los proporciona la Request en lugar de ser autogenerados por el Repository
    2. La ejecucion de los comandos no devuelven nada.
    Opino que la comunicacion ascendente, desde el Dominio hacia la UI, debe estar resuelto tambien por la Arq Hexagonal.
    En mi caso, mis Handler sí que devuelven respuestas

    En fin, hay mucho que comentar 😉
    Un cordial saludo!

    1. Muchas gracias Javier por tu comentario. Con respecto a los detalles que marcas:
      1. Totalmente de acuerdo! Pero no quise extender el artículo con uuid desde el front y demás. Pero si, es correcto lo que marcas.
      2. En este caso es un «si y no». Si bien puse un return al método execute() del bus de comandos, el handler y el repositorio no esta devolviendo nada y el controlador tampoco espera nada de él.
      Por otro lado, yo creo que, tanto los patrones de diseño como las arquitecturas no deben ser implementadas a raja tabla. Tiene que existir una flexibilidad dependiendo el caso y la mejor solución para cada proyecto.

      Saludos bro!

  4. Hola excelente post la verdad me sirvio muchisimo para empezar a programar mejor, aun que tengo una duda por mi ignorancia cuando creas el modelo le pasas como parametro un ArticleEntity pero tu modelo es un Article, y usas el metodo del modelo directamente? No deberia ser un Article tambien en lugar de un Entity no se si se entiende mi duda. Gracias

  5. Buenísima la explicación. Difícil de entender en sus comienzos debido al cambio en como se deben pensar las cosas, es cuestión de releerlo varias veces e intentar llevarlo a la practica.
    Tengo una consulta, es respecto al modelo. Si quiero usar las relaciones que propone laravel, donde debo hacerlo? Así no rompo con: «todo lo que esta en la capa de dominio no debe tener relación con el exterior.»

    1. Muchas gracias por tu comentario Emilio.
      Todo lo que sea manejo con la persistencia de datos (ya sea consultas, relaciones, inserciones, etc.) deberías abstraerlo con los repositorios.
      Los repositorios son la capa intermedia que se comunican con los Modelos de Laravel (o con Doctrine, o con Redis, o con cualquier persistencia) y tiene lo métodos necesarios que le servirán al cliente que utilice el repositorio.
      Por ejemplo y basándonos en el ejemplo del artículo, supongamos que necesitas saber el autor de un artículo, entonces en el repositorio de artículos de Eloquent (ArticleEloquentRepository.php) harías:

      public function getAuthorFromArticle()
      {
      return $this->model->author->name;
      }

      Donde $this->model es una instancia del modelo Article. Y en Article.php existe la relación author().

      Espero que se entienda, si no vuelve a preguntar que no es molestia.
      Saludos.

      1. Perfecto, lo entendí. Muchas gracias. Me había generado dudas esto: «Como vemos, nuestra clase ArticleEntity no extiende ni implementa nada. Ni tampoco tiene ningún use esto debe ser así ya que, todo lo que esta en la capa de dominio no debe tener relación con el exterior.»

Próximo articulo

Sliding Sidebar

Matias Echazarreta

¡Hola!

Mi nombre es Matias Echazarreta.
Soy desarrollador web con más de 12 años de experiencia. Amante de Laravel, de los libros y del rock de los ’90. Te puedes comunicar conmigo  por trabajos de contratación, haciendo click aquí.

Nuestro Patreon

Desde Patreon puedes solicitar asesoria personalizado. ¡Ir a Patreon!

Suscríbete a nuestra lista de correo