Apa artinya menghidrasi suatu benda?

205

Ketika seseorang berbicara tentang menghidrasi suatu benda, apa artinya itu?

Saya melihat proyek Java yang disebut Hydrate di web yang mengubah data antara representasi yang berbeda (RDMS ke OOPS ke XML). Apakah ini arti umum dari hidrasi objek; untuk mengubah data antar representasi? Bisakah itu berarti merekonstruksi hierarki objek dari representasi yang disimpan?

Jim
sumber
3
Silakan juga lihat pertanyaan ini, yang memiliki jawaban yang bagus. Ini bukan pertanyaan yang sama, jadi saya tidak memilih untuk menutup. Tapi itu menjelaskan hidrasi dengan baik: stackoverflow.com/questions/4929243/…
Erick Robertson

Jawaban:

124

Sehubungan dengan istilah hidrat yang lebih umum

Menghidrasi suatu objek adalah mengambil objek yang ada di memori, yang belum mengandung data domain apa pun (data "nyata"), dan kemudian mengisinya dengan data domain (seperti dari database, dari jaringan, atau dari file sistem).

Dari komentar Erick Robertson tentang jawaban ini:

deserialisasi == instantiation + hidrasi

Jika Anda tidak perlu khawatir tentang kinerja terik, dan Anda tidak men-debug optimisasi kinerja yang ada di internal API akses data, maka Anda mungkin tidak perlu berurusan dengan hidrasi secara eksplisit. Anda biasanya akan menggunakan deserialization sehingga Anda dapat menulis lebih sedikit kode. Beberapa API akses data tidak memberi Anda opsi ini, dan dalam kasus-kasus itu Anda juga harus secara eksplisit memanggil langkah hidrasi sendiri.

Untuk sedikit lebih detail tentang konsep Hidrasi, lihat jawaban Erick Robertson pada pertanyaan yang sama.

Sehubungan dengan proyek Java disebut hidrat

Anda bertanya tentang kerangka kerja ini secara khusus, jadi saya memeriksanya.

Sejauh yang saya tahu, saya tidak berpikir proyek ini menggunakan kata "hidrat" dalam arti yang sangat umum. Saya melihat penggunaannya dalam judul sebagai perkiraan sinonim untuk "serialisasi". Seperti dijelaskan di atas, penggunaan ini tidak sepenuhnya akurat:

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

menerjemahkan struktur data atau status objek ke dalam format yang dapat disimpan [...] dan kemudian direkonstruksi di lingkungan komputer yang sama atau yang lain.

Saya tidak dapat menemukan alasan di balik nama mereka langsung di FAQ Hydrate , tetapi saya mendapat petunjuk tentang niat mereka. Saya pikir mereka memilih nama "Hydrate" karena tujuan perpustakaan mirip dengan kerangka kerja Hibernate yang mirip suara populer , tapi itu dirancang dengan alur kerja yang berlawanan dalam pikiran.

Sebagian besar ORM, termasuk Hibernate, mengambil pendekatan berorientasi objek-model dalam memori, dengan basis data mengambil pertimbangan kedua. Sebaliknya pustaka Hydrate mengambil pendekatan berorientasi database-skema, melestarikan struktur data relasional Anda dan membiarkan program Anda bekerja di atasnya dengan lebih bersih.

Secara metaforis, masih sehubungan dengan nama perpustakaan ini: Hydrate seperti "membuat sesuatu siap digunakan" (seperti re-hydrating Dried Foods ). Ini adalah kebalikan metaforis dari Hibernate , yang lebih seperti "meletakkan sesuatu untuk musim dingin" (seperti Hibernasi Hewan ).

Keputusan untuk menamai perpustakaan Hydrate, sejauh yang saya tahu, tidak peduli dengan istilah pemrograman komputer generik "hidrat".

Saat menggunakan istilah pemrograman komputer generik "hidrat", optimisasi kinerja biasanya merupakan motivasi (atau men-debug optimisasi yang ada). Bahkan jika perpustakaan mendukung kontrol granular tentang kapan dan bagaimana objek diisi dengan data, waktu dan kinerja tampaknya tidak menjadi motivasi utama untuk nama atau fungsi perpustakaan. Perpustakaan tampaknya lebih peduli dengan memungkinkan pemetaan ujung-ke-ujung dan pelestarian skema.

Merlyn Morgan-Graham
sumber
79
-1 Hidrasi mengacu pada mengisi objek yang ada dengan data. Ini bukan sinonim untuk serialisasi.
Erick Robertson
20
Ini juga bukan sinonim untuk deserialisasi. Deserialisasi melibatkan pembuatan objek dengan data yang dimilikinya pada saat serialisasi. Hidrasi mengacu pada cara Anda mengisi objek dengan data. Ini perbedaan yang halus, tetapi itu perbedaan. Anda tidak dapat, misalnya, melakukan deserialisasi sebagian objek. (setidaknya, tidak melalui API standar apa pun)
Erick Robertson
5
Kita semua berusaha belajar. Jika saya yakin itu tidak perlu, saya akan menghapusnya, dan saya menghargai diskusi ini. Jawaban saya bukan Java-sentris, karena saya sebagian besar telah menggunakan istilah "hidrasi" berkaitan dengan PHP sebenarnya. Jawaban untuk pertanyaan "Apa artinya menghidrasi suatu objek?" adalah "mengisi objek yang ada dengan data." Objek harus ada sebelum Anda dapat menghidrasi, yang tidak benar untuk deserialisasi. deserialization == instantiation + hydration
Erick Robertson
2
Maaf, saya mengalami masalah memberi tag Anda pada jawaban ini, Merlyn Morgan-Graham. Itu dihapus ketika saya menyimpannya. Saya juga mengambil masalah dengan inflasi yang disamakan dengan deserialisasi. Saya mengedit artikel Wikipedia yang tertaut untuk menghapus klaim yang tidak bersumber. Menggembungkan kepada saya menyiratkan semacam rutin dekompresi. Rutin serialisasi adalah ortogonal terhadap kompresi.
Erick Robertson
2
@ErickRobertson Catatan samping: @footidak diperlukan ketika menanggapi penulis posting.
Duncan Jones
230

Hidrasi mengacu pada proses mengisi objek dengan data. Objek yang belum terhidrasi telah dipakai dan mewakili entitas yang memiliki data, tetapi data belum dimuat ke dalam objek. Ini adalah sesuatu yang dilakukan karena alasan kinerja.

Selain itu, istilah hidrasi digunakan ketika membahas rencana untuk memuat data dari basis data atau sumber data lainnya. Berikut ini beberapa contohnya:

Anda bisa mengatakan bahwa suatu objek terhidrasi sebagian ketika Anda hanya memuat beberapa bidang ke dalamnya, tetapi tidak semuanya. Ini dapat dilakukan karena bidang-bidang lain tidak diperlukan untuk operasi Anda saat ini. Jadi tidak ada alasan untuk membuang bandwidth dan siklus CPU memuat, mentransfer, dan mengatur data ini ketika itu tidak akan digunakan.

Selain itu, ada beberapa ORM, seperti Doctrine, yang tidak menghidrasi objek ketika mereka dipakai, tetapi hanya ketika data diakses di objek itu. Ini adalah salah satu metode yang membantu untuk tidak memuat data yang tidak akan digunakan.

Erick Robertson
sumber
7
+1; Ini adalah jawaban yang lebih lengkap daripada milik saya, dalam konteks Java dan Hydration. Ini masih sepenuhnya identik dengan deserialisasi istilah umum, seperti jawaban saya nyatakan, tetapi paling umum digunakan dalam ORM. Ini karena ORM API sering menawarkan kontrol atas set data yang mereka ambil, memungkinkan Anda untuk menggunakan kembali pemetaan objek yang sudah ada daripada harus menulis pemetaan baru untuk setiap permintaan yang Anda tulis. Mungkin ingin menyebutkan bahwa Anda sedang berbicara tentang "pemuatan malas", karena T&J ini adalah tentang terminologi :)
Merlyn Morgan-Graham
1
Apakah benar memanggil proses yang berlawanan untuk mendapatkan data dari ekstraksi objek? Ekstrak data dari objek.
Oleg Abrazhaev
43

Meskipun ini agak redundan seperti yang disebutkan Merlyn, dalam pengalaman saya itu hanya merujuk pada mengisi / mengisi objek, bukan membuat / menciptakannya, jadi itu adalah kata yang berguna ketika Anda harus tepat.

J. Dimeo
sumber
5
Saya berubah pikiran, dan sekarang saya setuju bahwa jawaban ini lebih akurat daripada jawaban lama saya. Saya telah mengedit jawaban saya (sejak diterima, dan saya ingin itu akurat). Sekarang mudah-mudahan sekarang mencerminkan perbedaan antara deserialisasi dan hidrasi (khususnya, deserialization == instantiation + hydration).
Merlyn Morgan-Graham
8

Ini adalah pertanyaan yang cukup lama, tetapi tampaknya masih ada kebingungan tentang arti dari istilah-istilah berikut. Semoga ini akan ambigu.

Hidrat

Ketika Anda melihat deskripsi yang mengatakan hal-hal seperti, "objek yang menunggu data, sedang menunggu untuk terhidrasi", itu membingungkan dan menyesatkan. Objek tidak menunggu hal-hal, dan hidrasi hanyalah tindakan mengisi objek dengan data.

Menggunakan JavaScript sebagai contoh:

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

Apa pun yang menambah nilai objadalah "menghidrasi" itu. Saya hanya menggunakan Object.assign()contoh ini.

Karena istilah "cerita bersambung" dan "deserialisasi" juga disebutkan dalam jawaban lain, berikut adalah contoh untuk membantu mengaburkan makna konsep-konsep tersebut dari hidrasi:

Serialkan

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

Deserialize

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