Edinson Padrón
Hinder Adrian Alvarez Perlaza
Osea, todos los developers jajaja. muchas gracias.
Felipe de Jesús Galindo Aguilar
¿Esto lo haces desde la consola?
Construir una aplicación bien organizada desde el inicio marca la diferencia entre un proyecto mantenible y uno que se vuelve caótico con el tiempo. Aquí se explica cómo estructurar un proyecto Spring Boot usando una arquitectura por capas orientada al dominio, separando responsabilidades de forma clara para que cada componente tenga un propósito definido.
¿Qué es la arquitectura por capas orientada al dominio?
Esta arquitectura divide la aplicación en tres capas principales, cada una con una responsabilidad específica. La idea central es que el dominio sea el corazón de la aplicación, y las demás capas giren alrededor de él.
¿Qué papel cumplen los servicios en esta arquitectura?
Los servicios funcionan como un puente entre los controladores de la API y la capa de persistencia [0:42]. Cuando un controlador recibe una petición, no accede directamente a la base de datos. En su lugar, delega la lógica al servicio correspondiente, que a su vez llama al repositorio específico que necesite.
Este patrón garantiza que la lógica de negocio esté centralizada y no dispersa entre controladores y repositorios.
¿Qué son las especificaciones de repositorio?
Dentro de la capa de dominio se definen interfaces que actúan como contratos o reglas de juego [1:00]. Estas especificaciones indican qué operaciones debe cumplir la persistencia para intervenir entre los objetos de dominio y la base de datos. La implementación concreta de estas interfaces vive en la capa de persistencia.
Los entities son las clases que mapean las tablas de la base de datos [1:42]. Cada entity representa una tabla y sus atributos corresponden a las columnas.
¿Cómo fluye una petición dentro de esta arquitectura?
El recorrido de una solicitud sigue un camino lineal y predecible [1:52]:
Esta separación hace que cada capa sea independiente y fácil de probar o modificar sin afectar a las demás.
¿Cómo se crea la estructura de paquetes en el proyecto?
Dentro del proyecto en el IDE, se crean los paquetes siguiendo la jerarquía de capas [2:14]:
domain → contiene los subpaquetes dto, repository (para las especificaciones) y service.web → contiene el subpaquete controller.persistence → contiene los subpaquetes entity y crud [3:22].El paquete crud almacena los crud repositorios de la aplicación, un concepto que se relaciona con las operaciones básicas de crear, leer, actualizar y eliminar datos.
¿Por qué eliminar el controlador de ejemplo?
El Hola Mundo Controller creado anteriormente solo sirvió para verificar el funcionamiento inicial de la aplicación [3:38]. Al tener la nueva estructura lista, se mueve al paquete web.controller y luego se elimina con la opción safe delete, asegurando que no queden referencias rotas en el proyecto [3:57].
Con esta organización, el proyecto queda preparado para escribir código de forma ordenada, donde cada archivo tiene un lugar lógico y el mantenimiento a largo plazo resulta mucho más sencillo. En la siguiente sesión se aborda el concepto de JPA, que será fundamental para la capa de persistencia.
Edinson Padrón
Hinder Adrian Alvarez Perlaza
Osea, todos los developers jajaja. muchas gracias.
Felipe de Jesús Galindo Aguilar
¿Esto lo haces desde la consola?
JULIAN FRANCO RUA
Cristian Nicolai Hernandez Rios
que herramientas usaste ?
Eliana Huamani
Seria bueno mencionar : Al realizar creaciones de paquetes estas deben estar por debajo de la clase donde se encuentre nuestro main (@SpringBootApplication), PORQUE, ya que spring scanea desde ese punto hacia abajo por defecto, de lo contrario se tendra que emncionar en esa mima clase la ruta que scaneara.
Alejandro Ramírez
ProfesorGran aporte Eliana. Así deben ser creados los paquetes.
Muchas gracias!
Alexander Prado
¿Podrían explicar mejor este punto? Gracias!
Juan Pablo Gómez García
Wow, este profe explica muy bien
Cristian David Restrepo Marin
x2
Daniel Rodríguez
La arquitectura usada para este proyecto es por capas y orientada al dominio.
Cristhian De la Cruz
hinderadrian gracias, esta arquitectura DDD es similar a la arquitectura MVC? o cuales son sus diferencias?
Juan Carlos Zelaya Reyes
Que buen aporte gracias por decir que patrón utilizaba
Cesar Jesus Gtz
Gracias, sigamos aprendiendo
Alfonso Barcelo
Para mí eso es tecnología.
Alex Soto Mendez
¿Como se llama esa estructura del proyecto?
ROMMEL DUAREZ SAENZ
DDD
Christian Juan Tambo Coaquira
DTO % objetos de dominio → Son objetos que hacen parte del contexto de la aplicación, en el caso de ejemplo seria el mercado.
Servicios → Son los encargados que sirven como puente entre los controladores de la api y la capa de persistencia o el repositorio.
Especificación de repositorios → Interfaces que definen las reglas del juego de los contratos que ha de cumplir la persistencia para intervenir entre los objetos de dominio y la base de datos.
WEB → controladores de la API.
PERSISTENCIA → Es la capa que tiene la obligación de interactuar con la base de datos, donde estaran los repositorios y los entities que son las clases que mapean y hacen las veces de las tablas que estan en la base de datos.
Jonathan Villavicencio Gonzalez
A medida que se va avanzando en el mundo del software, llegan mejores Arquitecturas Limpias. Les propongo que vayan por el camino "Hexagonal" con 4 carpetas
Donde: Presenters: tendra todos los controllers basicamente nuestros endpoints y DTOs con los que se puedan consumir la app en caso de ser un servicio REST en caso de instanciado por un message pattern entonces ese seria el lugar
Application: es donde estaran los servicios, nuestro CQRS, nuestra comunicacion con la infrastructura, etc
Domain: Aqui estarian todos los modelos que contemple el negocio
Infrastructure: Aqui estaria nuestras entidades, nuestros repositorios, nuestras conexiones a servicios externos ya sea una BD o una API de tercero, nuestros mappers que traducen la data que se insertara y cuando se consulte la data que deberia retornar
Martha Lucía Caicedo Morales
¿La arquitectura orientada al dominio es lo mismo que DDD y a su vez esta es lo mismo que la Arquitectura Hexagonal o está relacionada? Muchas gracias
Alexa Cor
Hola, te recomiendo leer este blog: ¿Qué es la arquitectura hexagonal? Aprende a implementarla
José Luis Rincón S.
platzi tiene algun curso de patrones de diseño de software?
Alvaro Eduardo Garzón Pira
¡Hola! Sí, algunos recién salidos:
Ricardo Morales
Pregunta, teniendo en cuenta esta estructura, ¿en donde estaría nuestra lógica de negocio ?
Marco Guaman
En el las clases: Service
Hinder Adrian Alvarez Perlaza
Entonces, de acuerdo a lo que expone el profesor el modelo resumido de funcionamiento de nuestra api será así:
Pido me corrijan con confianza :)
Alejandro Ramírez
ProfesorBuen diagrama Hinder! Cuando empieces a avanzar más en el curso verás que la capa de dominio incluye internamente los servicios y que estos van a la persistencia, donde ocurren la interacción directa con la base de datos pero a su vez se realiza el mapeo entre entities y clases de dominio.
Jorge Ramírez Santiago
Wow vamos bastante bien, buena explicación por parte del profesor
Cristian David Restrepo Marin
x2
Jhon Eduard Bocanegra Ortiz
Muy buenas practicas, que bueno!
Cristian David Restrepo Marin
x2
Daniel Eduardo Rojas Pulido
La estructura de nuestro proyecto:
src -> main -> java -> com.platzi.market
Dominio -> dto
Dominio -> repository
Dominio -> service
persistence -> crud
persistence -> entity
web -> controller
Saul Hernando Echeverri Duque
Me gusta usar esta arquitectura:
Que piensan de ella?
Para el perezoso: mkdir -p domain/{dto,repository,service} persistance/{entity,crud} web/controller
. ├── paltzi-market.iml ├── pom.xml ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ └── platzi │ │ │ └── market │ │ │ ├── domain │ │ │ │ ├── dto │ │ │ │ ├── repository │ │ │ │ └── service │ │ │ ├── PaltziMarketApplication.java │ │ │ ├── persistance │ │ │ │ ├── crud │ │ │ │ └── entity │ │ │ └── web │ │ │ └── controller │ │ └── resources │ │ ├── application.properties │ │ ├── application.yaml │ │ ├── keystore │ │ │ └── rtc4j.p12 │ │ ├── static │ │ └── templates │ └── test │ └── java │ └── com │ └── platzi │ └── market │ └── PaltziMarketApplicationTests.java