Smart Update Summary (1)
Legacy_ModuleInstallUtils
クラスはインストールのための静的メソッドを集めています。このユーティリティの
smartUpdateAllOfBlocks() と
smartUpdateAllOfPreferences() はブロックとプロパティを迅速に更新します。
この更新プロセスは XOOPS2 および XOOPS2 JP においては厳格ではありませんでした。しかし、
Legacy 2.1
はそれを厳格にしました。私はここに「賢いアップデート」の仕組みを書こうと思います。モジュール開発者はそれを学習する必要はありませんが、もしあなたがカスタム-インストーラを使おうとするのであれば、知っておいた方が良いでしょう。
ユーザーがモジュールを更新しようとするとき、モジュールは2つの情報……DB(現在)と
xoops_version (最新)を持っています。アップデートとは DB の値を失う事なく DB を
xoops_version で交換するプロセスです。
Smart-update
は現在のモジュールのコンフィグレーションと、最新のモジュールのコンフィグレーションの差異を認識します。そのために多くのクラスが定義されています。しかし、これらは一般的なパターンですので、簡単に理解できると思います。
Legacy_BlockInfomation と Legacy_PreferenceInformation
は値を保持し、値を他の構造体と比較するシンプルな構造体です。isEqual()
は別の構造体と値を比較します。update() は別の構造体と値をマージします。
各情報構造体のためにコレクションクラスがあります。コレクションクラスは複数の構造体を保持し、それらを別のコレクションと比較します。
add() は指定された構造体をソートしながらコレクションリストに追加します。update()
は別のコレクションと構造体を比較してマージします。
これらの情報構造体もこれらのコレクションクラスもいかなる保管資源とも結び付いていません。すなわち、これらは
DB も xoops_version も参照しません。それをするのはリーダークラスです。リーダークラスは
DB や xoops_version
といった保管資源をロードすることでコレクションクラスのインスタンスを構築します。将来、新しいフォーマットが登場した場合は、新しいリーダークラスを追加すればよいわけです。