2016-01-14 13 views
33

Attualmente non ci sono due principali oggetto Java popolare per oggetto framework di mapping che sostituiscono Dozer (http://dozer.sourceforge.net/documentation/mappings.html), essi sono:Java mappatura: Selma vs MapStruct

  1. Selma - http://www.selma-java.org/
  2. MapStruct - http://mapstruct.org/

Con l'eccezione di questa pagina (http://vytas.io/blog/java/java-object-to-object-mapping-which-framework-to-choose-part-2/) non sono stato in grado di trovare molto online riguardo a quale struttura è migliore rispetto all'altra o in quali circostanze sono migliori. Chiedersi se qualcuno si può far luce su questo. In termini di funzionalità basata sui documenti, sembrano fare la stessa cosa.

+0

Elenco correlato di mapper: https://stackoverflow.com/questions/1432764/new-tool-for-java-object-to-object-mapping – tkruse

risposta

44

(autore originale MapStruct qui, così naturalmente io sono di parte)

Infatti, entrambi i progetti si basano sulla stessa idea generale di generare codice di mappatura in fase di compilazione; Vi raccomando MapStruct per i seguenti motivi:

  • collaudata e codebase stabile: MapStruct è il più vecchio dei due, fino a venire con l'idea di generazione mappatura in origine. È stato migliorato e ottimizzato per un periodo piuttosto lungo, basato sul feedback del mondo reale dall'uso in molti progetti diversi; Abbiamo rilasciato la stalla 1.0 finale dello scorso anno
  • Larger sviluppatori e comunità di utenti come per il numero di committer (MapStruct, Selma) e domande degli utenti (MapStruct, Selma)
  • (ricchi di funzioni Alcune cose supportati in MapStruct I didn' t trovare (per lo stesso estendersi) nella documentazione Selma):
  • Eclipse plug-in avaible: lavori ancora in corso, ma i suoi quickfixes e auto-completamenti sono già molto utile quando si progetta interfacce mapper
  • IntelliJ plug-in: consente di modificare le interfacce del mapping tramite completamento automatico, accedere a proprietà di riferimento, supporto per refactoring, ecc.
+0

Hello Gunner, Grazie per tutti i dettagli su MapStruct. Stiamo usando Dozer 5.4.0 e stiamo pensando di cambiare ora dato che si sta comportando peggio. Pensi che MapStruct supporti concetti come dozer "a senso unico", is-accessible = "true", "a-deep-index-hint" e specificando convertitori personalizzati? Mi piacerebbe provare MapStruct. – YogendraJ

+0

Vi consiglio di dare un'occhiata alla [documentazione di riferimento] (http://mapstruct.org/documentation/). Non conosco i termini/le caratteristiche di Dozer, ma supponiamo che "unidirezionale" sia implicitamente supportato dal fatto che si dichiarano metodi di mappatura specifici in MapStruct. I convertitori personalizzati sono rappresentati da metodi di mappatura scritti a mano. Non sono sicuro degli altri due, se puoi indicarmi una loro descrizione, potrei farti notare dalla controparte in MapStruct. – Gunnar

44

(autore originale di Selma in modo lieve diverso punto di vista)

Selma e MapStruct fa lo stesso lavoro con alcune differenze. Per prima cosa sembra che il codice generato da Selma sia leggermente più veloce di MapStruct (http://javaetmoi.com/wp-content/uploads/2015/09/2015-09-mapping-objet-objet2.png). Il numero di versione 0.13 non riflette realmente la maturità del codice. Selma è stabile e robusto è in uso in produzione per 2 anni.

L'idea principale di Selma è di proibire la conversione magica e semplicemente automatizzare tutti i mapping senza effetti collaterali. Quando la mappatura sembra essere troppo complessa, lo sviluppatore dovrebbe gestirlo da solo usando mappature o intercettori personalizzati.

L'ingombro di Selma è costruito per essere il più piccolo possibile, dipendendo solo da JavaWriter e JDK.

Selma tenta di utilizzare solo codice generato compilato statico senza alcuna riflessione in runtime o pseudo-codice scritto nei campi stringa.

È possibile utilizzare la composizione per creare una catena di mapper e all'interno di un singolo mappatore è possibile avere una configurazione globale che può essere sovrascritta per metodo.

I messaggi del compilatore sono progettati per fornire agli sviluppatori un feedback tempestivo, suggerimenti per risolvere il problema e imparare l'API.

Alla fine, sicuramente MapStruct è più ricco di funzionalità, ma Selma offre agli sviluppatori tutti gli strumenti necessari per la mappatura complessa con la responsabilità di scrivere la logica di business. Potresti anche trovare una delle 2 API più belle rispetto alle altre dal punto di vista dell'utente, quindi la cosa migliore da fare è provare entrambi e scegliere quello con cui ti senti più a tuo agio. Non richiederà molto tempo.

+4

Fornire immagini senza alcuna informazione sul banco di prova e sul benchmark stesso è solo una speculazione. Ecco la fonte più rappresentativa: https://github.com/arey/java-object-mapper-benchmark –

+0

Qualcuno cerca di capire perché Selma è più veloce di Mapstruct poiché entrambi utilizzano i compilatori compilati. – gabuzo

+8

Due autori originali che discutono. Adoro StackOverflow. – weberjn