[Maple-dev: 160] 不要なクラスメソッド呼び出しの修正

アーカイブの一覧に戻る

Hawk schol****@hawkl*****
2006年 7月 24日 (月) 00:00:47 JST


Hawkです。

Mapleコア内には、本来インスタンスメソッドとして呼び出すべきなのに、
なぜかクラスメソッドとして呼び出しを行っているために
継承による動作の変更が不可能になっている箇所が存在します。
(参考:http://d.hatena.ne.jp/katase_n/20060722#1153566053)

私自身この問題は把握しながら”見て見ぬ振り”をしてきたのですが、
3.2以降はコアを拡張する機会も増えると思われるため、
できるだけこうした”ツッコミ所”は無くしておくべきと考えました。

そこで全てのクラスメソッドについて調査を行い、

・クラスメソッドで正しいと思われるもの
・恐らくインスタンスメソッドが正しいと考えられるもの
・ほぼ確実にインスタンスメソッドが正しいと考えられるもの

の3つに分類し、後二者については TRY-3_2 ブランチ上で
インスタンスメソッドに変更しました。

この変更によって動作が変わることはないはずですが、
何か見落としがあるかも知れないので、
できるだけ確認をお願いします。

なお、クラスメソッド呼び出しの抽出は次のように行いました。

grep '::' */*.class.php \
| perl -ne 'print "$1\n" if(m/(\w+::\w+)/)' \
| sort | uniq | grep -v 'parent::'


<クラスメソッドで正しいと思われるもの>
BeanUtils::getGetterVars
BeanUtils::getMethods
BeanUtils::getVars
BeanUtils::setAttributes
DIContainerFactory::create
DIContainerFactory::getContainer
DIContainerFactory::getInstance
Flexy_Flexy4Maple::globalOptions
LogFactory::getInstance
LogFactory::getLog
Smarty4Maple::getInstance


<恐らくインスタンスメソッドが正しいと考えられるもの>
ActionChain::makeNames
DIContainer::makeNames

機能から考えると、
元々クラスメソッドとしての使用を意図していた可能性もあるが、
他クラスからは(DIContainerを通して)インスタンスメソッドとして
呼び出されており、クラスメソッドとして使用されているのは自クラス内だけと
いう矛盾した状態にある。
有用性から言えば、インスタンスメソッドにした方が良い。


<ほぼ確実にインスタンスメソッドが正しいと考えられるもの>
Logger_SimpleFile::output
ConfigUtils::_getConfig
Controller::_createDIContainer
ConverterManager::_buildConverterList
ConverterManager::_convert
Filter_DIContainer::_createContainer
ValidatorManager::_buildValidatorList
ValidatorManager::_validate

いずれも自クラス内だけでしか使用されておらず(privateなものは当然)、
用途から考えてもインスタンスメソッドにすべきと考えられる。


-- 
Hawk : {
  web site : http://blog.hawklab.jp/
}



Maple-dev メーリングリストの案内
アーカイブの一覧に戻る