この操作にはログインが必要です
XCube_Delegate????
コメント(3)
英訳元
The Basic of XCube_Delegate このドキュメントは日本語からスタートしているため、英訳ボランティアが必要です。 このドキュメントは、はじめて XCube_Delegate を使うプログラマ向けに、 XCube_Delegate の基本的な 使い方とコンベンショナルなコーディングについて 解説します。このドキュメントは対象となるプログラマが、 PHP4/PHP5 XOOPS Cube のプリロード機構 「委譲」「代理」のプログラムパターン の3点を理解していることを前提に書かれています。 XOOPS Cube のデリゲートはいわゆる GoF パターンの「委譲」や「代理」を使って いるわけではありませんが、ここでは「委譲」や「代理」の意義やメリットなどは解説 しませんので、ぜひ一度下記参考資料をご覧ください。(日本語) 委譲 - Wikipedia デリゲート(プログラミング) - Wikipedia
英訳
The Basics of XCube_Delegate This document explains the basic usage of the XCube_Delegate class and its features in detail. This document is written for programmers who at least have familiarity with the following knowledges: - PHP4/PHP5 - the 'Preload' feature of XOOPS Cube - the 'Proxy' and 'Deleagete' design patterns The delegation feature of XOOPS Cube does not actually conform to the 'Delegate' and/or 'Proxy' design patterns by GoF, but readers are encouraged to refer to the following documents to understand what these patterns are and how they actually work in applications. Delegate - Wikipedia, the free encyclopedia Delegation (programming) - Wikipedia, the free encyclopedia
いつの間にかドキュメントがほぼ出来上がっていますね。
Delegateというのは今までのXOOPSではなかった概念・機能なので、開発者側から見てXOOPS Cubeでのコーディングがとても楽しくなるような気がします。
ここで、開発者側からこのDelegate機構を利用しようとして少し思ったこと・要望を書きたいと思います。
1. Delegateの作成、登録はDelegate_Managerに任せてしまってもよいのでは?
現在のところ、例えばクラスAのデリゲート$mDelegate(デリゲート名:classA.Delegate)に委譲先となる関数を登録するにはクラスAのインスタンスにアクセス可能な場合は$mDelegateを通して行い、それ以外の場合はDelegate_Managerを通して行なうようになっていますが、これは後者の方法に統一してしまっても良いのでは?
そうすると、デリゲートの作成、登録は全てユニークなデリゲート名で行なうことになるので、少し見通しがよくなるのでは。Delegate_Managerインスタンスはrootを介してグローバルにアクセス可能なので、それを利用しないのも勿体無いかなと。。
2. 今のところ、各Delegateにcall()を行なわせていますが、これはDelegate_Managerに任せてしまっても良いのでは?
これは1が前提となりますが、Delegate_ManagerにてDelegateを作成した際にユニークな 名前がつくので、これを利用しない手はないかと思います。
$delegate_manager->call('デリゲート名', $obj);
これにより、委譲する側は委譲が必要な際にのみ上記のようなコードを実行するだけで、委譲する側のコンストラクタ部などで明示的にdelegateを生成・登録する必要もなくなるのではないでしょうか(シグネチャのチェック機構を使用しない場合)。
また、実際にコードのどの部分でどのようなイベント(デリゲート)が発生しているのかが見つけやすいのではないかと思います(あるイベントの発生元をつきつめるのに少し苦労したので^^;)。

