Постоянство в Java
За последние годы я накопил опыт в области абстрагирования персистентности в Java, используя такие концепции, как EJB 2.0, Hibernate, JPA и отечественные. Мне показалось, что у них крутая кривая обучения и много сложностей. Кроме того, как большой поклонник SQL, я также подумал, что многие модели абстракции предоставляют слишком много абстракции по сравнению с SQL, создавая такие понятия, как «критерии», «предикаты», «ограничения», которые являются очень хорошими понятиями, но не SQL.
Общая идея абстракции персистентности в Java, кажется, основана на объектно-реляционной модели, где RDBMS так или иначе соответствуют миру ОО. ORM-дебаты всегда были эмоциональными, поскольку, похоже, не существует единого решения, которое устраивало бы всех - если такое решение вообще может существовать.
jOOQ
Мое личное предпочтение, как избежать проблем, связанных с ORM, - придерживаться реляционного мира. Теперь выбор парадигмы модели данных не должен быть предметом обсуждения, поскольку это личное предпочтение или вопрос о том, какая модель данных лучше всего подходит для конкретной проблемы. Дискуссия, которую я хотел бы начать, посвящена моему собственному инструменту персистентности под названием jOOQ . Я разработал jOOQ, чтобы обеспечить большинство преимуществ современных инструментов персистентности:
- Специфичный для домена язык на основе SQL
- Генерация исходного кода, отображающая базовую схему базы данных на Java
- Поддержка многих СУБД
Добавление некоторых функций, которые есть у некоторых современных инструментов персистентности (поправьте меня, если я ошибаюсь):
- Поддержка сложных SQL - объединений, вложенных выборок, самосоединений, псевдонимов, предложений case, арифметических выражений
- Поддержка нестандартных SQL - хранимых процедур, UDT, ENUMS, нативных функций, аналитических функций
Пожалуйста, рассмотрите страницу документации для более подробной информации: http://www.jooq.org/learn.php . Вы увидите, что очень похожий подход реализован в Linq для C #, хотя Linq не предназначен исключительно для SQL.
Вопрос
Теперь, сказав, что я большой поклонник SQL, мне интересно, поделятся ли другие разработчики моим энтузиазмом по поводу jOOQ (или Linq). Является ли такой подход к абстракции постоянства жизнеспособным? Какие преимущества / недостатки вы можете увидеть? Как я могу улучшить jOOQ, и чего, по вашему мнению, не хватает? Где я ошибся, концептуально или практически?
Критические, но конструктивные ответы приветствуются
Я понимаю, что дискуссия носит эмоциональный характер. Есть много отличных инструментов, которые уже делают подобные вещи. Меня интересует критическая, но конструктивная обратная связь, основанная на вашем собственном опыте или статьях, которые вы, возможно, читали.