Ваш вопрос почти звучит как вопрос о наилучшей практике ООП, в отличие от конкретного вопроса 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
}
}
В идеале, модели, услуги, Даосы и т.д., все будет относительно плотно сгруппированных контроллером и действием. По моему опыту, и это говорит в целом, если у меня есть та же модель или класс обслуживания, которые отображаются во всех контроллерах в моем приложении, у меня проблема с организацией. При этом любая модель, которая появляется только в одном действии, создается в этом действии. Если это происходит через действия в контроллере, он создается в методе init() и присваивается свойству.Если он отображается на нескольких контроллерах, он создается в моем Bootstrap.php.
(В идеале, все создаётся в Bootstrap.php, поэтому вы можете поменять этот загрузочный лоток для тестирования. К сожалению, я не всегда это делаю, и я чаще всего использую принципы, изложенные выше.)
Спасибо так много. Это действительно полезно. Я поставил неправильное слово. Предполагалось, что в каждом действии это не контроллер. Как я могу его начать? Большое спасибо. – Chveneburo