2012-08-31 13 views
7

En Zend Framework, el objeto Zend_Application tiene un objeto bootstrap para arrancar o configurar los componentes. La clase Bootstrap a su vez tiene acceso al objeto zend_application para acceder a los parámetros de configuración.
Mi pregunta es qué tipo de patrón es este o es un olor a código debido a la dependencia circular.Objetos que se conocen entre sí

Respuesta

2

Zend Framework 1 está hinchado, eso es seguro.

El motivo de la propiedad $_application que representa una relación bidireccional se debe a los archivos de arranque independientes del módulo.

Es extraño, creo, porque cuando se trata de módulos, en lugar de tener el conjunto Zend_Aplication que tendrá el sistema de arranque principal en lugar:

/** 
* 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; 
} 

Hay una gran cantidad de olor código también:

/** 
* 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); 
} 

el archivo boostrap necesitan las opciones, así que en vez de asking for the options, que espera que la Zend_Application a continuación, obtener las opciones:

$options = $application->getOptions(); 
$this->setOptions($options); 

Parece que simplemente ignoran el tipo de interfaz esperada por el método setApplication() y que puede ser uno de los siguientes:

  • Zend_Application
  • Zend_Application_Bootstrap_Bootstrapper
  • Zend_Application_Bootstrap_ResourceBootstrapper

Me rendiría al tratar de entender este lío y cambiar a ZF 2, sin embargo;)

+0

No estaría tan apurado, especialmente sabiendo cómo se comporta ZF2 en comparación con ZF1 (hinchado o no). –

+0

@ WebnetMobile.com La idea es que es mejor estudiar el código fuente ZF2 que el ZF1. Dado que el OP no mencionó ningún error, solo se preguntó si hay olor a código. La respuesta es sí** –

Cuestiones relacionadas