ストレージ定義の変更による危険性
背景
先日、ObjectScript の永続(Persistent)クラスのプロパティを編集していたところ、ストレージ定義が最後の変更を反映するように更新されていないことに気づきました。
この場合、クラス定義に不要となったプロパティを削除した上で保存し、再コンパイルしましたが、それでもストレージ定義に残ったままになっていました。
それでも焦ることはありませんでした。 ストレージ定義がコンパイル時に自動生成されるのであれば、それを_削除_して、クラスを再コンパイルすればよいからです。 もちろん、この後、削除されたプロパティはストレージ定義に表示されなくなりました。
問題解決... ですよね?
(ブブー、間違いです)
後になって、このアプローチはクラスにデータが保存されていないときに機能することがわかりました。 ただし、既存のデータがあるのであれば、重大なデータ参照の問題が発生する可能性があります。
そもそもストレージ定義とは?
ストレージ定義はクラスプロパティとデータベース内のその物理ストレージ場所をリンクするマップとして機能します。
複数のスロットのある本棚とどのスロットに本が収まっているかを追跡するためのリストがあるとします。 新しい本は、常にリスト上で空いている一番左のスロットに配置され、スロットは昇順で番号が付けられています。
| シナリオ |
| 1 |
| 2 |
| 3 |
シナリオ 3 の続き
この問題は、マップから本 B を削除するときに、物理的にスロットからも取り除くことで回避したいところですが、 _それをやってはいけません。_誤ってデータテーブルを破損してしまう可能性があります。 驚いたことに、データを手動で変更する方が、棚から本を取り出すことよりもはるかに危険です。
| オプション |
| 1 |
| 2 |
お読みいただきありがとうございました!
ディスカッション (0)0