Ваш вопрос почти звучит как вопрос о наилучшей практике ООП, а не как вопрос, специфичный для Zend Framework. Независимо от того, использую ли я фреймворк и независимо от того, какую фреймворк я выбрал, я основываю, когда и где я создаю новые объекты на тестируемости, сколько раз мне нужно написать $object = new My_Random_Object();
.
Говоря конкретно о Zend Framework: объекты, которые я собираюсь использовать везде или почти везде, создаются в Bootstrap.php . Эти объекты обычно включают в себя адаптер базы данных, регистратор, объект просмотра и любые плагины, которые я мог бы использовать. Чтобы получить к ним доступ через приложение, я создам частные свойства в соответствующих контроллерах и назначу объекты этим свойствам в методе контроллера init ().
class ExampleController extends Zend_Controller_Action
{
public function init()
{
$bootstrap = $this->getInvokeArg('bootstrap');
$this->_db = $bootstrap->getResource('db');
$this->_log = $bootstrap->getResource('log');
// and so on, and so forth
}
}
В идеале, модели, сервисы, daos и т. Д. Будут относительно тесно сгруппированы по контроллеру и действиям. По моему опыту, и это вообще говоря, если у меня одна и та же модель или класс обслуживания, обнаруживаемый на всех контроллерах в моем приложении, у меня возникла организационная проблема. При этом любая модель, которая появляется только в одном действии, создается в этом действии. Если он выполняет действия в контроллере, он создается в методе init () и присваивается свойству. Если он отображается на нескольких контроллерах, он создается в моем Bootstrap.php.
(В идеале все создается в Bootstrap.php, так что вы можете поменять этот загрузчик для тестирования. К сожалению, я не всегда так делаю, и чаще всего я использую принципы, изложенные выше.)