2017年3月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

最近のトラックバック

無料ブログはココログ

« 2007年10月13日 | トップページ | 2007年11月25日 »

2007年10月21日 (日)

OuDia開発の経緯-13 Undoの最適化(2005年9月8日)

 以前も記しましたが、初期のOuDiaは現在のものに比べてかなり動作が重いものでした。特に重かったのが [編集]-[元に戻す] の動作、いわゆるUndo(アンドゥ)機能でした。

 当時のUndo機能が遅い理由は明白でした。このころのOuDiaは、編集動作ごとに路線データ全部をメモリ上に保存し、Undo動作が行われた時には路線データ全部をUndoデータから読み出して上書きしていたからです。
 補足しますと、『路線データ全部』というのは、全部の駅・全列車種別のデータ・及び全ダイヤの全列車の全駅の発車時刻を含みます。また、『編集動作』とは駅の追加・削除・修正から列車の駅時刻の1分の変更までを含めた、『路線ファイル』に保存されるデータのあらゆる変更動作を指します。
 列車本数の多い路線のデータを入力していると、データ量は次第に多くなっていき、それに従って編集動作が遅くなっていくのでした。

 解決方法も明白です。編集動作ごとに保存するデータを、Undoに最低限必要なデータに減らせばいいのです。たとえばある列車のある駅の時刻を変更した場合、Undoに最低限必要なデータは、『どのダイヤのどの列車のどの駅の時刻を何分変更したか』ということだけです。これなら、『路線データ全部』に比べてデータ量は大幅に減らせます。
 しかし、OuDiaの『編集動作』は、小は列車の駅時刻の1分の変更から、大は駅の追加までいろんな種類があり、それによって『Undoに最低限必要なデータ』は変わります。特に駅の追加・削除は、その時点で存在する全ダイヤ・全列車の駅時刻の変更につながります。これらをうまく管理できるような設計を考える必要がありました。

 そんななか、大阪の某大型書店のコンピュータのフロアで、『デザインパターン』に関する書籍を目にしました。『デザインパターン』とは、ソフトウエアの設計ノウハウをまとめたものです。
 このうち、Undoの最適化に役立つものはないかと探した結果、OuDiaでは『 Memento パターン』と『Command パターン』を参考にしてUndoの再設計を行いました。これがうまく当たり、Undoを含めた編集動作全体を軽快にすることができたのでした。

« 2007年10月13日 | トップページ | 2007年11月25日 »