ライブラリ
とは、主にクラスモジュールと、その依存する一連の塊を指します。
UNICORNのライブラリ管理はpackage.xml
と言うXMLファイルで管理するようになっています。
また此処に定義されたライブラリ
と一致するクラス名のクラスを利用する場合、オートローダーによってオートロードされます。
require
やinclude
は必要ありません。
package.xml
は以下の場所に存在します。
/[Your Directory Path]/lib/FrameworkPackage/coe/package.xml
configと同様、Project毎のpackage.xmlもあります。
/[Your Directory Path]/lib/[Your Project Name]Package/coe/[Your Project Name].package.xml
ライブラリの自動読み込みが解決される順番も、configと同様Project毎のpackage.xmlからになります。
Package.xml
?package.xml
はクラスモジュールの組み合わせや、 命名 を定義するファイルになっています。
これはつまり、 「package.xml
で定義されたライブラリ
はpackage.xml
で差し替えや名前の変更が出来る。」 と言う事と意味しています。
これは、UNICORNの代表的な機能で、大きな特徴の一つです。
実際にどのような仕組みになっているかを見ていきます。
// あるPHPファイルが、Sessionクラスを利用しています。
$lastAccess = Session::get('last_access');
Sessionライブラリはpackage.xmlで以下のように定義されています。
/[Your Directory Path]/lib/[Your Project Name]Package/coe/[Your Project Name].package.xml
<Session>
<package>DBO</package>
<link>default.interface.Session/SessionIO</link>
<link>default.abstract.Session/SessionDataDB</link>
<link mapfrom="SessionDB" mapto="Session">default.implement.Session/SessionDB</link>
</Session>
Sessionライブラリは
packeage
として利用しているmap
している一番最後の行のmapto
が特徴的です。
SessionDB
と言うクラス名のクラスがmapto
により、実装上ではSession
として利用されています。
このように、package.xmlを使うことで、クラスを自動ラップして、新しいクラスにmap
する事が出来ます。
Session
クラスは現在はSessionDB
と言うデータベースを利用したSessionクラスが定義されていますが
では逆に、全く異なる仕組みのSessionクラスに差し替えて見ます。
Session
ライブラリの定義をpackage.xmlで変えてしまうだけでライブラリの中身を差し替える事が出来ます。
<Session>
<package>MCO</package>
<link>default.interface.Session/SessionIO</link>
<link>default.abstract.Session/SessionDataMemcache</link>
<link mapfrom="SessionMemcache" mapto="Session">default.implement.Session/SessionMemcache</link>
</Session>
これでSession
ライブラリはMemcache
を利用したライブラリに差し替える事が出来ます。
この機能が最大の効果を発揮するのは、 外部ライブラリの変更を後から余儀なくされた場合 です。
通常の開発フローであれば、ラッパークラスを新たに作ったり、利用する側のクラス名をリファクリングするなどの
小中規模の変更が必要になるケースが殆どですが
UNICORNのこの package.xml
によるライブラリ管理
なら、 変更する場所は一箇所で、しかも素早く変更出来ます。
クラス名を変更するだけのラッピングであれば自動で行ってくれるからです。