Was bedeutet es, ein Objekt zu hydratisieren?

Lesezeit: 7 Minuten

Benutzer-Avatar
Jim

Wenn jemand davon spricht, ein Objekt zu hydrieren, was bedeutet das?

Ich sehe ein Java-Projekt namens Hydrate im Web, das Daten zwischen verschiedenen Darstellungen umwandelt (RDMS zu OOPS zu XML). Ist dies die allgemeine Bedeutung von Objekthydratation? Daten zwischen Darstellungen transformieren? Könnte es bedeuten, eine Objekthierarchie aus einer gespeicherten Repräsentation zu rekonstruieren?

  • Bitte sehen Sie sich auch diese Frage an, die eine großartige Antwort hat. Es ist nicht ganz dieselbe Frage, also stimme ich nicht für den Abschluss. Aber es erklärt die Flüssigkeitszufuhr gut: stackoverflow.com/questions/4929243/…

    – Eric Robertson

    27. Dezember 2013 um 15:06 Uhr

  • Ich denke, es ist die gleiche Frage: “Was bedeutet Hydrat”. Abstimmung zum Schließen.

    – TylerH

    8. Juli um 18:57 Uhr

  • Beantwortet das deine Frage? Klärung der Terminologie – Was bedeutet das „Hydratisieren“ einer JPA- oder Hibernate-Entität beim Abrufen der Entität aus der DB?

    – TylerH

    8. Juli um 18:57 Uhr

Hydration bezieht sich auf den Prozess, ein Objekt mit Daten zu füllen. Ein Objekt, das noch nicht hydratisiert wurde, wurde instanziiert und stellt eine Entität dar, die über Daten verfügt, aber die Daten wurden noch nicht in das Objekt geladen. Dies geschieht aus Leistungsgründen.

Darüber hinaus wird der Begriff Hydratation verwendet, wenn Pläne zum Laden von Daten aus Datenbanken oder anderen Datenquellen diskutiert werden. Hier sind einige Beispiele:

Man könnte sagen, dass ein Objekt teilweise hydratisiert ist, wenn Sie nur einige der Felder hineingeladen haben, aber nicht alle. Dies ist möglich, da diese anderen Felder für Ihre aktuellen Vorgänge nicht erforderlich sind. Es gibt also keinen Grund, Bandbreite und CPU-Zyklen für das Laden, Übertragen und Einstellen dieser Daten zu verschwenden, wenn sie nicht verwendet werden.

Darüber hinaus gibt es einige ORMs, wie z. B. Doctrine, die Objekte nicht hydratisieren, wenn sie instanziiert werden, sondern nur, wenn auf die Daten in diesem Objekt zugegriffen wird. Dies ist eine Methode, die hilft, keine Daten zu laden, die nicht verwendet werden.

  • +1; Dies ist eine vollständigere Antwort als meine im Kontext von Java und Hydration. Es ist immer noch vollständig gleichbedeutend mit dem allgemeinen Begriff Deserialisierung, wie meine Antwort sagte, wird aber am häufigsten in ORMs verwendet. Dies liegt daran, dass ORM-APIs häufig die Kontrolle über den von ihnen abgerufenen Datensatz bieten, sodass Sie eine vorhandene Objektzuordnung wiederverwenden können, anstatt für jede von Ihnen geschriebene Abfrage neue Zuordnungen schreiben zu müssen. Vielleicht möchten Sie erwähnen, dass Sie von “Lazy-Loading” sprechen, da es in diesem Q&A nur um Terminologie geht 🙂

    – Merlyn Morgan-Graham

    26. Dezember 2013 um 21:37 Uhr


  • Ist es richtig, einen entgegengesetzten Prozess zum Abrufen von Daten aus der Objektextraktion aufzurufen? Daten aus Objekt extrahieren.

    – Oleg Abrazhaev

    20. Juli 2016 um 9:08 Uhr

Benutzer-Avatar
Merlyn Morgan-Graham

In Bezug auf den allgemeineren Begriff Hydrat

Das Hydratisieren eines Objekts nimmt ein im Speicher vorhandenes Objekt, das noch keine Domänendaten (“echte” Daten) enthält, und füllt es dann mit Domänendaten (z. B. aus einer Datenbank, aus dem Netzwerk oder aus einer Datei). System).

