No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Java Spring

Curso de Java Spring

Alejandro Ramírez

Alejandro Ramírez

Crear la estructura del proyecto

9/35
Recursos

¿Cómo estructurar arquitectónicamente una aplicación?

La estructura arquitectónica de una aplicación es fundamental para su correcto funcionamiento y mantenimiento a largo plazo. Una organización clara y bien definida facilita los procesos de desarrollo, depuración y actualización de la aplicación. Aquí te explico cómo podemos usar una arquitectura por capas orientada al dominio para un proyecto, paso a paso.

¿Qué es la capa de dominio?

La capa de dominio es el núcleo de la aplicación. En esta capa, encontramos los objetos de dominio y los DTO (Data Transfer Objects). Los objetos de dominio son representaciones abstractas de elementos dentro del contexto de la aplicación. En el caso de un supermercado, por ejemplo, podríamos tener productos, categorías, clientes, entre otros.

Además, en la capa de dominio, se definen los servicios que actúan como puentes entre los controladores de la API y la capa de persistencia. Finalmente, encontraremos las especificaciones de los repositorios, que son interfaces definiendo los contratos que la capa de persistencia debe cumplir.

¿Cómo organizar la capa de dominio?

Para iniciar, dentro de tu proyecto, crea un nuevo paquete llamado domain. Luego, dentro de domain, puedes añadir subpaquetes para DTO, repository y service. Aquí es un ejemplo de cómo hacerlo si estás usando un entorno de desarrollo integrado (IDE):

  1. Crear el paquete domain:

    Clic derecho en el proyecto -> New -> Package -> domain
    
  2. Agregar subpaquetes:

    Clic derecho en domain -> New -> Package -> DTO
    Clic derecho en domain -> New -> Package -> repository
    Clic derecho en domain -> New -> Package -> service
    

Los objetos de dominio pueden colocarse directamente dentro del paquete domain.

¿Qué roles juegan la capa web y la capa de persistencia?

La capa web es donde se sitúan los controladores de la API. Estos controladores gestionan las solicitudes y respuestas de los clientes y actúan como la entrada al sistema.

Por su parte, la capa de persistencia interactúa directamente con la base de datos. Incluye los repositorios que implementan las especificaciones del dominio y las entidades, que actúan como mapeos entre las clases y las tablas de la base de datos.

¿Cómo estructurar las capas web y de persistencia?

  1. Para la capa web:

    Dentro del proyecto, crea un paquete web y, dentro de este, un subpaquete controller:

    Clic derecho en el proyecto -> New -> Package -> web
    Clic derecho en web -> New -> Package -> controller
    
  2. Para la capa de persistencia:

    Añade un paquete persistence y subpaquetes para entity y CRUD.

    Clic derecho en proyecto -> New -> Package -> persistence
    Clic derecho en persistence -> New -> Package -> entity
    Clic derecho en persistence -> New -> Package -> CRUD
    

El subpaquete CRUD contendrá los repositorios específicos de la aplicación, mientras que entity alojará las clases que representan las tablas de la base de datos.

¿Cómo fluye la información en esta arquitectura?

  1. Un cliente hace una solicitud a través de un controlador en la API.
  2. El controlador se comunica con los servicios en la capa de dominio para procesar la lógica de negocio.
  3. Los servicios contactan a los repositorios en la capa de persistencia para manejar operaciones de la base de datos.
  4. Finalmente, los datos son recuperados, transformados en entidades, y enviados de vuelta al cliente a través de la API.

Este flujo permite un desarrollo modular y escalable, facilitando el mantenimiento y crecimiento del proyecto. Así, no solo optimizas la arquitectura interna, sino que también garantizas un desempeño eficiente a largo plazo.

Este tipo de organización estructural beneficia tanto a desarrolladores como a usuarios, permitiendo un código claro y fácilmente extensible. ¡Continúa explorando y aprendiendo sobre cómo implementar estas capas en tu proyecto!

