Наполегливість на Яві
Протягом останніх років я збирав досвід у галузі стійкої абстракції на Java, використовуючи такі поняття, як EJB 2.0, Hibernate, JPA та домашні вироби. Мені здавалося, що у мене крута крива навчання та багато складності. Крім того, як великий шанувальник SQL, я також вважав, що багато моделей абстракції забезпечують занадто велику абстракцію над SQL, створюючи такі поняття, як "критерії", "предикати", "обмеження", які є дуже хорошими поняттями, але не є SQL.
Загальна ідея стійкості абстракції на Java, здається, базується на об'єктно-реляційній моделі, де RDBMS якось узгоджується зі світом OO. Дебати щодо ОРМ завжди були емоційними, оскільки, здається, не існує єдиного рішення, яке підходить усім - якщо таке рішення навіть може існувати.
jOOQ
Мої особисті переваги, як уникнути проблем, пов'язаних з ОРМ, - це дотримуватися реляційного світу. Тепер вибір парадигми моделі даних не повинен бути предметом обговорення, оскільки це особисте уподобання або питання про те, яка модель даних найкраще відповідає конкретній проблемі. Дискусія, яку я хотів би розпочати, стосується мого власного інструменту стійкості під назвою jOOQ . Я розробив jOOQ, щоб забезпечити більшість переваг, які мають сучасні інструменти збереження:
- Мова домену, заснована на SQL
- Генерація вихідного коду відображає основні схеми бази даних на Java
- Підтримка багатьох RDBMS
Додавання деяких функцій, які мають декілька сучасних інструментів збереження (виправте мене, якщо я помиляюся):
- Підтримка складних SQL - об'єднань, вкладених вибірок, самостійних приєднань, псевдоніму, випадок, арифметичні вирази
- Підтримка нестандартних SQL - збережених процедур, UDT, ENUMS, нативних функцій, аналітичних функцій
Будь ласка, ознайомтесь із сторінкою документації для отримання більш детальної інформації: http://www.jooq.org/learn.php . Ви побачите, що дуже схожий підхід реалізований у Linq для C #, хоча Linq не розроблений виключно для SQL.
Питання
Тепер, сказавши, що я великий шанувальник SQL, мені цікаво, чи поділяться інші розробники моїм захопленням jOOQ (або Linq). Чи такий підхід до стійкої абстракції є життєздатним? Які переваги / недоліки ви можете бачити? Як я міг покращити jOOQ, а чого не вистачає на вашу думку? Де я помилився, концептуально чи практично?
Критичні, але конструктивні відповіді високо оцінені
Я розумію, що дискусія є емоційною. Існує багато чудових інструментів, які вже роблять подібні речі. Мене цікавлять критичні, але конструктивні відгуки, виходячи з власного досвіду чи статей, які ви, можливо, прочитали.