Aus Erick Robertsons Kommentaren zu dieser Antwort:

Deserialisierung == Instanziierung + Hydration

Wenn Sie sich keine Gedanken über eine sprunghafte Leistung machen müssen und keine Leistungsoptimierungen debuggen, die sich in den Interna einer Datenzugriffs-API befinden, müssen Sie sich wahrscheinlich nicht explizit mit der Hydratation befassen. Sie würden normalerweise verwenden Deserialisierung stattdessen, damit Sie weniger Code schreiben müssen. Einige Datenzugriffs-APIs bieten Ihnen diese Option nicht, und in diesen Fällen müssten Sie den Hydration-Schritt auch explizit selbst aufrufen.

Weitere Einzelheiten zum Konzept der Hydration finden Sie in Erick Robertsons Antwort auf dieselbe Frage.

In Gedenken an das Java-Projekt namens Hydrate

Sie haben speziell nach diesem Framework gefragt, also habe ich es mir angesehen.

Soweit ich das beurteilen kann, glaube ich nicht, dass dieses Projekt das Wort “Hydrat” in einem sehr allgemeinen Sinne verwendet hat. Ich sehe seine Verwendung im Titel als ungefähres Synonym für “Serialisierung”. Wie oben erläutert, ist diese Verwendung nicht ganz korrekt:

Sehen: http://en.wikipedia.org/wiki/Serialisierung

Übersetzen von Datenstrukturen oder Objektzuständen in ein speicherbares Format […] und später in derselben oder einer anderen Computerumgebung rekonstruiert werden.

Ich kann den Grund hinter ihrem Namen nicht direkt finden die Hydrate-FAQ, aber ich habe Hinweise auf ihre Absicht. Ich denke, sie haben den Namen “Hydrate” gewählt, weil der Zweck der Bibliothek dem des beliebten Sound-Alike ähnelt Hibernate-Frameworkaber es wurde mit dem genau entgegengesetzten Arbeitsablauf entwickelt.

Die meisten ORMs, einschließlich Hibernate, verfolgen einen objektmodellorientierten Ansatz im Arbeitsspeicher, wobei die Datenbank an zweiter Stelle steht. Die Hydrate-Bibliothek verfolgt stattdessen einen datenbankschemaorientierten Ansatz, bei dem Ihre relationalen Datenstrukturen erhalten bleiben und Ihr Programm sauberer darauf arbeiten kann.

Metaphorisch gesprochen, immer noch in Bezug auf den Namen dieser Bibliothek: Hydrat ist wie “etwas gebrauchsfertig machen” (wie rehydrieren Getrocknete Lebensmittel). Es ist ein metaphorisches Gegenteil von Überwinternwas eher wie “etwas für den Winter wegräumen” ist (wie Tierischer Winterschlaf).

Die Entscheidung, die Bibliothek Hydrate zu nennen, betraf, soweit ich das beurteilen kann, nicht den allgemeinen Computerprogrammierbegriff „Hydrat“.