Aportes 25

Preguntas 17

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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

La estructura del proyecto será de la siguiente manera:

1. DOMINIO:

  • DTO y objetos del dominio (Contexto de la aplicación)
  • Servicios: Puente entre los controladores y la capa de persistencia.
  • Especificación de repositorios: Interfaces que determinan las reglas que debe cumplir la persistencia para actuar entre los objetos de dominio y la DB.

2. WEB:

  • Controladores de API Rest.

3. PERSISTENCIA:

  • Repositorios: Implementan las especificaciones que tiene la capa de DOMINIO.
  • Entities: Mapean y actúan como tablas de la DB.

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.

Proyecto por capas orientado al dominio

  • Dominio -> DTO, Servicios, Definicion repositorios
  • Web -> Controladores API
  • Persistencia -> implementacion de repositorios

Es similar a la estructura “Clean Arquitecture” donde las capas son:

  • Domain
  • Presentation
  • Data

Wow, este profe explica muy bien

La arquitectura usada para este proyecto es por capas y orientada al dominio.

Gracias, sigamos aprendiendo

Para mí eso es tecnología.

¿Como se llama esa estructura del proyecto?

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.

Entonces, de acuerdo a lo que expone el profesor el modelo resumido de funcionamiento de nuestra api será así:

Pido me corrijan con confianza 😃

Wow vamos bastante bien, buena explicación por parte del profesor

Muy buenas practicas, que bueno!

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 ![](https://static.platzi.com/media/user_upload/Screenshot%202023-12-14%20at%209.44.41%E2%80%AFPM-bf1de18d-bf88-49e5-9cc1-1f63ccf91f76.jpg) 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

EXCELENTE PROFESOR

Curso desactualizado, he avanzado en varias clases y me salen varios errores durante la implementación. Deberian actualizarlos.
Excelente Explicacion del Funcionamiento de una API en terminos sencillos

estructura del proyecto
por capas orientadas al dominio.
DTO y objetos de dominio: contexto de la APP
Servicio: es el puente entre controladores de la API y la persistencia del repositorio quien es la que interviene con la base de datos.
Especificacion de los repositorio: interfaces que establecen las reglas que debe cumplir la persistencia con la base de datos.
capa web estan los controladores de API.
capa de persistencia tiene la obligacion de interactuar con la base de datos. alli estan los repositorios y las entidades, los entities son los que hacen de tablas que estan en nuestra base de datos.

Considero que el controlador es más genérico que un controlador web. La aplicación también podría correr en CLI y estar dentro de un paquete CLI, junto con el Web. Por ello, sugeriría cambiar el paquete base a “Controller” y dentro de el “Web”

El profe menciona algo muy interesantes y es programación reactiva, que chévere que se diera un curso sobre esto, en base a este proyecto, usando r2dbc y/o alguna base de datos de AWS, seria interesante ver los cambios java 11 vs java 17.
En mi experiencia, tengo entendido que los DTOs para este proyecto deberían ser los objetos utilizados para mappearse con los objetos Entity. Pero veo que en la carpeta DTO solo se mencionó al momento de crear la estructura del proyecto y para hacer el mapeo con las entidades se utilizan otras clases. No me quedó claro por qué no se utilizaron los DTOs para tal fin. Los DTOs son los objetos que se deben utilizar para transportar la información desde la persistencia hacia el exterior (Data Transfer Object)

Me encantó esta clase🙌

excelente muy buena clase !!!

Un paquete en Java es un mecanismo para agrupar clases relacionadas y facilitar la organización del código. Funciona como una carpeta que contiene varias clases, interfaces y subpaquetes. Los paquetes permiten evitar conflictos de nombres y controlan el acceso a las clases. Al utilizar paquetes, puedes estructurar tu aplicación de manera más eficiente, lo que es importante al desarrollar aplicaciones empresariales con frameworks como Spring. Esto mejora la mantenibilidad y escalabilidad del código.