2012-08-31 11 views
7

W Zend Framework obiekt Zend_Application ma obiekt bootstrap do załadowania lub skonfigurowania klasy components.Bootstrap z kolei ma dostęp do obiektu zend_application w celu uzyskania dostępu do parametrów konfiguracyjnych.
Moje pytanie brzmi, jaki to rodzaj wzorca lub czy jest to zapach kodu z powodu zależności cyklicznej.Obiekty o wzajemnej wiedzy

Odpowiedz

2

Zend Framework 1 jest nadęty, to na pewno.

Przyczyna tej właściwości $_application reprezentująca dwukierunkową relację jest spowodowana niezależnymi od modułu plikami ładowania początkowego.

To dziwne, jak sądzę, ponieważ gdy mamy do czynienia z modułami, zamiast zestawu Zend_Aplication musisz główną bootstrap Zamiast:

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

Istnieje wiele zapachy kodu TOO:

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

plik boostrap potrzebne opcje, więc zamiast asking for the options, że spodziewa się Zend_Application aby następnie uzyskać opcje:

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

Wydaje się, że po prostu zignorować typu interfejsu oczekiwany metodą setApplication(), i może to być jeden z następujących:

  • Zend_Application
  • Zend_Application_Bootstrap_Bootstrapper
  • Zend_Application_Bootstrap_ResourceBootstrapper

Poddałbym się próbie zrozumienia tego bałaganu i przejścia na ZF 2;)

+0

Nie byłbym w takim pośpiechu, szczególnie wiedząc jak działa ZF2 w porównaniu do ZF1 (nadęty lub nie). –

+0

@ WebnetMobile.com Chodzi o to, że lepiej jest studiować kod źródłowy ZF2 niż ZF1. Ponieważ PO nie wspomniał o żadnych błędach, zastanawiał się tylko, czy nie ma zapachu kodu. Odpowiedź brzmi tak** –

Powiązane problemy