This is a legacy Trac instance left read-only for reference purposes. More info. dev main | home

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ć?