Comments 23
Спасибо за статью.
Про ACL было бы очень интересно — выложите пожалуйста.
Про ACL было бы очень интересно — выложите пожалуйста.
Про MVC читали? В контроллере не должно быть бизнес-логики, и запросов в БД включительно
Вы движетесь к magento, поздравляю!
Точнее к Varien, на котором написана magento.
Точнее к Varien, на котором написана magento.
Этот контроллер тонкий? Тонкий контроллер выглядит так (впрочем и этот немного жирноват):
А о связях между таблицами советую почитать в руководстве. А затем вынести все эти связи как минимум в маппер.
class Users_IndexController extends Zend_Controller_Action { public function indexAction() { $this->view->user = new Users_Model_User(); } }
А о связях между таблицами советую почитать в руководстве. А затем вынести все эти связи как минимум в маппер.
Приведите, пожалуйста, пример использования Zend'овских связей и мапперов. И опишите, насколько это удобно, если не сложно.
Тонкий контроллер покажите с переданными ему параметрами
Хорошо. Готовы немного подождать?
Вот пример контроллера, который позволяет просмотр и редактирование пользовательского профиля.
Используется активная инверсия зависимостей для получении параметров.
Используется активная инверсия зависимостей для получении параметров.
class Users_ProfileController extends Zend_Controller_Action { protected $user; public function init() { $this->user = new Users_Model_User(); if (!$this->user->find( $this->_getParam('id') )) { return $this->_forward( /* 404 Not found */ ); } } public function indexAction() { $this->view->user = $this->user; } public function editAction() { $form = new Users_Form_User(); $this->view->form = $form; $form->populate( $this->user->getOptions() ); if (!$this->getRequest()->isPost()) { return; } if (!$form->isValid( $this->getRequest()->getPost() )) { return; } $this->user->setOptions( $form->getValues() ); $this->user->save(); $this->_forward('index'); } }
Что то тут не так.
Объясните мне пожалуйста чем это удобнее.
Читая тот код который вы представили в контроллере, мне показалось что это не чуть не проще и не меньше, чем обыкновенные джойны, пусть даже если возвращает это всё доменные объекты.
Как мне показалось вы представили что то типа надстройки над Zend_Db_Select, которая умеет выбирать данные.
А как же независимость объектов от хранилища данных.
А ещё если так активно используете Zend_Db_Table_Row метаданные таблицы лучше кэшировать(хотя я мог просмотреть может оно там где то и кэшируется.)
ИМХО: сопеть и писать мапперы, тихо ждя пока выйдет zf 2.0 и Doctrine 2.0 и будет всем счастье.
Объясните мне пожалуйста чем это удобнее.
Читая тот код который вы представили в контроллере, мне показалось что это не чуть не проще и не меньше, чем обыкновенные джойны, пусть даже если возвращает это всё доменные объекты.
Как мне показалось вы представили что то типа надстройки над Zend_Db_Select, которая умеет выбирать данные.
А как же независимость объектов от хранилища данных.
А ещё если так активно используете Zend_Db_Table_Row метаданные таблицы лучше кэшировать(хотя я мог просмотреть может оно там где то и кэшируется.)
ИМХО: сопеть и писать мапперы, тихо ждя пока выйдет zf 2.0 и Doctrine 2.0 и будет всем счастье.
Вы не подумайте что я издеваюсь, но почему после выхода zf 2.0 пропадёт необходимость в мапперах? Я просто не в курсе, там что-то принципиально новое обещается?
Интеграцию doctrine и ZF вроде как обещают. Надеюсь что будет как в ror — тоесть быстрая генерация моделей с последующим их допилом напильником
framework.zend.com/wiki/display/ZFDEV2/Zend+Framework+2.0+Roadmap
вот официальный roadmap.
Но про генерацию моделей, я сплю и вижу и ножками во сне дрыгаю. Во всяком случае это должно когда то случится.
вот официальный roadmap.
Но про генерацию моделей, я сплю и вижу и ножками во сне дрыгаю. Во всяком случае это должно когда то случится.
Doctrine — тот же маппер, вид сбоку. Впрочем ладно, чёрт с ними, с тонкостями реализации. Наша с Вами основная задача — убедить автора статьи в необходимости такой абстракции.
Мапперы написанные на коленке кем то там не сравнятся с doctrine, это ORM, и там всего побольше будет чем просто в маппере, да и разрабатывает её не один человек.
Сильно сказано!
К сожалению, ваш контроллер отличается от моего… примерно на 60 секунд рефакторинга. Я без споров за такое время вынесу выборку данных из контроллера. Это был неудачный, как Вы показали, контроллер, остальные даже править не придется — клоны вашего :).
Я же хотел акцентировать внимание (заглавие топика) на построитель SQL, запрятанные в нем JOIN'ы и WHERE.
Уверен, что существуют гораздо лучшие решения, изящные и концептуально-правильные, но пока мне говорят о них только в теории или в теории будущего.
Показав свою реализацию, я хотел спровоцировать опытных разработчиков похвастаться их наработками.
К сожалению, ваш контроллер отличается от моего… примерно на 60 секунд рефакторинга. Я без споров за такое время вынесу выборку данных из контроллера. Это был неудачный, как Вы показали, контроллер, остальные даже править не придется — клоны вашего :).
Я же хотел акцентировать внимание (заглавие топика) на построитель SQL, запрятанные в нем JOIN'ы и WHERE.
Уверен, что существуют гораздо лучшие решения, изящные и концептуально-правильные, но пока мне говорят о них только в теории или в теории будущего.
Показав свою реализацию, я хотел спровоцировать опытных разработчиков похвастаться их наработками.
Добавил к топику пропущенный случайно view template.
Вобщем-то акцент стоит на том как получать данные из БД, и как ими оперировать.
Вобщем-то акцент стоит на том как получать данные из БД, и как ими оперировать.
Sign up to leave a comment.
Zend_Db – объекты модели, связи и сложные условия