5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

XOOPSのデータ永続化アーキテクチャの概要

Posted at

XOOPSの永続化アーキテクチャは基本的に、Data Mapperパターンになっている。サードパーティ製モジュールはそうじゃないものもある。

  • XoopsObject : データオブジェクトの抽象クラス
  • XoopsObjectHandler : マッパー。XoopsObjectをDBに保存したり、DBからXoopsObjectを再構築する抽象クラス

Astah_-no_title___.png

XoopsObjectは、ざっくり言うとキーと値から構成されるマップのようなもので、 get で値を取得したり、set で値を更新したりする。

XoopsObjectの具象クラス

慣習上XoopsObjectをそのまま使うことはなく、XoopsObjectを継承した具象クラスをデータオブジェクトとして使う。

XoopsObjectの継承関係一覧:

html_…object_php-xoops-__Volumes_CaseSensitive_Dropbox_projects_suin_xoops.png

XoopsObjectHandlerの具象クラス

XoopsObjectHandlerも同様に、XoopsObjectHandlerを継承した具象クラスをマッパーとして使う。

XoopsObjectHandlerの継承関係一覧:

html_…object_php-xoops-__Volumes_CaseSensitive_Dropbox_projects_suin_xoops.png

歴史的な経緯

  • XOOPS2.0のころまで: XoopsObject、XoopsObjectHandlerだけだった。
  • XOOPS Cube Legacyから: 互換性を重視するため古いORMはそのままにして、XoopsSimpleObject、XoopsObjectGenericHandlerが追加された。

このような歴史的な経緯で、現在は下記図のような継承関係になっている。

Astah_-no_title___.png

XoopsObjectGenericHandlerの継承関係:

handler_php_-xoops-__Volumes_CaseSensitive_Dropbox_projects_suin_xoops.png

XoopsSimpleObjectの継承関係:

html_…object_php-xoops-__Volumes_CaseSensitive_Dropbox_projects_suin_xoops.png

…他多数

Xoops*Handlerの取得方法

xoops_gethandler 関数または、xoops_getmodulehandler 関数で取得するのが楽。前者は /html/kernel にあるハンドラーが、後者はモジュール内にあるハンドラーが取れる。

モジュール作るならXoopsObject? それともXoopsSimpleObject?

結論としては、どちらでもいい。Legacyで追加された、XoopsSimpleObject/XoopsObjectGenericHandlerのほうがAPIが強化されていたり、複製モジュール(D3)に対応しているという違いがあるだけ。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?