Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
код всех этих хранимых процедур очень неудобно хранить в системе контроля версийПерефразирую: «Текстовые файлы очень неудобно хранить в системе контроля версий».
взаимодействие кучи хранимых процедур приводило к трудноотлавливаемым багамПерефразирую: «Взаимодействие кучи кривонаписанного кода приводило к трудноотлавливаемым багам».
не предназначен sql для императивного программированияПерефразирую: «Отсутствие возможности поООПить — ужасно».
проще при использовании orm-прослойкиПерефразирую: «Мне пофиг на производительность, ACID и прочую фигню. Да и с SQL у меня плохо».
Больше никогда так не буду делать
Взаимодействие кучи кривонаписанного кода приводило к трудноотлавливаемым багамА, да, я и забыл, что тру-программисты сразу пишут идеальный код, правят чужие баги по скриншоту и уже забыли, что такое дебаггер) Ничего, я тоже когда-нибудь выучусь!
Отсутствие возможности поООПить — ужасноООП? А что это? Я чего-то читал про разные автомобили и всяких млекопитающих, но так и не понял. Мне просто не нравится sql в императивном стиле, глаза об него ломаются, боюсь инвалидом стать)
Текстовые файлы очень неудобно хранить в системе контроля версийДа, затупил. Процедуры не трудно хранить в скв, их трудно хранить в текстовых файлах. Это одна из проблем, которую с переменным успехом решают системы миграций.
Мне пофиг на производительность, ACID и прочую фигню. Да и с SQL у меня плохоВы, наверно, не знаете, что кроме hibernate есть много других orm, не столь тормозных и без костылей в виде hql. Да, если не секрет, каким боком orm может нарушить acid принципы в субд?
тру-программисты сразу пишут идеальный кодДа нет, я всего лишь к тому, что кривой код можно написать на чем угодно. И более того — большинство кривого кода написано не на языках хранимых процедур СУБД.
их трудно хранить в текстовых файлахЧем?
кроме hibernate есть много других orm, не столь тормозных и без костылейORM без костылей — это нонсенс просто из определения ORM. Просто потому, что маппинг множеств и отношений между множествами в объекты влечет кучу проблем. Всегда. Могу предложить ссылку на классику на эту тему.
каким боком orm может нарушить acid принципы в субдНу, конечно, ОРМ обеспечивает все буковки аббревиатуры гораздо лучше, чем сама СУБД.
у вас есть положительный пример использования бизнес-логики в базе данныхЗа последние четыре года я сделал как минимум три крупных проекта Мэйл.Ру, используя логику приложения в СУБД. В разных СУБД, надо сказать. И везде это было оправданно. И везде работает. Нагрузки — от сотен хитов в секунду до десятков тысяч.
Да нет, я всего лишь к тому, что кривой код можно написать на чем угодноА, тогда ладно, а то я уж было подумал, что вы наш код заочно кривым обозвали =)
Пример: заказчик захотел добавить новое поле к учётке пользователя. Нужно добавить поле в таблицу, новый параметр в пару процедур и слегка переделать триггер. Составить скрипт миграции — проще некуда (alter table, alter proc ...). Однако, добавив этот скрипт в систему контроля версий, мы не получим ясной истории изменений (старые файлы не изменились, лишь добавился один новый). Определение объектов базы будет «размазано» по нескольким файлам. Фактически, после нескольких доработок, весь код базы данных оказывается случайным образом распределён по нескольким скриптам. Если пойти другим путём и всегда хранить определение объекта в одном файле, то придётся как-то определять порядок выполнения скриптов.их трудно хранить в текстовых файлахЧем?
Просто потому, что маппинг множеств и отношений между множествами в объекты влечет кучу проблем.
Ну, конечно, ОРМ обеспечивает все буковки аббревиатуры гораздо лучше, чем сама СУБД.Атомарность, изоляция и долговечность обеспечиваются субд в пределах одной транзакции. Все ОРМ умеют нормально работать с транзакциями. Согласованность можно обеспечить централизованным кэшем, или вобще отключить кэширование вне транзакций. Я в чём-то не прав?
Пример: заказчик захотел добавить новое поле к учётке пользователяТак если изменения постоянны, то скрипты миграции можно не заносить в релизную ветку. Можно же просто сохранить новую схему таблиц и зафиксировать в документации, что после такой-то ревизии код несовместим с предыдущими релизами.
Я в чём-то не прав?При желании, можно извратиться как угодно. Вам самому не кажется странным, что вместо одной сущности — СУБД — у вас добавляется еще две: кэш и орм? Как же принцип K.I.S.S? =) Ну да ладно.
Просто у вас второй и третий пункты тоже очень категоричны.Эт все из опыта. Я неоднократно видел проблемы, которых можно было бы избежать, потратив какое-то разумное время на проектирование. Точно так же, как не видел ни одного использования ОРМа в более-менее серьезном проекте, где в итоге не пришли бы к прямому выполнению SQL-запросов или не вносили бы изменений в архитектуру исключительно, чтобы исправить проблемы ОРМа.
где в итоге не пришли бы к прямому выполнению SQL-запросовВот, мне чем не нравится hibernate, так это тем, что он скрывает синтаксис sql. В паре мелких проектовал использовал iBatis — очень понравилось. Там всё основано именно на sql — есть средства для динамической генерации, разных комбинациях запросов, ОРМ не лезет дальше отображения строк в объекты. Конечно, там тоже проблем хватает, и 3-beta, которую я в последний раз использовал была весьма глючной, но надеюсь, что её доведут до ума. Сам пока что эксперементирую с no-sql базами.
Некоторые аспекты разработки платежных систем. Часть I. Трехзвенка без трехзвенки