シリアライズ第7回〜バージョンアップに耐える〜


目次に戻る


今日からバージョンアップで保存すべきデータが増えた時にプログラムの変更を極力抑える方法を紹介していきます。
 
しかし、本来ならデータ構造が変わるようなバージョンアップは控えた方が良いのです。プログラマ(SEじゃないよ)の間では仕様変更がソフトの質を落とすということはもはや一般常識です。バージョンアップ −> 機能追加 −> 仕様変更 −> 質の低下。つまりバージョンアップというのはソフトウェアの質を下げるってことなんですねぇ。そんなわけで、プログラマはバージョンアップをしても極力質が下がらないよう日々苦労するわけです。
 
では、どうすれば良いのか。
手っ取り早いのが保存するデータの頭にバージョン番号を付加する事です。読み出し側は先頭のバージョン番号を確認して読み込みルーチンを決定する方法です。
保存部分の概略
/* バージョンの指定 */
version = 1;

/* ファイルを開く */
fp = fopen( FILENAME , "wb" );

/* バージョン番号を書き込む */
fwrite( &version , sizeof( version ) , 1 , fp );

/*
 * データを書き込む
 */

/* ファイルを閉じる */
fclose( fp );

読み込み部分の概略
/* ファイルを開く */
fp = fopen( FILENAME , "rb" );

/* バージョン番号を読み込む */
fread( &version , sizeof( version ) , 1 , fp );

/* バージョン番号によって場合分け */
switch( version ){
    case 1:
        /*
         * バージョン1の読み込みルーチン
         */
        break;
    case 2:
        /*
         * バージョン2の読み込みルーチン
         */
        break;
    default:
        /*
         * 対応していないバージョンを読み込んだときの処理
         */
        break;
}

/* ファイルを閉じる */
fclose( fp );

この方法の欠点は読み込み部分がやたらと長くなることです。プログラムのバージョンがあがればあがるほど読み込み部分が大きくなるのではたまったもんじゃありません。
 
続きは明日。

目次に戻る