Bei der Verwendung des allgemeinen Computerprogrammierbegriffs “Hydrat” sind Leistungsoptimierungen normalerweise die Motivation (oder das Debuggen vorhandener Optimierungen). Auch wenn die Bibliothek eine granulare Kontrolle darüber unterstützt, wann und wie Objekte mit Daten gefüllt werden, scheinen das Timing und die Leistung nicht die Hauptmotivation für den Namen oder die Funktionalität der Bibliothek zu sein. Die Bibliothek scheint sich mehr darum zu kümmern, End-to-End-Mapping und Schemaerhaltung zu ermöglichen.

  • -1 Hydration bezieht sich auf das Füllen eines vorhandenen Objekts mit Daten. Es ist kein Synonym für Serialisierung.

    – Eric Robertson

    26. Dezember 2013 um 15:17 Uhr

  • Es ist auch kein Synonym für Deserialisierung. Bei der Deserialisierung wird das Objekt mit den Daten erstellt, die es zum Zeitpunkt der Serialisierung hatte. Hydration bezieht sich darauf, wie Sie ein Objekt mit Daten füllen. Es ist ein feiner Unterschied, aber es ist ein Unterschied. Sie können beispielsweise ein Objekt nicht teilweise deserialisieren. (zumindest nicht über eine Standard-API)

    – Eric Robertson

    27. Dezember 2013 um 5:24 Uhr


  • Wir alle versuchen zu lernen. Wenn ich glaube, dass es unnötig ist, werde ich es entfernen, und ich schätze die Diskussion. Meine Antwort ist nicht Java-zentriert, da ich eigentlich meistens den Begriff “Hydration” in Bezug auf PHP verwendet habe. Die Antwort auf die Frage “Was bedeutet das Hydratisieren eines Objekts?” ist “ein vorhandenes Objekt mit Daten füllen”. Das Objekt muss existieren, bevor Sie es hydratisieren können, was für die Deserialisierung nicht gilt. deserialization == instantiation + hydration

    – Eric Robertson

    27. Dezember 2013 um 14:45 Uhr

  • Tut mir leid, ich habe ein Problem damit, Sie in dieser Antwort zu markieren, Merlyn Morgan-Graham. Es wird entfernt, wenn ich es speichere. Ich habe auch ein Problem damit, dass Aufblasen mit Deserialisierung gleichgesetzt wird. Ich habe den verlinkten Wikipedia-Artikel bearbeitet, um die Behauptung ohne Quelle zu entfernen. Aufblasen impliziert für mich eine Art Dekompressionsroutine. Eine Serialisierungsroutine ist orthogonal zur Komprimierung.

    – Eric Robertson

    27. Dezember 2013 um 15:00 Uhr

  • @ErickRobertson Randnotiz: die @foo wird nicht benötigt, wenn auf den Autor des Beitrags geantwortet wird.

    – Duncan Jones

    29. Januar 2014 um 16:17 Uhr


Während es, wie Merlyn erwähnte, etwas überflüssige Umgangssprache ist, bezieht es sich meiner Erfahrung nach darauf nur zum Füllen/Bestücken eines Objekts, nicht zum Instanziieren/Erstellen, daher ist es ein nützliches Wort, wenn Sie präzise sein müssen.

  • Ich habe meine Meinung geändert und stimme jetzt zu, dass diese Antwort genauer ist als meine alte Antwort. Ich habe meine Antwort seitdem bearbeitet (da sie akzeptiert wurde und ich möchte, dass sie korrekt ist). Jetzt spiegelt es hoffentlich den Unterschied zwischen Deserialisierung und Hydratation wider (insbesondere deserialization == instantiation + hydration).

    – Merlyn Morgan-Graham

    21. Juli 2016 um 6:28 Uhr

Benutzer-Avatar
Jonschlinkert

Dies ist eine ziemlich alte Frage, aber es scheint, dass es immer noch Verwirrung über die Bedeutung der folgenden Begriffe gibt. Hoffentlich wird dies eindeutig.

Hydrat

Wenn Sie Beschreibungen sehen, die Dinge wie „ein Objekt, das auf Daten wartet, wartet darauf, hydriert zu werden“, sehen, ist das verwirrend und irreführend. Objekte warten nicht auf Dinge, und Hydratation ist lediglich das Füllen eines Objekts mit Daten.

Am Beispiel von JavaScript:

const obj = {}; // empty object
const data = { foo: true, bar: true, baz: true };

// Hydrate "obj" with "data" 
Object.assign(obj, data); 
console.log(obj.foo); // true
console.log(obj.bar); // true
console.log(obj.baz); // true

Alles, was Werte hinzufügt obj “Hydratisiert” es. Ich benutze nur Object.assign() in diesem Beispiel.

Da die Begriffe “serialisieren” und “deserialisieren” auch in anderen Antworten erwähnt wurden, finden Sie hier Beispiele, um die Bedeutung dieser Konzepte von der Hydratation zu unterscheiden:

Serialisieren

console.log(JSON.stringify({ foo: true, bar: true, baz: true }));

Deserialisieren

console.log(JSON.parse('{"foo":true,"bar":true,"baz":true}'));

In PHP können Sie eine neue Klasse aus ihrem Namen erstellen, ohne den Konstruktor aufzurufen, wie folgt:

require "A.php";
$className = "A";
$class = new \ReflectionClass($className);
$instance = $class->newInstanceWithoutConstructor();

Dann können Sie aufrufende Setter (oder öffentliche Attribute) hydrieren.

1358660cookie-checkWas bedeutet es, ein Objekt zu hydratisieren?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy