7

Zend Frameworkでは、Zend_Applicationオブジェクトには、コンポーネントをブートストラップまたは構成するためのブートストラップオブジェクトがあります。ブートストラップクラスは、構成パラメーターにアクセスするためにzend_applicationオブジェクトにアクセスできます。
私の質問は、これはどのようなパターンなのか、循環依存によるコードの臭いなのかということです。

4

1 に答える 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 に答える