Serializację widzę mniej więcej w ten sposób:
- serializujemy dane binarnie
- nie martwimy się o kompatybilność wsteczną między wersjami WaterWorld
- korzystamy z stdio
- kod zewnętrzny musi wykonać wyłącznie world.serialize(FILE*)
- każda klasa wywołuje serializację wszystkich pól które są klasami oraz zrzuca pola typów prostych
- każda klasa potomna wywołuje serializację klasy bazowej
- każdy interfejs zawiera serializację pól zdefiniowanych w tymże interfejsie
- deserializcja jest prostym odwróceniem procesu serializacji
Ja widzę to w ten sposób:
- korzystamy z boost::serialization
- dane mogą być serializowane w formacie binarnym, xml lub tekstowym, do dowolnego strumienia ( pliku, socketa, pipe'a )
- nie martwimy się o kompatybilność między wersjami WaterWorld
przykłady: http://www.boost.org/doc/libs/1_39_0/libs/serialization/doc/tutorial.html#simplecase
(mjoach)
- jeśli chodzi o kompatybilność wsteczną między wersjami to owszem, nie martwimy się tym na obecnym poziomie rozwoju systemu, zbyt kosztowne
- zapisujemy jednak na początku pliku numer wersji świata oraz numer modelu kontrolera animata, tak żeby deserializujące się zaraz po tym klasy miały już dostęp do tej wartości i mogły wykonać coś warunkowo - pozwoli mi to później dodawać proste mechanizmy kompatybilności wstecznej dla pomniejszych wariacji modelu
- boost::serialization wygląda bardzo zgrabnie, komuś przychodzą do głowy argumenty żeby go nie używać?
