10 July 2014

UNICORNも他のフレームワーク同様にオートローダーによってクラスファイルが読み込まれるようになっています。
UNICORNのクラスファイルの依存関係は

UNICORN/src/lib/FrameworkPackage/core/package.xml

で、定義されています。
XMLってちょっと古いですね・・・
自覚はあるんですが暫くはこのままで・・・
何せ5年前に作り始めたフレームワークなので、古いシキタリも結構残って居たりもします。

 

さて、package.xmlの中を見てみると

<Utilities>
	<link mapfrom="Cipher" mapto="Crypt">default.implement.Cipher/Cipher</link>
	<link>default.implement.Utilities/Utilities</link>
</Utilities>
<Validations>
	<link mapfrom="GenericValidations" mapto="Validations">default.implement.Utilities/GenericValidations</link>
</Validations>

などとずらずらとクラス名っぽいNodeが並んでいるのが分かると思います。
前回の記事で使った”Validations”クラスを例にして、ライブラリ管理の仕組みを説明しよう思います。

 

ValidationsクラスはUNICORNのライブラリとしてpackage.xmlの中で

<Validations> ← コールされるクラス名でXMLNodeを定義
	↓ コールされた時にUNICORNのオートローダーが読み込みを行うクラスファイルの実態
	<link mapfrom="GenericValidations" mapto="Validations">default.implement.Utilities/GenericValidations</link>
	         ↑ 実態の実クラス名              ↑ コールされたクラス名に変換する定義  ↑ 実態のファイルパス
</Validations>

このように定義されています。

コレがUNICORNフレームワークの特徴の一つだったりするのですが、コールされるクラス名と
実態となるクラスファイルのクラス名が必ず一致している必要が無い仕組みとなっています。

 

実際に、Validationsクラスの実態として定義されているファイル

default.implement.Utilities/GenericValidations
実ファイルパスは
UNICORN/src/lib/GenericPackage/class/Utilities/GenericValidations.class.php

を、見てみると

<?php
class GenericValidations {
・・・
}

?>

と、定義されています。
(※「default.implement.Utilities/GenericValidations」の、 「default.implement.」の部分についてはまた別途解説します)

 

実際のクラス名は
Validations
では無く
GenericValidations
である事が分かると思います。

 

まとめると、UNICORNのライブラリ管理は

  • クラス名がコールされると、UNICORNのコアファイルはpackage.xmlを参照しに行く
  • package.xml内のコールされたクラス名に一致するXMLNodeを探す
  • 見つかったXMLNode内に定義されたクラスファイルをロードする
  • XMLNodeにmapfromとmapto属性が指定されていたらその属性に沿ってクラスを自動で継承したmapto定義された小クラスを生成する

と、言う動きをします。

 

なんでこんな面倒な作りになっているのかと言うのは、是非体験して頂きたいのですが、次回にでも詳しく書こうと思います。
今回は
「ライブラリ管理がどうされているか」
までの紹介でした。

 



blog comments powered by Disqus