Доброго времени суток
Программа должна сохранять некоторую информацию в собственном формате. По мере развития софта, код будет меняться, набор сохраняемых данных (собственно формат файла) соответственно тоже будет меняться.
Требуется обеспечить в будущих версиях поддержку старых форматов файла. Пользователь должен иметь возможность создать файл «старой версии» отказавших от некоторых плюшек неподдерживаемых старой версией. И, самое главное, пользователь должен иметь возможность прочитать «старую версию» файла новой версией программы.
Пока получается такая не хитрая картина
// fmtv0.h
namespace Tool
{
namespace FileFormat
{
namespace Version0
{
const int Version = 0;
struct SomeData0
{
char a;
};
struct SomeData1
{
char a;
};
};
};
};
// fmtv1.h
#include <fmtv0.h>
namespace Tool
{
namespace FileFormat
{
namespace Version1
{
const int Version = 1;
typedef Version0::SomeData0 SomeData0;
struct SomeData1
{
int b;
};
struct SomeData2
{
BYTE a[10];
};
};
};
};
// fmt.h
#include <fmtv0.h>
#include <fmtv1.h>
namespace Tool
{
namespace FileFormat
{
namespace CurrentVersion = Version0;
};
};
Сейчас дело дошло до классов читателя и писателя – требуется аналогичное разделение.
Появилось подозрение, что в итоге половина кода будет иметь такое разделение.
Короче.. Как правильно организовать поддержку формата файла старой версии? Есть какие-нибудь паттерны на эту тему? Или мой подход не совсем ужасен?
В общем, любые идеи будут интересны.
Спасибо.