metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2010-01-12 10:22 pm

ORM и системы типов

Понял, почему меня всегда так бесят сабжи, и почему всегда хочется "сделать по своему, с преферансом и гимназистками".
Вообще ORM это попытка скрестить ужа и ежа, т.е. гонять данные из одной системы типов в другую. Мало того, что это само по себе печально, так еще обычно и первая и вторая системы типов страдают унылостью, да еще и по разному в разных СУБД и языках программирования.

Т.е. нормальный ORM должен быть сделан либо на некоем общем подмножестве всего что есть(которое или пустое или настолько мелкое что ничего не даст сделать) или использовать достаточно мощную систему типов, которая бы позволила имитировать работу и СУБД и объектных языков и без особого напряга подстраиваться к ним.

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

PS: Да, хорошее было бы название для фреймворка - snagehog :)
wizzard: (Default)

[personal profile] wizzard 2010-01-12 11:30 pm (UTC)(link)
Ага. Проекции типов вообще куда ни плюнь встречаются - компиляция, сериализация, орм, рендеринг, фильтры - это всё проекции типов.

Очень интересно бы вывести что-то, позволяющее декларативно их описывать, наподобие Linq. Причем поддерживающее денормализованные данные.

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

[identity profile] clayrat.livejournal.com 2010-01-13 12:54 am (UTC)(link)
а это уже migration =)

она и reflection - две краеугольные проблемы любой сложной системы.

[identity profile] w00dy.livejournal.com 2010-01-13 04:11 am (UTC)(link)
обычно орм делают под один язык/платформу, что очень сильно упрощает задачу. Впрочем задача то ведь стоит корректно запихнуть и достать типы из языка, а не прозрачный мапинг.

[identity profile] yuripats.livejournal.com 2010-01-13 09:22 am (UTC)(link)
А вот тут больше написано http://citforum.ru/database/articles/vietnam/

[identity profile] sergiej.livejournal.com 2010-01-13 09:35 am (UTC)(link)
А меня бесит когда ты трахаешься с тредами, синхронизацией и ликами думаешь о возвышенном, а к тебе с "в таблице такой-то индекс сякой-то не проставлен". .ля-.ля-.ля, ну ставьте там что нужно, ну не виноватая я что фреймворк чего-то недопроставил. При этом, естественно, такого объекта то не существует, это таблица чисто для обеспечения того самого межвидового скрещивания с водвыподвертом.

[identity profile] blacklion.livejournal.com 2010-01-13 10:58 am (UTC)(link)
Ты про несовпадение импеданса и невозможность ORM читал классическую статью?

[identity profile] golosptic.livejournal.com 2010-01-14 05:36 am (UTC)(link)
Доступ в реляционную базу данных должен быть встроен в язык программирования.
Таблица - это хэш бесконечного размера, для которого должны быть дополнительно введены операции, обеспечивающие транзакционную целостность
(Её, впрочем, и для обычных переменных можно было бы обеспечивать) и который должен существовать в режиме сохранения значений между прогонами программы.

Всё. Никаких SQL-ей и прочей DBMS-специфичной погребени - точнее, она уходит на уровень драйвера СУБД, в который нормальные, чоткие пацаны в среднем не лазиют и не используют базоспецифичные обращения.

[identity profile] sleepy-drago.livejournal.com 2010-01-14 08:00 am (UTC)(link)
>имитация ужей методом сцепления ежей в списки
доставило! спасибо.
зы я не доктор Х. но ФП головного прогрессирует xD

[identity profile] migmit.vox.com (from livejournal.com) 2010-01-14 01:11 pm (UTC)(link)
Если взрослого мыша
Взять, и, бережно держа,
Напихать в него иголок -
Вы получите ежа.

Если этого ежа,
Нос заткнув, чтоб не дышал,
Где поглубже, бросить в речку -
Вы получите ерша.

Если этого ерша,
Головой в тисках зажав,
Посильней тянуть за хвост, то
Вы получите ужа.

Если этого ужа,
Приготовив два ножа...
Впрочем, он, конечно, сдохнет.
Но идея хороша.