Никогда не получал ничего, кроме боли и разочарования от пакетов ORM. Если бы я написал свой SQL так, как они его генерируют - да, я бы сказал, что он быстрый, а мой код медленный :-) Вы когда-нибудь видели SQL, сгенерированный ORM? Едва ли имеет PK-ы, использует FK-ы только для ошибочной интерпретации «наследования», и, если он хочет выполнить разбиение на страницы, он сбрасывает на вас весь набор записей, а затем отбрасывает 90% его :-))) Затем он блокирует все в поле зрения поскольку он должен принимать множество записей, как будто он вернулся к 50-летней пакетной обработке IBM.
Некоторое время я думал, что самая большая проблема с ORM - это расщепление (не будет стандарта через 50 лет - каждый год разные API, простите за «модель» :-) и идеологизация (каждый продает вам большую философию - всегда лучше, чем все остальные, конечно :-) Тогда я понял, что это действительно тотальный дилетантизм, который является причиной беспорядка, а все остальное - только следствие.
Тогда все начало обретать смысл. ORM никогда не задумывался как производительный или надежный - этого даже не было в списке :-) Это была академическая, «концептуальная» игрушка с самого первого дня, поощрительная премия для профессоров бесила, что все их «реляционные» исследовательские работы в Пролог обанкротился, когда IBM и Oracle начали продавать эту ужасную вещь SQL и зарабатывать: -)
Самым близким к доверию, к которому я пришел, был LINQ, но только потому, что можно и довольно легко исключить все «отслеживание» и использовать его как слой десериализации для обычного кода SQL. Затем я прочитал, как у объекта, управляющего соединением, могут возникать спонтанные сбои, которые звучали как преждевременный сборщик мусора, в то время как вокруг него все еще было что-то висящее. После этого я ни за что не собирался рисковать своей шеей - нет, не моей головой: -)
Итак, позвольте мне составить список:
- Абсолютно неаккуратный код - не будет страдать от ошибок и плохой производительности
- Не собираюсь брать взаимоблокировки от "транзакций" ORM в 10-100 раз длиннее
- Резкое сокращение возможностей - в наши дни SQL обладает огромной выразительной силой
- Связывание вас с бахромой и небрежным API (каждый ORM стремится взломать вашу кодовую базу)
- SQL-запросы легко переносимы, а знания SQL полностью переносимы
- Мне все равно нужно знать SQL, чтобы все равно очистить ORM
- Для "проверки концепции" я могу просто сериализовать в двоичные или XML-файлы
- не намного медленнее, библиотеки с нулевым числом ошибок и один XPath можно выбрать лучше
- Я на самом деле делал сайты с большим трафиком из файлов XML
- если мне действительно нужен реальный граф, тогда я не буду использовать БД - ничего реального для запроса
- Я могу сериализовать большой двоичный объект и выгружать его в SQL как три строки кода
- Если кто-то утверждает, что он делает все это от БД до пользовательского интерфейса - держите кодовую базу заблокированной :-)
- и сделайте резервную копию вашей базы данных по заработной плате - вы будете мне благодарны: -)))
- Основы NoSQL более честны, чем ORM - «мы специализируемся на постоянстве»
- и имеют лучшее качество кода - совсем не удивлен
Это был бы краткий список :-) Кстати, современные движки SQL в наши дни выполняют деревья и пространственную индексацию, не говоря уже о том, что подкачка страниц не ведется ни на одну запись. ORM-ы на самом деле «решают» проблемы 10-летней давности и продвигают дилетантизм. В этой степени NoSQL, также известный как документ