С риском поплавать в воде с некоторыми из тех, кто сильно страдает (чтобы смешать мои метафоры;) никогда не использовать и даже не думать о SQL. В худшем случае может потребоваться какое-то хакерское программирование с результатами нескольких запросов, исходя из того, что оно, конечно, будет преобразовано в необработанный SQL, когда требуется такая оптимизация;).
Сказать, что ORM не требуется по «очевидной» причине, несколько упускает из виду. Дальнейшее начало использования DSL для моделирования SQL усугубляет эту ошибку. В подавляющем большинстве веб-платформ объектная модель представляет собой DSL, используемый для описания данных, хранящихся в веб-приложении, а SQL - просто декларативный язык, необходимый для передачи этого в базу данных.
Порядок действий при использовании ROR, Django или Spring:
- Опишите ваши модели в формате ООП
- Откройте REPL и создайте несколько примеров моделей
- Построить некоторые представления
- Результаты проверки в веб-браузере
Хорошо, так что вы можете использовать немного другой порядок, но, надеюсь, вы поняли. Мышление в SQL или DSL, которое описывает это, далеко внизу списка. Вместо этого уровень модели абстрагирует весь SQL, что позволяет нам создавать объекты данных, которые точно моделируют данные, которые мы хотим использовать на веб-сайте.
Я бы полностью согласился с тем, что ООП не является «серебряной пулей», однако моделирование данных в веб-фреймворке - это то, для чего это определенно хорошо, и использование способности clojure для определения и манипулирования Java-классами кажется здесь хорошим совпадением.
Примеры в этом вопросе ясно демонстрируют, насколько болезненным может быть SQL, и такие DSL, как Korma, являются лишь частичным решением: «Предположим, у нас есть несколько таблиц в базе данных ...» - я думал, что мой DSL собирается создать их для меня? Или это просто что-то лучше, чем язык ООП? ;)