Quand quelqu'un parle d'hydrater un objet, qu'est-ce que cela signifie?
Je vois un projet Java appelé Hydrate sur le web qui transforme les données entre différentes représentations (RDMS en OOPS en XML). Est-ce là le sens général de l'hydratation des objets; transformer des données entre représentations? Cela pourrait-il signifier reconstruire une hiérarchie d'objets à partir d'une représentation stockée?
Réponses:
En ce qui concerne le terme plus générique hydrate
Hydrater un objet, c'est prendre un objet qui existe en mémoire, qui ne contient pas encore de données de domaine ("vraies" données), puis le remplir avec des données de domaine (comme 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:
Si vous n'avez pas à vous soucier des performances fulgurantes et que vous ne déboguez pas les optimisations de performances qui se trouvent dans les internes d'une API d'accès aux données, vous n'avez probablement pas besoin de traiter explicitement l'hydratation. Vous utiliseriez généralement la désérialisation place pour pouvoir écrire moins de code. Certaines API d'accès aux données ne vous offrent pas cette option, et dans ces cas, vous devrez également appeler explicitement l'étape d'hydratation vous-même.
Pour un peu plus de détails sur le concept d'hydratation, voir la réponse d'Erick Robertson sur cette même question.
En ce qui concerne le projet Java appelé hydrate
Vous avez posé des questions sur ce cadre en particulier, alors je l'ai examiné.
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, cette utilisation n'est pas entièrement exacte:
Voir: http://en.wikipedia.org/wiki/Serialization
Je ne trouve pas la raison de leur nom directement sur la FAQ Hydrate , mais j'ai eu des indices sur leur intention. Je pense qu'ils ont choisi le nom "Hydrate" parce que le but de la bibliothèque est similaire au cadre Hibernate populaire , mais il a été conçu avec le flux de travail opposé exact à l'esprit.
La plupart des ORM, Hibernate inclus, adoptent une approche orientée modèle objet en mémoire, la base de données prenant la seconde considération. La bibliothèque Hydrate adopte à la place une approche orientée schéma de base de données, 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: Hydrate est comme "faire quelque chose de prêt à l'emploi" (comme réhydrater les aliments secs ). C'est un opposé métaphorique d' Hibernate , qui ressemble plus à «ranger quelque chose pour l'hiver» (comme Animal Hibernation ).
La décision de nommer la bibliothèque Hydrate, pour autant que je sache, ne concernait pas le terme de programmation informatique générique "hydrate".
Lorsque vous utilisez le terme de programmation informatique générique "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 un contrôle granulaire sur le moment et la manière dont les objets sont remplis de données, le moment 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 soucieuse d'activer le mappage de bout en bout et la préservation du schéma.
la source
deserialization == instantiation + hydration
@foo
n'est pas nécessaire pour répondre à l'auteur du message.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 possède 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 performances.
De plus, le terme hydratation est utilisé lors de l'examen des plans de chargement des données à partir de bases de données ou d'autres sources de données. Voici quelques exemples:
Vous pourriez 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 actuelles. Il n'y a donc aucune raison de gaspiller la bande passante et les cycles de processeur en chargeant, transférant et définissant ces données lorsqu'elles ne seront pas utilisées.
De plus, il existe certains ORM, tels que Doctrine, qui n'hydratent pas les objets lorsqu'ils sont instanciés, mais uniquement lorsque les données sont accessibles dans cet objet. Il s'agit d'une méthode qui permet de ne pas charger de données qui ne seront pas utilisées.
la source
Bien qu'il soit quelque peu vernaculaire redondant comme l'a mentionné Merlyn, selon mon expérience, il se réfère uniquement au remplissage / remplissage d'un objet, pas à son instanciation / création, c'est donc un mot utile lorsque vous devez être précis.
la source
deserialization == instantiation + hydration
).C'est une question assez ancienne, mais il semble qu'il y ait encore confusion sur la signification des termes suivants. Espérons que cela va lever l'ambiguïté.
Hydrater
Lorsque vous voyez des descriptions qui disent des choses comme «un objet qui attend des données, attend d'être hydraté», c'est déroutant et trompeur. Les objets n'attendent pas les choses, et l'hydratation n'est que l'acte de remplir un objet avec des données.
Utiliser JavaScript comme exemple:
Tout ce qui ajoute de la valeur,
obj
c'est «l'hydrater». J'utilise justeObject.assign()
dans cet exemple.Étant donné que les termes «sérialiser» et «désérialiser» ont également été mentionnés dans d'autres réponses, voici des exemples pour aider à lever l'ambiguïté de la signification de ces concepts de l'hydratation:
Sérialiser
Désérialiser
la source