example - Mapeo Java: Selma vs MapStruct
modelmapper java (2)
Actualmente hay dos marcos de mapeo populares de objetos a objetos de Java que reemplazan a Dozer ( http://dozer.sourceforge.net/documentation/mappings.html ), son:
- Selma - http://www.selma-java.org/
- MapStruct - http://mapstruct.org/
Con la excepción de esta página ( http://vytas.io/blog/java/java-object-to-object-mapping-which-framework-to-choose-part-2/ ) no he podido encontrar mucho en línea sobre qué marco es mejor que el otro, o bajo qué circunstancias son mejores. Preguntándome si alguien puede arrojar algo de luz sobre esto. En términos de funcionalidad basada en los documentos, parecen estar haciendo lo mismo.
(Autor original de MapStruct aquí, así que, naturalmente, soy parcial)
De hecho, ambos proyectos se basan en la misma idea general de generar código de mapeo en tiempo de compilación; Te recomiendo MapStruct por las siguientes razones:
- Codebase probado y estable: MapStruct es el más antiguo de los dos, y originalmente se le ocurrió la idea de generar mapas. Se ha mejorado y pulido durante bastante tiempo, basado en comentarios del mundo real del uso en muchos proyectos diferentes; Lanzamos la versión estable 1.0 el año pasado
- Mayor comunidad de desarrolladores y usuarios según el número de confirmadores ( MapStruct , Selma ) y preguntas de los usuarios ( MapStruct , Selma )
-
Rico en funciones (Algunas cosas compatibles con MapStruct que no encontré (en la misma extensión) en los documentos de Selma):
-
Muchas
conversiones de tipo
incorporadas, incluido el soporte avanzado para tipos JAXB como
JAXBElement
- Soporte para valores predeterminados y constantes
- Asignación de personalizaciones a través de expresiones en línea
- Compartir configuraciones entre mapeadores
- Muy bien se integra con CDI y JSR 330 (además de Spring)
-
Muchas
conversiones de tipo
incorporadas, incluido el soporte avanzado para tipos JAXB como
- Complemento de Eclipse disponible: todavía hay trabajo en progreso, pero sus soluciones rápidas y autocompletados ya son muy útiles al diseñar interfaces de mapeador
- Complemento IntelliJ : ayuda al editar interfaces de mapeador mediante autocompletado, ir a propiedades referenciadas, refactorizar soporte, etc.
(Autor original de Selma punto de vista tan levemente diferente)
Selma y MapStruct hacen el mismo trabajo con algunas diferencias. Primero parece que el código generado por Selma es un poco más rápido que MapStruct ( http://javaetmoi.com/wp-content/uploads/2015/09/2015-09-mapping-objet-objet2.png ). El número de versión 0.13 no refleja realmente la madurez del código Selma es estable y robusto, está en uso en producción durante 2 años.
La idea principal detrás de Selma es prohibir la conversión mágica y simplemente automatizar todas las asignaciones sin efectos secundarios. Cuando el mapeo parece ser demasiado complejo, el desarrollador debe manejarlo por sí mismo usando mapeos personalizados o interceptor.
La huella de Selma está diseñada para ser lo más pequeña posible, solo dependemos de un JavaWriter y el JDK.
Selma intenta usar solo código generado compilado estático sin ningún reflejo en tiempo de ejecución o pseudocódigo escrito en campos de cadena.
Puede usar la composición para construir una cadena de mapeadores y dentro de un solo mapeador puede tener una configuración global que se puede sobrescribir según el método.
Los mensajes del compilador se crean para dar retroalimentación temprana al desarrollador, consejos para resolver el problema y aprender la API.
Al final, con seguridad MapStruct tiene más funciones, pero Selma le brinda al desarrollador todas las herramientas necesarias para el mapeo complejo con la responsabilidad de escribir la lógica comercial. También puede encontrar una de las 2 API más bonitas que la otra desde la perspectiva del usuario, por lo que lo mejor es probar ambas y elegir la que le resulte más cómoda. No llevará mucho tiempo.