¿Qué significa hidratar un objeto?

7 minutos de lectura

avatar de usuario
Jim

Cuando alguien habla de hidratar un objeto, ¿qué significa eso?

Veo un proyecto de Java llamado Hydrate en la web que transforma datos entre diferentes representaciones (RDMS a OOPS a XML). ¿Es este el significado general de la hidratación del objeto; transformar datos entre representaciones? ¿Podría significar reconstruir una jerarquía de objetos a partir de una representación almacenada?

  • Por favor, vea también esta pregunta, que tiene una gran respuesta. No es exactamente la misma pregunta, así que no voy a votar para cerrar. Pero explica bien la hidratación: stackoverflow.com/questions/4929243/…

    –Erick Robertson

    27 de diciembre de 2013 a las 15:06

  • Creo que es la misma pregunta: “qué significa hidratar”. Votación para cerrar.

    – TylerH

    8 de julio a las 18:57

  • ¿Responde esto a tu pregunta? Aclaración de terminología: ¿Qué significa “hidratar” una entidad JPA o Hibernate al obtener la entidad de la base de datos?

    – TylerH

    8 de julio a las 18:57

La hidratación se refiere al proceso de llenar un objeto con datos. Se ha creado una instancia de un objeto que aún no se ha hidratado y representa una entidad que tiene datos, pero los datos aún no se han cargado en el objeto. Esto es algo que se hace por razones de rendimiento.

Además, el término hidratación se usa cuando se analizan planes para cargar datos de bases de datos u otras fuentes de datos. Aquí hay unos ejemplos:

Podría decir que un objeto está parcialmente hidratado cuando solo ha cargado algunos de los campos en él, pero no todos. Esto se puede hacer porque esos otros campos no son necesarios para sus operaciones actuales. Por lo tanto, no hay razón para desperdiciar ancho de banda y ciclos de CPU cargando, transfiriendo y configurando estos datos cuando no se van a utilizar.

Además, hay algunos ORM, como Doctrine, que no hidratan los objetos cuando se instancian, sino solo cuando se accede a los datos en ese objeto. Este es un método que ayuda a no cargar datos que no se van a utilizar.

  • +1; Esta es una respuesta más completa que la mía, en el contexto de Java e Hidratación. Todavía es completamente sinónimo del término general deserialización, como indicó mi respuesta, pero se usa más comúnmente en ORM. Esto se debe a que las API de ORM a menudo ofrecen control sobre el conjunto de datos que recuperan, lo que le permite reutilizar una asignación de objetos existente en lugar de tener que escribir nuevas asignaciones para cada consulta que escriba. Es posible que desee mencionar que está hablando de “carga diferida”, ya que estas preguntas y respuestas tienen que ver con la terminología 🙂

    – Merlyn Morgan-Graham

    26 de diciembre de 2013 a las 21:37


  • ¿Es correcto llamar a un proceso opuesto de obtener datos del objeto: extracción? Extraer datos del objeto.

    – Oleg Abrazhev

    20 de julio de 2016 a las 9:08

avatar de usuario
Merlyn Morgan Graham

Con respecto al término más genérico hidratar

Hidratar un objeto es tomar un objeto que existe en la memoria, que aún no contiene ningún dato de dominio (datos “reales”) y luego llenarlo con datos de dominio (como de una base de datos, de la red o de un archivo sistema).

De los comentarios de Erick Robertson sobre esta respuesta:

deserialización == instanciación + hidratación

Si no necesita preocuparse por el rendimiento vertiginoso y no está depurando las optimizaciones de rendimiento que se encuentran en el interior de una API de acceso a datos, entonces probablemente no necesite tratar la hidratación explícitamente. Normalmente usarías deserialización en su lugar para que pueda escribir menos código. Algunas API de acceso a datos no le brindan esta opción y, en esos casos, también tendría que llamar explícitamente al paso de hidratación usted mismo.

Para obtener más detalles sobre el concepto de hidratación, consulte la respuesta de Erick Robertson sobre esta misma pregunta.

Con respecto a el proyecto Java llamado hidrato

Preguntaste sobre este marco específicamente, así que lo investigué.

Hasta donde puedo decir, no creo que este proyecto haya usado la palabra “hidrato” en un sentido muy genérico. Veo su uso en el título como un sinónimo aproximado de “serialización”. Como se explicó anteriormente, este uso no es del todo exacto:

Ver: http://en.wikipedia.org/wiki/Serialización

