четверг, 17 июля 2014 г.

Сериализация. "По мотивам"

http://programmingmindstream.blogspot.ru/2014/07/blog-post_16.html?showComment=1405578068219#c3988161837922350712

Зачем? Этот вопрос надо задать "миллионам людей", которые почему-то "предпочитают бинарную сериализацию". Почему? Вот я тоже хотел бы их спросить. Я на такой код насмотрелся - "выше крыши". И "у нас" и "у других людей".

Потому и написал этот пост.

Насчёт "из коробки" - конечно МОЖНО. Но тут есть "тонкости".

Во-первых "из коробки" это и есть уже "некая схема данных".
Во-вторых - вы про published или про "новый RTTI"?

Если про Published - там тоже есть тонкости - например TPersistent. Который далеко не всегда "подходит для наследования". Посему - тут тоже есть о чём поговорить - либо "примеси", либо "зеркальные объекты". Ну или $M+, но это уже тоже "не из коробки".

Ну и про TPersistent - надо ещё "помнить" про RegisterClass.

Если про "новый RTTI", то тем более - потому, что "сериализовать" обычно надо не всё, а лишь что-то. Т.е. это либо "атрибуты" типа [Serealizeable], либо - "мапа". Что тоже является "схемой данных".

За словами "схема данных" (которая - "непонятная") - "скрываются" - во-первых "мапинг" или указание что сериализуется, а что нет, а во-вторых "отцепление" сериализуемых классов непосредственно от TStream. Не зря я про TReader и TWriter написал. Намекая на "сериализацию" от Borland/Embarcadero.

Зачем нужно "отцеплять"? Затем, чтобы не возиться в КАЖДОМ классе с "версионностью" и сменой "формата" (изменение SizeOf - в частности).

Подробнее уже стоит читать у Срауструпа или GoF.

И ещё раз повторю - "пост родился не на ПУСТОМ МЕСТЕ". На случаи "бинарной сериализации" там где она МЕШАЕТ ЖИТЬ - я насмотрелся - "выше крыши".

И ещё - http://programmingmindstream.blogspot.ru/2014/07/blog-post_16.html?showComment=1405633036027#c3831967224899189431

Комментариев нет:

Отправить комментарий