Was bedeutet es, ein Objekt mit Feuchtigkeit zu versorgen?

204

Was bedeutet es, wenn jemand davon spricht, ein Objekt mit Feuchtigkeit zu versorgen?

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

Jim
quelle
3
Bitte beachten Sie auch diese Frage, die eine gute Antwort hat. Es ist nicht ganz die gleiche Frage, also stimme ich nicht dafür, zu schließen. Aber es erklärt die Flüssigkeitszufuhr
Erick Robertson

Antworten:

124

In Bezug auf den allgemeineren Begriff Hydrat

Beim Hydratisieren eines Objekts wird ein im Speicher vorhandenes Objekt genommen, das noch keine Domänendaten ("echte" Daten) enthält, und anschließend mit Domänendaten (z. B. aus einer Datenbank, dem Netzwerk oder einer Datei) gefüllt System).

Aus den Kommentaren von Erick Robertson zu dieser Antwort:

Deserialisierung == Instanziierung + Hydratation

Wenn Sie sich keine Gedanken über Leistungseinbußen 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 Flüssigkeitszufuhr befassen. Normalerweise verwenden Sie stattdessen die Deserialisierung, damit Sie weniger Code schreiben können. Einige Datenzugriffs-APIs bieten diese Option nicht an. In diesen Fällen müssen Sie den Hydratationsschritt auch explizit selbst aufrufen.

Weitere Informationen zum Konzept der Flüssigkeitszufuhr finden Sie in der Antwort von Erick Robertson auf dieselbe Frage.

In Bezug auf das Java-Projekt namens Hydrat

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:

Siehe: http://en.wikipedia.org/wiki/Serialization

Übersetzen von Datenstrukturen oder Objektzuständen in ein Format, das [...] gespeichert und später in derselben oder einer anderen Computerumgebung rekonstruiert werden kann.

Ich kann den Grund für ihren Namen nicht direkt in den Hydrate-FAQ finden , aber ich habe Hinweise auf ihre Absicht erhalten. Ich denke, sie haben den Namen "Hydrate" gewählt, weil der Zweck der Bibliothek dem beliebten klangähnlichen Hibernate-Framework ähnelt , aber es wurde mit genau dem entgegengesetzten Workflow entwickelt.

Die meisten ORMs, einschließlich des Ruhezustands, verfolgen einen speicherinternen objektmodellorientierten Ansatz, wobei die Datenbank die zweite Überlegung berücksichtigt. Die Hydrate-Bibliothek verfolgt stattdessen einen datenbankschemaorientierten Ansatz, bei dem Ihre relationalen Datenstrukturen erhalten bleiben und Ihr Programm sauberer darauf arbeiten kann.

Bildlich gesprochen, immer noch in Bezug auf den Namen dieser Bibliothek: Hydrat ist wie "etwas gebrauchsfertig machen" (wie getrocknete Lebensmittel rehydrieren ). Es ist ein metaphorisches Gegenteil von Hibernate , das eher so ist, als würde man "etwas für den Winter weglegen " (wie Animal Hibernation ).

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

Bei Verwendung des allgemeinen Computerprogrammierbegriffs "Hydrat" sind Leistungsoptimierungen normalerweise die Motivation (oder das Debuggen vorhandener Optimierungen). Selbst wenn die Bibliothek eine detaillierte 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 mehr daran interessiert zu sein, End-to-End-Mapping und Schemaerhaltung zu ermöglichen.

Merlyn Morgan-Graham
quelle
79
-1 Hydratation bezieht sich auf das Füllen eines vorhandenen Objekts mit Daten. Es ist kein Synonym für Serialisierung.
Erick Robertson
20
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. Flüssigkeitszufuhr bezieht sich darauf, wie Sie ein Objekt mit Daten füllen. Es ist ein subtiler Unterschied, aber es ist ein Unterschied. Sie können beispielsweise ein Objekt nicht teilweise deserialisieren. (Zumindest nicht über eine Standard-API)
Erick Robertson
5
Wir alle versuchen zu lernen. Wenn ich glaube, dass es nicht notwendig ist, werde ich es entfernen, und ich schätze die Diskussion. Meine Antwort ist nicht Java-zentriert, da ich den Begriff "Hydratation" in Bezug auf PHP eigentlich meistens verwendet habe. Die Antwort auf die Frage "Was bedeutet es, ein Objekt mit Feuchtigkeit zu versorgen?" ist "Füllen eines vorhandenen Objekts mit Daten". Das Objekt muss existieren, bevor Sie es hydratisieren können, was für die Deserialisierung nicht gilt. deserialization == instantiation + hydration
Erick Robertson
2
Entschuldigung, ich habe ein Problem damit, Sie in dieser Antwort zu markieren, Merlyn Morgan-Graham. Es wird entfernt, wenn ich es speichere. Ich habe auch Probleme damit, dass das Aufblasen mit der Deserialisierung gleichgesetzt wird. Ich habe den verlinkten Wikipedia-Artikel bearbeitet, um den nicht bezogenen Anspruch zu entfernen. Das Aufblasen impliziert für mich eine Art Dekompressionsroutine. Eine Serialisierungsroutine ist orthogonal zur Komprimierung.
Erick Robertson
2
@ErickRobertson Randnotiz: Das @foowird nicht benötigt, wenn Sie auf den Autor des Beitrags antworten.
Duncan Jones
230

Unter Flüssigkeitszufuhr versteht man den Vorgang des Füllens eines Objekts mit Daten. Ein Objekt, das noch nicht hydratisiert wurde, wurde instanziiert und stellt eine Entität dar, die Daten enthält, die Daten jedoch noch nicht in das Objekt geladen wurden. 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 erörtert werden. Hier sind einige Beispiele:

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

Darüber hinaus gibt es einige ORMs wie 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 sollen.

Erick Robertson
quelle
7
+1; Dies ist eine vollständigere Antwort als meine im Zusammenhang mit Java und Hydration. Es ist immer noch ein Synonym für den 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 über "Lazy-Loading" sprechen, da sich diese Fragen und
Antworten ausschließlich
1
Ist es richtig, einen entgegengesetzten Prozess zum Abrufen von Daten aus der Objektextraktion aufzurufen? Daten aus dem Objekt extrahieren.
Oleg Abrazhaev
43

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

J. Dimeo
quelle
5
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). Hoffentlich spiegelt es jetzt den Unterschied zwischen Deserialisierung und Hydratation wider (insbesondere deserialization == instantiation + hydration).
Merlyn Morgan-Graham
8

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

Hydrat

Wenn Sie Beschreibungen sehen, die Dinge wie "Ein Objekt, das auf Daten wartet, wartet darauf, hydratisiert zu werden" sagen, ist das verwirrend und irreführend. Objekte warten nicht auf Dinge, und Flüssigkeitszufuhr ist nur das Füllen eines Objekts mit Daten.

Verwenden Sie JavaScript als Beispiel:

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, sind 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}'));
jonschlinkert
quelle