?

Log in

No account? Create an account
Craftman

Симфони, это такой паравоз...

Разработчики Симфони, это такие дивгатели PHP в цивильное русло. Конечно до идеала тут еще далеко, но они первые элегантно показали, как юзать ОРМ, чтобы не было особой монстрятинки, как работать с котроллерами и MVC. Pake, опять же хорошая штука.

Сейчас они двигаются в сторону IoC, чего прочие популярные фреймворки пока не делают. И это тоже очень правильно.

К чему это я :) я взял у них готовый компонент Event Dispatcher. Он простой и не имеет зависимостей.

Очень удобно для контроллеров.

Например нам надо сделать, чтобы у некоторых классов записей при сохраненении добавлялось кто и когда правил. Если нужно только это можно устроить наследование, однако такая функциональность это по сути плагин к контроллеру и если таких нашлепок будет несколько, то удобно в котроллере повесить такой диспетчер и к нему цеплять плагины-слушатели.

Comments

ioc? это что такое?
еще один паттерн для решения вопроса зависимостей http://wiki.agiledev.ru/doku.php?id=ooad:manage_dependencies_in_php_code
Рассказ что такое плюс, отделяемый компонент, который можно стырить. Используется в новой Симфони:
http://components.symfony-project.org/dependency-injection/documentation

Мини компонент от Маркуса Бейкера:
http://h-type.com/filez/lj/articles/di/

всего порядка 400 строчек
Мне кажется что orm сама по себе не очень нужная штука, да и существуют теоретические выкладки что пропасть между реляционными данными и объектами не преодолима на данный момент.
Как сферический конь в вакууме, конечно не нужна. И в полном виде сделать ORM, это, как известно, Вьетнам для бойца-разработчика.

Однако в MVC есть такое понятие, как модель. Т.е. Вы вытаскиваете в отдельные классы работу с данными. И, как правило получается что-то вроде
$car=new Car();
$car->model='bmw';
$car->save();

$team=TeamPeer::getTeamByName('Willams');
$team->addCar($car);

И такого вагон и тележка. Связь типа Автомобиль->Производитель покрышек. При выводе списка сделать джойн с этой таблицей. И т.д.

Такие каждодневные операции можно вынести из модели в базовые классы модели. И получится что-то, напоминающее ORM.

Плюс к этому, когда Вам будут при выводе объектов нужны сортировки и фильтры, придется в контроллере работать с модификацией SQL-запроса. При фильтре по трем параметрам и сортировке работа со строкой уже напрягает. Поэтому такие манипуляции удобно вынести в класс вроде Criteria.

Вот Вам и столь ненавидимое Манипуляции SQL, хотя и "руками проще написать". Только это проще в боевой ситуации совсем не проще.

В ORM главное остановиться вовремя. Не делать универсальной системы, не стремиться получить независимость от БД, и не заменить SQL объектами. Самая большая ересь это, что ORM позволяет не знать SQL.

Поэтому, хоть пропасть непреодолима, Вы так или иначе кладете данные из объектов в таблицы и наоборот. Некоторая либа тут нужна.
Да это одна из любимых статей. Сразу вспомнилась.

Ну вроде как object relation mapping, а не чтото другое. А то что вы пишете это просто удобный фреймворк для работы с типовыми запросами =)
Ну как-то обозвать такое все равно надо, недоОРМ обидно как-то :)

Опять же в оригинальной симфони использовался ORM Propel. Так он собственно только и умел, что схема данных, создать, найти, сохранить. Очень примитивный джойн. И был этим хорош.

Правда у него не было особо инструмента манипуляции запросом навроде критерии. И этого очень не хватало при использовании фильтров.
В Propel Criteria были с самого начала, вы что-то путаете. Или я вас не так понял.
Сходил посмотрел. Ваша правда. Не знаю почему так у меня запомнилось.
Может, и не нужная, но жизнь почему-то облегчает. Doctrine, во всяком случае.
а чем именно? ну кроме геннерации типовых запросов.
Ну ещё как обёртка для нетиповых запросов тоже очень приятно. И вот такое писать тоже очень приятно:
Copy Source | Copy HTML
<?php
$posts = PostQuery::create('p')
    ->joinUsers()
    ->joinComments()
    ->limit(sfConfig::get('app_overview_page_post_count'))
    ->sortByCreatedAt()
    ->countComments()
    ->execute();
И прикручивать всякие штуки вроде оценок/букмарков/версионирования/пользовательской сортировки/i18n/и т.д. в пару строк в конфиге и одной миграцией тоже очень приятно.
да-да-да. в том месте, где это действительно надо, экономит много сил.
Проблема только в том, что "цивильное русло" для 90% разработчиков на PHP будет как серпом по фаберже. Ибо вместо одного-единственного паттерна "дали мячь - фигачь" придётся учить десяток.
угу -- нафига этот говнокод воскликнет толпа и пойдет дальше увязать в болоте.
http://raydac.livejournal.com/268021.html