web-dev-qa-db-fra.com

Qu'est-ce que cela signifie d'hydrater un objet?

Quand on parle d'hydratation d'un objet, qu'est-ce que cela signifie?

Je vois un projet Java appelé Hydrate sur le Web qui transforme des données entre différentes représentations (RDMS en OOPS en XML). S'agit-il du sens général d'hydratation d'objet? Transformer des données entre des représentations? signifie reconstruire une hiérarchie d'objets à partir d'une représentation stockée?

171
Jim

En ce qui concerne le terme plus générique hydrate

L'hydratation d'un objet consiste à utiliser un objet existant en mémoire, qui ne contient encore aucune donnée de domaine (données "réelles"), puis à le renseigner avec des données de domaine (provenant par exemple d'une base de données, du réseau ou d'un fichier). système).

D'après les commentaires d'Erick Robertson sur cette réponse:

désérialisation == instanciation + hydratation

Si vous n'avez pas à vous soucier des performances époustouflantes et que vous ne déboguez pas les optimisations de performances contenues dans les éléments internes d'une API d'accès aux données, vous n'avez probablement pas besoin de gérer explicitement l'hydratation. Vous utiliserez généralement désérialisation à la place pour pouvoir écrire moins de code. Certaines API d'accès aux données ne vous donnent pas cette option et dans ce cas, vous devez également appeler explicitement l'étape d'hydratation vous-même.

Pour un peu plus de détails sur le concept d'hydratation, voir réponse d'Erick Robertson sur cette même question.

En ce qui concerne le Java appelé hydrate

Vous avez posé des questions sur ce cadre en particulier, alors je me suis penché sur la question.

Autant que je sache, je ne pense pas que ce projet utilise le mot "hydrate" dans un sens très générique. Je vois son utilisation dans le titre comme un synonyme approximatif de "sérialisation". Comme expliqué ci-dessus, cet usage n'est pas tout à fait exact:

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

traduire les structures de données ou l'état de l'objet dans un format pouvant être stocké et reconstruit [...] ultérieurement dans le même environnement informatique ou dans un autre.

Je ne trouve pas la raison de leur nom directement sur la FAQ Hydrate , mais j'ai des indices sur leur intention. Je pense qu'ils ont choisi le nom "Hydrate" parce que l'objectif de la bibliothèque est similaire à celui du populaire sound-alike Hibernate framework , mais il a été conçu avec le flux de travail exactement opposé à l'esprit.

La plupart des ORM, y compris Hibernate, adoptent une approche orientée modèle en mémoire, la base de données prenant la deuxième considération. La bibliothèque Hydrate adopte plutôt une approche orientée base de schéma, préservant vos structures de données relationnelles et permettant à votre programme de fonctionner par dessus plus proprement.

Métaphoriquement parlant, toujours en ce qui concerne le nom de cette bibliothèque: Hydrater est comme "faire quelque chose de prêt à utiliser" (comme réhydrater aliments secs) ). C'est un opposé métaphorique de Hibernate , qui s'apparente davantage à "mettre quelque chose de côté pour l'hiver" (comme Hibernation animale ) .

La décision de nommer la bibliothèque Hydrate, pour autant que je sache, ne concernait pas le terme générique de programmation informatique "hydrate".

Lorsque vous utilisez le terme générique de programmation "hydrate", les optimisations de performances sont généralement la motivation (ou le débogage des optimisations existantes). Même si la bibliothèque prend en charge le contrôle granulaire du moment et du mode de remplissage des objets avec des données, le timing et les performances ne semblent pas être la principale motivation du nom ou des fonctionnalités de la bibliothèque. La bibliothèque semble plus intéressée par l’activation du mappage de bout en bout et de la préservation du schéma.

97

L'hydratation fait référence au processus de remplissage d'un objet avec des données. Un objet qui n'a pas encore été hydraté a été instancié et représente une entité qui a des données, mais les données n'ont pas encore été chargées dans l'objet. C'est quelque chose qui est fait pour des raisons de performance.

De plus, le terme hydratation est utilisé lors de la discussion des projets de chargement de données à partir de bases de données ou d’autres sources de données. Voici quelques exemples:

Vous pouvez dire qu'un objet est partiellement hydraté lorsque vous n'y avez chargé que certains champs, mais pas tous. Cela peut être fait car ces autres champs ne sont pas nécessaires pour vos opérations en cours. Il n’ya donc aucune raison de gaspiller de la bande passante et des cycles de processeur lors du chargement, du transfert et de la configuration de ces données quand elles ne seront pas utilisées.

En outre, certains ORM, tels que Doctrine, n'hydratent pas les objets lorsqu'ils sont instanciés, mais uniquement lorsque l'utilisateur accède aux données dans cet objet. C’est une méthode qui aide à ne pas charger les données qui ne seront pas utilisées.

201
Erick Robertson

Comme Merlyn l’a mentionné, c’est un langage un peu redondant, mais, selon mon expérience, il s’agit niquement remplir/remplir un objet, et non l’instancier/le créer; il s’agit donc d’un mot utile lorsque vous devez être précis.

42
J. Dimeo

C'est une question assez ancienne, mais il semble qu'il y ait toujours une confusion quant au sens des termes suivants. Si tout va bien, cela désambiguera.

Hydrate

Lorsque vous voyez des descriptions qui disent, par exemple, "un objet qui attend des données attend de s'hydrater", c'est déroutant et trompeur. Les objets n'attendent pas les choses et l'hydratation consiste simplement à remplir un objet avec des données.

En utilisant JavaScript comme exemple:

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

Tout ce qui ajoute des valeurs à obj le "hydrate". J'utilise simplement Object.assign() dans cet exemple.

Sérialiser

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

désérialiser

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