Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

281
Vistas
¿Está bien usar Java Records con anotaciones @Service / @RestController?

Lo preferiría como registro, ya que hay menos repeticiones, pero ¿habría problemas?

IntelliJ sugiere que convierta una clase básica de Java @Service como esta:

 @Service public class LocationService { private final PlaceRepository placeRepository; @Autowired public LocationService(PlaceRepository placeRepository) { this.placeRepository = placeRepository; } public List<PlaceDto> findPlacesByRegionId(Long regionId){ return placeRepository.findByRegionId(regionId).stream().map(place -> new PlaceDto(place.getId(), place.getName())).toList(); } }

en un registro de Java @Service como este:

 @Service public record LocationService(PlaceRepository placeRepository) { public List<PlaceDto> findPlacesByRegionId(Long regionId) { return placeRepository.findByRegionId(regionId).stream().map(place -> new PlaceDto(place.getId(), place.getName())).toList(); } }
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Permítanme citar al chico de Oracle :

JE 395 dice:

[Registros] son clases que actúan como portadores transparentes de datos inmutables.

Entonces, al crear un registro, le está diciendo al compilador, a sus colegas, al mundo entero, que este tipo se trata de datos. Más precisamente, datos que son (superficialmente) inmutables y accesibles de forma transparente. Esa es la semántica central: todo lo demás se deriva de aquí.

Si esta semántica no se aplica al tipo que desea crear, entonces no debe crear un registro. Si lo hace de todos modos (tal vez atraído por la promesa de no repetitivo o porque cree que los registros son equivalentes a @Data/@Value o clases de datos), está enturbiando su diseño y es muy probable que vuelva a morder usted. Así que no lo hagas.

UPD.

Pasé un par de minutos para descubrir cuál era la causa raíz de su declaración de que "IntelliJ sugiere que convierta una clase Java básica @Service como esta". Y encontré la siguiente discusión: https://youtrack.jetbrains.com/issue/IDEA-252036

De este modo:

  • usar registros para Spring Beans es definitivamente una mala idea: dichos beans no son elegibles para el proxy automático, además, los registros no están diseñados para tales escenarios
  • es vergonzoso, pero JetBrains engaña a los usuarios de CE
over 4 years ago · Santiago Trujillo Denunciar

0

Podría hacer eso, pero los registros tienen captadores (bueno, sin el prefijo get ). Qué capa de servicio no debería tener. Su Service Facade expone métodos públicos que también suelen ser @Transactional , no desea mezclarlos con métodos que nadie va a utilizar.

Además, los registros definen equals() y hashCode() que tampoco son necesarios para las clases de servicio.

Al final, el único tema común entre los Registros y los Servicios es que todos los campos suelen ser final y todos ellos suelen pasarse a través del constructor. Esto no tiene mucho en común. Así que parece una mala idea usar registros para esto.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda