Cara sederhana untuk mencapai kemiripan versi adalah dengan memahami anggota objek yang Anda serialkan. Jika kode Anda memiliki pemahaman tentang berbagai jenis data yang akan diserialkan, Anda bisa mendapatkan ketahanan tanpa melakukan terlalu banyak pekerjaan.
Katakanlah kita memiliki objek berseri yang terlihat seperti ini:
ObjectType
{
m_name = "a string"
m_size = { 1.2, 2.1 }
m_someStruct = {
m_deeperInteger = 5
m_radians = 3.14
}
}
Seharusnya mudah untuk melihat bahwa tipe ObjectType
memiliki data yang dipanggil anggota m_name
, m_size
dan m_someStruct
. Jika Anda dapat mengulang atau menghitung anggota data selama waktu berjalan (entah bagaimana) maka saat membaca file ini Anda dapat membaca dalam nama anggota dan mencocokkannya dengan anggota aktual dalam instance objek Anda.
Selama fase pencarian ini jika Anda tidak menemukan anggota data yang cocok Anda dapat dengan aman mengabaikan bagian file penyimpanan ini. Sebagai contoh katakanlah versi 1.0 dari SomeStruct
memiliki anggota m_name
data. Kemudian Anda menambal dan anggota data ini telah dihapus seluruhnya. Saat memuat file simpan Anda, Anda akan menemukan m_name
dan mencari anggota yang cocok dan tidak menemukan yang cocok. Kode Anda dapat dengan mudah beralih ke anggota berikutnya dalam file tanpa mogok. Ini memungkinkan Anda menghapus anggota data tanpa khawatir merusak file lama.
Demikian pula jika Anda menambahkan tipe data anggota baru dan mencoba memuat dari file penyimpanan lama, kode Anda mungkin tidak menginisialisasi anggota baru. Ini dapat dimanfaatkan untuk keuntungan: anggota data baru dapat dimasukkan ke dalam menyimpan file selama penambalan secara manual, mungkin dengan memperkenalkan nilai default (atau dengan cara yang lebih cerdas).
Format ini juga memungkinkan menyimpan file dengan mudah dimanipulasi atau dimodifikasi dengan tangan; urutan di mana anggota data tidak benar-benar berkaitan dengan validitas rutin serialisasi. Setiap anggota melihat ke atas dan diinisialisasi secara independen. Ini mungkin kebaikan yang menambahkan sedikit kekokohan ekstra.
Semua ini dapat dicapai melalui beberapa bentuk introspeksi jenis. Anda ingin dapat meminta anggota data dengan pencarian string, dan dapat mengetahui tipe data sebenarnya dari anggota data tersebut. Ini dapat dicapai dalam C ++ menggunakan bentuk introspeksi khusus, dan bahasa lain mungkin memiliki fasilitas introspeksi bawaan.