Zend Frameworkでは、Zend_Applicationオブジェクトには、コンポーネントをブートストラップまたは構成するためのブートストラップオブジェクトがあります。ブートストラップクラスは、構成パラメーターにアクセスするためにzend_applicationオブジェクトにアクセスできます。
私の質問は、これはどのようなパターンなのか、循環依存によるコードの臭いなのかということです。
質問する
152 次
1 に答える
2
Zend Framework 1 は肥大化しています。それは確かです。
$_application
プロパティが双方向の関係を表す理由は、モジュールの独立したブートストラップ ファイルによるものです。
モジュールを扱うとき、Zend_Aplication
セットの代わりにメインのブートストラップを使用するため、奇妙だと思います。
/**
* Set application/parent bootstrap
*
* @param Zend_Application|Zend_Application_Bootstrap_Bootstrapper $application
* @return Zend_Application_Bootstrap_BootstrapAbstract
*/
public function setApplication($application)
{
if (($application instanceof Zend_Application)
|| ($application instanceof Zend_Application_Bootstrap_Bootstrapper)
) {
if ($application === $this) {
throw new Zend_Application_Bootstrap_Exception('Cannot set application to same object; creates recursion');
}
$this->_application = $application;
} else {
throw new Zend_Application_Bootstrap_Exception('Invalid application provided to bootstrap constructor (received "' . get_class($application) . '" instance)');
}
return $this;
}
コードの匂いもたくさんあります:
/**
* Constructor
*
* Sets application object, initializes options, and prepares list of
* initializer methods.
*
* @param Zend_Application|Zend_Application_Bootstrap_Bootstrapper $application
* @return void
* @throws Zend_Application_Bootstrap_Exception When invalid application is provided
*/
public function __construct($application)
{
$this->setApplication($application);
$options = $application->getOptions();
$this->setOptions($options);
}
ブーストラップ ファイルにはオプションが必要なので、 options を要求する代わりに、Zend_Application がオプションを取得することを期待します。
$options = $application->getOptions();
$this->setOptions($options);
setApplication() メソッドが期待するインターフェースのタイプを単純に無視しているようで、次のいずれかになります。
- Zend_Application
- Zend_Application_Bootstrap_Bootstrapper
- Zend_Application_Bootstrap_ResourceBootstrapper
私はこの混乱を理解しようとするのをあきらめて、ZF 2 に切り替えます;)
于 2012-08-31T20:48:13.643 に答える