seine
Новичок
Использование на практике активной инверсии зависимостей
Привет всем,
вот в статьях про экстремальное программирование, на том же agildev.ru, все так красиво написано, все так понятно и здорово. А я пытаюсь следовать этим требованиям, а у меня какая-то фигня получается :-(
Итак, есть сайт, у сайта есть несколько моделей для работы с различными сущностями, напимер: модель для работы со страницами, статьями, новостями и т.д.
Они все хранятся в папке Models, например, модель для работы со страницами находится в файле Pages.php, а сам класс выглядит так:
Т.е. использую соглашения PEAR, чтоб можно было использовать autoload() для автоматической загрузки.
Например, класс Models_Places_Articles хранится в Models/Places/Articles.php. Ну это я на всякий случай пояснил)
Чтоб получить эти модели из контроллера я использую класс-фабрику, хотя класс - это громко сказано, там просто один метод, вот как он выглядит:
Тут использую статичный метод, а это уже нехорошо.
Контроллеров у меня несколько (их точнее было бы назвать компонентами), в них я обращаюсь к нужной модели так:
Предыстрию рассказал, теперь о проблеме. Вообще-то, меня такой подход пока что устраивал. Но вот мне кажется, что это вообще не вписывается в рамки XP: есть статичные методы, т.е. явная зависимость от классов. Мало того, так как модели загружаются автоматически с помощью преобразования имени класса в путь, то еще и зависимость от расположения класса в файловой системе (не знаю, как это называется в терминологии ХР, если вообще как-то называется).
Я понимаю, что надо бы, что б компоненты (контроллеры) обращались к моделям не таким кривым способом, а как нибудь при помощи pull approach или push approach методов. Но не могу понять как это сделать(
Есть какие-нибудь идеи?
Привет всем,
вот в статьях про экстремальное программирование, на том же agildev.ru, все так красиво написано, все так понятно и здорово. А я пытаюсь следовать этим требованиям, а у меня какая-то фигня получается :-(
Итак, есть сайт, у сайта есть несколько моделей для работы с различными сущностями, напимер: модель для работы со страницами, статьями, новостями и т.д.
Они все хранятся в папке Models, например, модель для работы со страницами находится в файле Pages.php, а сам класс выглядит так:
PHP:
class Models_Pages {}
Например, класс Models_Places_Articles хранится в Models/Places/Articles.php. Ну это я на всякий случай пояснил)
Чтоб получить эти модели из контроллера я использую класс-фабрику, хотя класс - это громко сказано, там просто один метод, вот как он выглядит:
PHP:
class Models_Factory {
public static function getModel($model) {
switch ($model) {
case 'pages':
return new Models_Pages(new DB_Mysql(), new Models_Articles(new DB_Mysql()));
/* Аналогичным способом возвращаю другие модели */
default:
throw new Exception('Нет модели "' . $model . '"');
}
}
}
Контроллеров у меня несколько (их точнее было бы назвать компонентами), в них я обращаюсь к нужной модели так:
PHP:
$pages = Models_Factory::getModel('pages');
$childs = $pages->getChilds($parent_id);
Я понимаю, что надо бы, что б компоненты (контроллеры) обращались к моделям не таким кривым способом, а как нибудь при помощи pull approach или push approach методов. Но не могу понять как это сделать(
Есть какие-нибудь идеи?