Опять срачь за ORM
Apr. 5th, 2013 12:01 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
http://tonsky.livejournal.com/275048.html
Если обработаться на жабе и дотнете, то записи в таблицах БД действительно начинают казаться объектами, только заколдованными злыми DBA по чернокнижию дейта и кодда. И нужно использовать специальные магические зелья в виде ORM чтобы объекты расколдовать.
А если работать в основном с СУБД и понимать, что "базе-то не объекты, в базе именно что отношения." то внезапно оказывается, что объекты-то не так часто и нужны, а иногда и вообще вредны.
Оно конечно выглядит просто - "взял из ORM объект, показал в форме, по нажатию ОК отдал его ORM на сохранение". Но подобные решения намертво увязывают структуру БД, результаты запросов и типы объектов в программе. И вынуждают использовать в БД только структуры данных, которые хорошо в такое укладываются.
Если обработаться на жабе и дотнете, то записи в таблицах БД действительно начинают казаться объектами, только заколдованными злыми DBA по чернокнижию дейта и кодда. И нужно использовать специальные магические зелья в виде ORM чтобы объекты расколдовать.
А если работать в основном с СУБД и понимать, что "базе-то не объекты, в базе именно что отношения." то внезапно оказывается, что объекты-то не так часто и нужны, а иногда и вообще вредны.
Оно конечно выглядит просто - "взял из ORM объект, показал в форме, по нажатию ОК отдал его ORM на сохранение". Но подобные решения намертво увязывают структуру БД, результаты запросов и типы объектов в программе. И вынуждают использовать в БД только структуры данных, которые хорошо в такое укладываются.
no subject
Date: 2013-04-05 09:45 am (UTC)no subject
Date: 2013-04-05 10:47 am (UTC)no subject
Date: 2013-04-05 10:50 am (UTC)no subject
Date: 2013-04-05 11:29 am (UTC)no subject
Date: 2013-04-05 09:47 am (UTC)Ну вот захотели мы поменять название столбца и его тип в db (или наоборот сначала в ORM):
1. ORM ругнется и мы исправим в ORM
2. Проект не компилируется
3. Тупо просматриваем ошибки компилятора и исправляем код
4..
5. Профит
Как это в кложе? grep наше все? А что с типом? Смотреть эксепшены в рантайме?
no subject
Date: 2013-04-05 09:59 am (UTC)Динамическая типизация - хочешь, не хочешь, приходиться мириться.
no subject
Date: 2013-04-05 09:59 am (UTC)no subject
Date: 2013-04-05 10:09 am (UTC)Потому что для ее решения требуются зависимые типы (== никаких 200 индусов, вместо них пару айседов).
А существующие решения - разной степени корявости и индусятины паллиатив.
no subject
Date: 2013-04-05 11:03 am (UTC)А можно на пальцах показать и рассказать ?
no subject
Date: 2013-04-05 01:18 pm (UTC)А вот это вы обманываете!
Чтобы яйседы пошли, да начали статическую типизацию пользовать?!
no subject
Date: 2013-04-05 10:49 am (UTC)no subject
Date: 2013-04-05 11:05 am (UTC)no subject
Date: 2013-04-05 12:32 pm (UTC)83%пишутся радиосвоения бабларади самого процесса написания проекта. вывод: выбор исполнителей и технологий самоочевиден:-)no subject
Date: 2013-04-05 12:37 pm (UTC)no subject
Date: 2013-04-05 10:37 am (UTC)в кровавом энтерпрайзе это модель применима может в 10-20% случаев, в реальном мире в основном формы работают с адскими наборами объектов (в которых в зависимости от фазы луны и вчерашней погоды будут другие наборы полей), чтобы было веселее часть из них догружается из других систем/баз. В результате "ценность" ORM объекта как готового для работы понижается в разы.
С другой стороны у хардкорщиков поверх базы данных получается другие крайности, если их система работает не поверх одной базы данных, а в интегрированной среде с десятками систем. Они начинают беситься и требовать прямой доступ во все базы, требовать чтобы все эти базы были кошерным ораклом одной версии итп. Когда им фиг дают доступ они начинают придумывать уродские схемы с временными таблицами под каждую операцию на интерфейсах. Всё в итоге превращается в неподдерживаемый ад.
Правда чистый ORM тут не поможет никак, тут нужна модель данных поверх голого ORM
no subject
Date: 2013-04-05 11:31 am (UTC)no subject
Date: 2013-04-05 11:36 am (UTC)Да я в курсе, что большинство банков живут ещё в 20-м веке. Что не есть плохо для них самих, но сложно если нужно поженить эту архитектуру с SOA.
no subject
Date: 2013-04-05 11:18 am (UTC)жанр "срачей" это бессмысленная трата времени жизни, и удовольствия интеллектуального никакого
если коротко, можно ответить так: "не нравится ОРМ -- не используй"
по делу, могу намекнуть идею: данные внутри БД и внутри клиента располагаются и обрабатываются по-разному в ЛЮБОМ случае
чем случай с ОРМ хуже непонятно каких альтернатив в непонятно каких случаях -- вам стоило бы сесть и глядя в зеркало самому себе в глаза написать эссе
Кстати за индусов белорусы зря переживают -- у них в полный рост сейчас идут курсы и скалы, и хаскеля, и R
no subject
Date: 2013-04-05 11:57 am (UTC)no subject
Date: 2013-04-05 01:59 pm (UTC)no subject
Date: 2013-04-05 12:44 pm (UTC)no subject
Date: 2013-04-05 05:08 pm (UTC)no subject
Date: 2013-04-05 05:28 pm (UTC)String userId = p.getUserId();
Number amount = p.getAmount();
p.setCode(PAID_CODE);
это ужас-ужас, а правильно
String userId = (String) p.get("UserId");
Number amount = (Number) p.get("Amount");
p.set("Code", PAID_CODE);
это ж совсем другое дело, никаких get/set... o wait...
no subject
Date: 2013-04-06 02:42 am (UTC)Если у нас динамическая типизация - касты лишние.
Плюс к тому, надо помнить, что 99.99% геттеров и сеттеров навсегда остаются тривиальными.
no subject
Date: 2013-04-05 05:32 pm (UTC)желательно на GCC под линуксом с Ораклом
no subject
Date: 2013-04-05 12:31 pm (UTC)То есть, "в идеале" вы начинаете писать всё на чистых объектах (тупо чистых объектах, в случае питона наследуемых от object), а затем "связываете" их с описанием БД (которое не является ORM, а это просто представляение вашей БД, собственно сама операция связывания и есть этот самый маппинг обджект рилейшнов). Sqlalchemy позволяет сделать именно это.
no subject
Date: 2013-04-05 05:56 pm (UTC)no subject
Date: 2013-04-09 04:57 pm (UTC)А давайте так - если объект потерялся, то есть изменение не отразилось в дисковом хранилище, то материальная ответственость за потерянный реальный объект ляжет на вас. А там и до уголовного дела недалеко.
no subject
Date: 2013-04-09 09:10 pm (UTC)no subject
Date: 2013-04-10 07:16 am (UTC)Но поскольку в большинстве уеб-проектов данные никому не важны, да и сам проект нужен только для перепродажи следующему инвестору - то там можно наворачивать сто слоев абстракции, держать все в оперативной памяти и радоваться, как быстро персистируются объекты.
no subject
Date: 2013-04-10 07:19 am (UTC)Чем ORM не подходит под определение "работа идет строго с базой"? Не понимаю, к чему ты.
no subject
Date: 2013-04-10 07:30 am (UTC)Кроссплатформенность - миф, бесшовный переход с базы на базу - тоже. Или оно одинаково медленно будет работать везде.
>да я вообще не помню проекты, где данные не важны
Да тот же Гугл. "Мы ни за что не отвечаем, пропадет что-то - сами виноваты".
no subject
Date: 2013-04-10 01:01 pm (UTC)Успешно переходил с базы на базу при помощи изменения пары строчек + миграции. По поводу "медленно" не понял, почему оно медленно будет работать.
> Да тот же Гугл. "Мы ни за что не отвечаем, пропадет что-то - сами виноваты".
Ну, одно дело "мы ни за что не отвечаем", другое -- "данные не важны".