The spec of Legacy_Controller cache mechanism (2)
Legacy のキャッシュメカニズムは、 1
つのコンテンツから、複数のキャッシュファイルを作成できます。blog
モジュールを想像してください。blog
ライターは、彼のエントリ上で編集アイコン、及び、削除アイコンを見ることができるでしょう。管理者にもなれば、更に特権的なコントロールアイコンを発見するかもしれません。すなわち、
1 つのエントリは、複数の見え方を持っています。従って、 XOOPS Cube Legacy
は、それぞれキャッシュを行わなければなりません。
そのために、そのコントローラは、アイデンティティや、現在のコンテンツがキャッシュ可能かどうかを示すフラグ等などの多くの情報を必要とします。XOOPS2
に基づく Legacy にはモジュールからそのような情報を得る方法がないので、コントローラは、
Delegate メカニズムを情報の交換に使います。コントローラが知ることを望むものは、下記です :
- コントローラは、このブロックをキャッシュすることができますか ?
- コントローラは、どのようなファイル名でブロックキャッシュを保存しますか ?
- コントローラは、モジュールのこのページをキャッシュすることができますか ?
- コントローラは、どのようなファイル名でモジュールキャッシュを保存しますか ?
そのコントローラは、 Delegate
を通じてこれらの問い合わせをします。そして、キャッシュモジュールは、キャッシュ方針を持つ関数を
Delegate
に加えます。サイト所有者は、キャッシュモジュールを交換する、もしくは、プリロードを加えることによってそれらのキャッシュ方針を調整し得ます。
What delegates are there?
checkEnableBlockCache()
このデリゲートは、現在の
URL
、及び、現在のユーザーがキャッシュに許可を与えられるかどうか、そして、そのコントローラがどのようなコンディションによってキャッシュするかをチェックします。Legacy
は、 Legacy_BlockCacheInformation
を情報交換のための特別な情報構造体として使います。なぜなら、プリミティブな変数のみを持つファンクションパラメータは、十分ではないからです。モジュールは、コントローラに報告するための多くの情報を持っており、情報の容易な交換には特別なクラス、または、構造を必要とします。
デリゲートを通じて、デリゲート関数は、特別なキャッシュ方針を情報構造体に設定し得ます。私は、次回それを説明するでしょう。
getBlockCacheFilePath()
このデリゲートは、保存するために、
$cacheInfo
のファイルパスを得るために使われます。これは、ユーザー関数がその方針に次第でユニークファイル名を決定するためにコントローラに干渉し得ることを意味しています。
checkEnableModuleCache()
これは、
checkEnableBlockCache() のブロックバージョン (
Legacy_BlockCacheInformation を情報構造として使う ) です。
getModuleCacheFilePath()
これは、
checkEnableBlockCache() のブロックバージョンです。
これらのデリゲートは、原則的に空っぽです。従って、サイト所有者は、キャッシュモジュールを通じてデリゲート関数を追加するべきです。言い換えますと、関数がこれらのデリゲートに全く加えられないならば、
XOOPS Cube Legacy は、そのキャッシュメカニズムを働かせることができません。
The spec of Legacy_Controller cache mechanism (1)
XOOPS Cubeが、より多くのクラスを定義するので、Legacy_ControllerはXOOPS2
JPより重いです。 したがって、私たちにとって、強力なキャッシュメカニズムは重要です。
強力なキャッシュはしばしば問題を提起します。
例えば、キャッシュファイルが管理者のアクセスで作られるなら、匿名のユーザと登録ユーザは秘密の情報を見るかもしれません。
また、匿名のユーザーは登録ユーザのアクセスで作られているキャッシュを見ることができるべきではありません。
より多くの問題。 XOOPS2 JPはどんなURLのためにも見境無くキャッシュファイルを作ります。
存在しないIDと、同じデータを言い表す異なるURLのために、XOOPS2
JPはそれぞれのキャッシュファイルを作ってしまいます。XOOPS2
JPのcommon.phpがモジュールのキャッシュ方針を得るためにモジュールに接続することができないので。
XOOPS2
JPモジュールにモジュールのクラスのサブのクラスがあるなら、私たちはコントローラのために基底クラスにいくつかの新しいメソッドを加えるかもしれません。
しかし、XOOPS2
JPには、そのような概念がありません。common.phpはxoops_version.php以外のモジュールファイルをロードしません。
そして、xoops_version.phpには、キャッシュに関する仕様がありません。
どんなモジュールもそれらを定義していません。
したがって、私たちは任意であるとしてxoops_version.phpの定義を使用するかもしれませんが、Legacy_Controllerはそのような定義によるべきではありません。
さらに、多くのサイト所有者がキャッシュの戦略を調整したがっているので、私たちはそれを考えるべきです。
これらの状況のために、私たちはXCube_Delegateを選ぶべきです。交換可能キャッシュメカニズムを実行するのを可能にするために。
Legacy_Controllerがモジュールからどんな情報を得たがっているかは、明確です。
したがって、私たちは、Legacy_Controllerに新しいメソッドを加えて、次に、Delegateとしてこれらの機能を交換するつもりです。
そして、標準のキャッシュモジュールはデフォルト機能を代表に提供するべきです。
既存のキャッシュファイルをきれいにする手段も重要です。
Cube Legacy in the final stage!
私は、この数週間予想外に忙しく過ごしていました。家に帰らずに、仕事を続けていました。プロジェクト・チームの私の仲間もまた、私と同様に忙しいです。そのため、プロジェクト・チームは、またしても、スケジュールの遅れを公表しなければならなくなりました。しかし、よいニュースもあります。それは、多くの熱いユーザーが、これらの数週間の間、チェックとレビューを試みたので、XOOPS
Cube Legacy
がかなり多くのバグ・フィックスを得たということです。そして、自分たちの仕事に目処をつけたチームの一部の開発者は、2.1の開発スケジュールに復帰することが出来るようになりました。モジュール互換性をチェックすることは本当に多くの手間を必要とするので、私は互換性についてレポートの全てをチェックすることができていませんでした。しかし、私たちはそれができるようになります。
このポストに書かれているように、現在の開発ステータスは最終的なステージにあります。
XOOPS Cube Legacy は、 XOOPS Cube 層と Legacy
モジュールから成っています。そして、 Legacy は XOOPS Cube
のフィーチャー全てを使うというわけではありません。したがって、私は XOOPS Cube
層のデザインをテストするための Legacy
でないもう一つのベース・モジュールを開発しなければなりませんでした。ご承知のとおり、それが Shade
です。私は、 Shade において、プロジェクト・チームが Legacy
で試行することができなかった主な仕様を決定しました。それらは、コンテキスト、アイデンティティ、プリンシパル、ロール、サービスと多くの変更です。しかし、
Legacy モジュールは、私たちのテスト・プロセスのために、 Shade より古い XOOPS Cube
層をキープしています。 Legacy の XOOPS Cube
層が常に更新されているならば、バグの原因を突き止めることは非常に困難です。そのために、 Legacy の
XOOPS Cube 層は、しばらく固定されています。一方、シェイドの XOOPS Cube
層は、よく更新されます。つまり、プロジェクト・チームは、現在 Legacy と Shade
という2つのプロジェクトを同時進行させているということです。
おそらく、最新の Cube と Legacy のマージは、多くの問題をもたらすでしょう。したがって、
Cube と Legacy がマージされるまで、我々は Legacy
のバグの全てを固定するつもりでかからなければなりません。
我々の活発なゴールは、Legacy 2.1.0 です。このバージョンは、 XOOPS2
の機能の全てを模倣することができないかもしれません。たとえば、我々はカスタムブロックでプレビューをすることができません……。それは、良くはありません。しかし、
Legacy
の将来のバージョンは、それが実装されているでしょう。つまり、致命的でない問題は、次のバージョンのための
ToDo だということです。私たちにとっての Legacy の致命的な問題は、以下のようなものです:
最初のリリースのために、私たちはこれらの3点をチェックしなければなりません。一緒に
Alpha をテストしましょう。
Fatal mistake
私は、 Alpha4-c でへまをやらかしました ...
Alpha4-c 、及び、 Alpha4-d
のインストーラは、管理者のメールアドレスに関する不可欠のコンフィグレーションアイテムをインストールしません。私は、それを
CVS で修正しました。従って、そのフィックスは、次のウィークリー・リリースに含まれるでしょう。
あなたの XOOPS Cube Legacy Alpha が Alpha4-c 、または、
Alpha4-d によってインストールされたならば、あなたはクリーンな DB
と共に、再インストールしなければなりません。