[Moscow.pm] Продолжение размышлений на тему ORM

Анатолий Шарифулин sharifulin на gmail.com
Вт Ноя 8 06:40:48 PST 2011


Если честно, то жесть.
Хранить запросы в шаблонах, ещё и использовать синтаксис шаблонизатора для
генерации шаблна --вообще зло.

Чем вам обычный Perl не устраивает?
Генерация строки легко решается без шаблонизатора.

Но за тимтоуди спасибо)


2011/11/8 Ivan Petrov <i.petro.77.00 на gmail.com>

> Заспорили мы тут с некоторыми товарищами.
>
> в итоге пришло к тому "возможно или нет" написать генератор запросов.
> видимо правы все или неправы все. тут просто вопрос точки зрения.
>
>
> Я помню на одной из перл-конференций один умный человек  читал  лекцию
> про трансгуманизм.  Там  была  хорошая  мысль:  не  стоит  гнаться  за
> оптимизацией,  если  дело  можно  решить  мегафлопсами.   Они   всегда
> дешевле.
>
> В каких-то нишах он прав. Вероятно для этих же ниш подойдет и DBIC.
>
> Вот. Ну а для ниш, где флопсы выделенные БД таки не решают всеж-таки
> ваяем шаблонный движок для работы с SQL.
>
> Сперва мы тут ваяли движок с собственным шаблонным языком.
>
> Затем применяя его на практике пришли к тому что собственный язык -
> плохо, надо идти по пути Mojo. То есть встраиваемый перл.
>
> В итоге пришли вот к такому синтаксису.
>
> SELECT
>    *
> FROM
>    table
> WHERE
>    id = <%= $id %>
>
> где $id - именованный параметр переданный запросу.
>
>
> Ну или даже так:
>
> SELECT
>    % if ($type eq 'count') {
>        COUNT(*) AS count
>    % } else {
>        *
>    % }
> FROM
>    table
> WHERE
>    sid = 123
>    % if ($filter->filter1) {
>        AND field1 = <%= $filter->filter1 %>
>    % }
>    % if ($filter->filter2) {
>        AND field2 = <%= $filter->filter2 %>
>    % }
>
> Получается более изящно и сильно более гибко, однако цена этому в
> примерно в полтора-два раза бОльшее время на парсинг. Впрочем для
> сложных SQL оно сравнимо (у старого парсера оно оосло в зависимости от
> сложности, тут слабо зависит).
>
> SQL-ки размещены в выделенной директории, имеют фиксированное (пока)
> расширение '.sql.ep' и DBI расширен тремя допметодами
>
>  - select - выборка набора данных (аналог selectall_(hash|array)ref)
>  - single - выборка одной строки  (аналог selectrow_hashref)
>  - perform - выполнение SQL-запроса (аналог do)
>
> Покамест на выходе простые итераторы, позволяющие сделать просто
> проход по выборке, а объекты просто предоставляют доступ к выбранным
> полям (AUTOLOAD). В планах сделать отложенные SQL-запросы ну и более
> расширить API итераторов (сейчас они частично DBIC совместимые).
>
> Если кому интересно, то модуль лежит на CPAN - DBIx::DR.
>
> Ссылки на git нет. Git - в закрытом проекте. unfortunatelly.
>
> Замечания, предложения крайне интересны :)
> Спорить по поводу того что некрута писать SQL-запросы руками больше не
> буду :)
>
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>



-- 
С уважением,
 Анатолий Шарифулин.
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20111108/733f7441/attachment.html>


Подробная информация о списке рассылки Moscow-pm