traducir estructuras de datos o estado de objetos a un formato que se pueda almacenar […] y reconstruido posteriormente en el mismo u otro entorno informático.

No puedo encontrar la razón detrás de su nombre directamente en Preguntas frecuentes sobre hidratos, pero tengo pistas sobre su intención. Creo que eligieron el nombre “Hydrate” porque el propósito de la biblioteca es similar al popular sonido similar marco de hibernaciónpero fue diseñado con el flujo de trabajo exactamente opuesto en mente.

La mayoría de los ORM, incluido Hibernate, adoptan un enfoque orientado al modelo de objetos en memoria, y la base de datos tiene una segunda consideración. En cambio, la biblioteca Hydrate adopta un enfoque orientado al esquema de la base de datos, preservando sus estructuras de datos relacionales y permitiendo que su programa funcione sobre ellas de manera más limpia.

Hablando metafóricamente, aún con respecto al nombre de esta biblioteca: Hidratar es como “preparar algo listo para usar” (como rehidratar Alimentos secos). Es un opuesto metafórico de Hibernarque es más como “guardar algo para el invierno” (como Hibernación de animales).

La decisión de nombrar la biblioteca Hidratar, por lo que puedo decir, no estaba relacionada con el término genérico de programación de computadoras “hidrato”.

Cuando se usa el término genérico de programación informática “hidratar”, las optimizaciones de rendimiento suelen ser la motivación (o la depuración de las optimizaciones existentes). Incluso si la biblioteca admite un control granular sobre cuándo y cómo se llenan los objetos con datos, el tiempo y el rendimiento no parecen ser la motivación principal para el nombre o la funcionalidad de la biblioteca. La biblioteca parece más preocupada por habilitar el mapeo de extremo a extremo y la preservación de esquemas.

  • -1 La hidratación se refiere a llenar un objeto existente con datos. No es un sinónimo de serialización.

    –Erick Robertson

    26 de diciembre de 2013 a las 15:17

  • Tampoco es sinónimo de deserialización. La deserialización consiste en crear el objeto con los datos que tenía en el momento de su serialización. La hidratación se refiere a cómo llenas un objeto con datos. Es una diferencia sutil, pero es una diferencia. No puede, por ejemplo, deserializar parcialmente un objeto. (al menos, no a través de ninguna API estándar)

    –Erick Robertson

    27 de diciembre de 2013 a las 5:24


  • Todos estamos tratando de aprender. Si creo que no es necesario, lo eliminaré y agradezco la discusión. Mi respuesta no está centrada en Java, ya que en su mayoría he usado el término “hidratación” con respecto a PHP en realidad. La respuesta a la pregunta “¿Qué significa hidratar un objeto?” es “llenar un objeto existente con datos”. El objeto tiene que existir antes de que puedas hidratarlo, lo que no es cierto para la deserialización. deserialization == instantiation + hydration

    –Erick Robertson

    27 de diciembre de 2013 a las 14:45

  • Lo siento, tengo un problema al etiquetarte en esta respuesta, Merlyn Morgan-Graham. Se elimina cuando lo guardo. También estoy en desacuerdo con que la inflación se equipare a la deserialización. Edité el artículo de Wikipedia vinculado para eliminar el reclamo sin fuente. Inflar para mí implica algún tipo de rutina de descompresión. Una rutina de serialización es ortogonal a la compresión.

    –Erick Robertson

    27 dic 2013 a las 15:00

  • @ErickRobertson Nota al margen: el @foo no es necesario al responder al autor de la publicación.

    –Duncan Jones

    29 de enero de 2014 a las 16:17


Si bien es algo vernáculo redundante como mencionó Merlyn, en mi experiencia se refiere solamente para llenar/poblar un objeto, no instanciarlo/crearlo, por lo que es una palabra útil cuando necesita ser preciso.

  • Cambié de opinión y ahora estoy de acuerdo en que esta respuesta es más precisa que mi respuesta anterior. Desde entonces, edité mi respuesta (ya que fue aceptada y quiero que sea precisa). Ahora, con suerte, ahora refleja la diferencia entre deserialización e hidratación (en particular, deserialization == instantiation + hydration).

    – Merlyn Morgan-Graham

    21 de julio de 2016 a las 6:28

En PHP, puede crear una nueva clase a partir de su nombre, sin invocar al constructor, así:

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

Luego, puedes hidratarte invocando setters (o atributos públicos)

  • Gran ventaja para ejemplos de la vida real.

    – Geocódigo

    20 de septiembre de 2020 a las 8:35

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad