Ich stieß auf einen Beitrag, der Tuplizer in NHibernate erwähnt, kann jemand eine gute Definition oder eine Referenz für Tuplizer zur Verfügung stellen?Was ist Tuplizer in NHibernate?
Antwort
Nun, könnte es helfen, zu verstehen, was ein Tupel ist, zuerst:
http://en.wikipedia.org/wiki/Tuple
Python ist am bemerkenswertesten für für Tupeln erstklassige Träger, obwohl einige andere Sprachen als auch tun (F #)
http://diveintopython3.ep.io/native-datatypes.html#tuples
und natürlich!
definiert A tuplizer den Vertrag für Dinge, die wissen, wie eine besondere Darstellung eines Stückes gegeben EntityMode (die Entität, die Vertretung der von Daten verwalten -mode im Wesentlichen definieren, welche Darstellung).
Wenn das gegebene Datenstück von als Datenstruktur angenommen wird, dann ist ein tuplizer ist die Sache, die weiß, wie zu:
- Erstellen einer solchen Datenstruktur entsprechend
- Auszugswerte aus und Werte in eine solche Datenstruktur injizieren
Zum Beispiel kann eine gegebene Datenstück könnte als eine POCO-Klasse dargestellt werden. Hier ist es Darstellung und Entity-Modus ist POCO. Gut ein tuplizer für POCO Entity-Modi würde wissen, wie zu:
- die Datenstruktur von erstellen Konstruktor der POCO Aufruf
- Extrakts und injizieren Werten durch Getter/Setter oder durch direktes Feld Zugang usw
die gleiche Stück von Daten könnte auch als DOM Struktur dargestellt werden, die tuplizer assoziiert w unter Verwendung it dem XML-Entity-Modus, die Instanzen von XmlElement als Datenstruktur erzeugen würde und wissen, wie die Werte als entweder verschachtelte XmlElements oder als XmlAttributes zuzugreifen.
In der words of Fabio Maulo:
Die tuplizer definiert, wie ein Objekt-Wert auf seine anhaltende Darstellung zu transformieren und umgekehrt eine Spalte-Wert zu seiner In-Memory-Darstellung und die EntityMode definiert, welche tuplizer ist in Gebrauch.
Einige Dinge, die Sie mit benutzerdefinierten tuplizers tun können:
- Remote lazy loading (der Artikel verwendet Java Hibernate aber die allgemeinen Konzepte gelten auch für NHibernate)
- Seamlessly mapping/persisting interfaces instead of POCOs
- Mapping/persisting F# records (von der FunctionalNHibernate project)
org.hibernate.tuple.Tuplizer und seine Unterschnittstellen sind für die Verwaltung von einer bestimmten Darstellung eines Datenelements verantwortlich, das der Darstellung org.hibernate.EntityMode entspricht. Wenn ein bestimmter Teil der Daten als eine Datenstruktur betrachtet wird, dann ist ein Tuplizer derjenige, der weiß, wie man eine solche Datenstruktur erzeugt und wie man Werte aus dieser extrahiert und Werte in eine solche Datenstruktur einfügt. Für den POJO-Entity-Modus kann beispielsweise der entsprechende Tuplizer wissen, wie er den POJO über seinen Konstruktor erstellt. Es weiß auch, wie Zugriff auf die POJO-Eigenschaften mithilfe der definierten Eigenschaft Zugriffsmethoden. Es gibt zwei High-Level-Typen von Tuplizers, vertreten durch den org.hibernate.tuple.entity.EntityTuplizer und org.hibernate.tuple.component.ComponentTuplizer Schnittstellen. EntityTuplizers sind verantwortlich für die Verwaltung der oben genannten Verträge in Bezug auf die Entitäten, während ComponentTuplizers das gleiche für Komponenten.
Bin ich der Einzige, der denkt, das obige Wort könnte erst verstanden werden, nachdem man bereits weiß, was ein Tuplizer ist? – rapt
@rapt es ist ein bisschen schwer zu grok, aber schauen Sie sich die Beispiele an. –