Trwałość w Javie
Przez ostatnie lata zbierałem doświadczenie w dziedzinie abstrakcji trwałej w Javie, wykorzystując takie koncepcje, jak EJB 2.0, Hibernacja, JPA i domowe. Wydawało mi się, że mają stromą krzywą uczenia się i dużą złożoność. Ponadto, jako wielki fan SQL, myślałem również, że wiele modeli abstrakcji zapewnia zbyt dużo abstrakcji w stosunku do SQL, tworząc pojęcia takie jak „kryteria”, „predykaty”, „ograniczenia”, które są bardzo dobrymi koncepcjami, ale nie SQL.
Ogólna idea abstrakcji trwałości w Javie wydaje się być oparta na modelu relacyjno-obiektowym, w którym RDBMS jest w jakiś sposób dopasowany do świata OO. Debata ORM zawsze była emocjonalna, ponieważ wydaje się, że nie istnieje jedno rozwiązanie, które byłoby odpowiednie dla wszystkich - jeśli takie rozwiązanie mogłoby w ogóle istnieć.
JOOQ
Osobiście wolę, jak unikać problemów związanych z ORM, trzymać się świata relacyjnego. Teraz wybór paradygmatu modelu danych nie powinien być tematem dyskusji, ponieważ jest to osobista preferencja lub kwestia tego, który model danych najlepiej odpowiada konkretnemu problemowi. Dyskusja, którą chciałbym rozpocząć, dotyczy mojego własnego narzędzia trwałości o nazwie jOOQ . Zaprojektowałem jOOQ, aby zapewnić większość korzyści, jakie mają nowoczesne narzędzia do utrzymywania:
- Język specyficzny dla domeny oparty na SQL
- Generowanie kodu źródłowego odwzorowujące podstawowy schemat bazy danych na Javę
- Obsługa wielu RDBMS
Dodanie niektórych funkcji, które ma niewiele nowoczesnych narzędzi do utrzymywania (popraw mnie, jeśli się mylę):
- Obsługa złożonego SQL - związki, zagnieżdżone selekcje, autozłączenia, aliasing, zdania na zdania, wyrażenia arytmetyczne
- Obsługa niestandardowych SQL - procedur przechowywanych, UDT, ENUMS, funkcji rodzimych, funkcji analitycznych
Więcej informacji można znaleźć na stronie dokumentacji: http://www.jooq.org/learn.php . Zobaczysz, że bardzo podobne podejście jest zaimplementowane w Linq dla C #, chociaż Linq nie jest przeznaczony wyłącznie dla SQL.
Pytanie
Teraz, kiedy powiedziałem, że jestem wielkim fanem SQL, zastanawiam się, czy inni programiści podzielą mój entuzjazm dla jOOQ (lub Linq). Czy takie podejście do abstrakcji trwałej jest realne? Jakie mogą być zalety / wady? Jak mogę ulepszyć jOOQ i czego według ciebie brakuje? Gdzie popełniłem błąd, koncepcyjnie lub praktycznie?
Doceniono krytyczne, ale konstruktywne odpowiedzi
Rozumiem, że debata jest emocjonalna. Istnieje wiele świetnych narzędzi, które już robią podobne rzeczy. To, co mnie interesuje, to krytyczna, ale konstruktywna informacja zwrotna, oparta na twoim doświadczeniu lub artykułach, które mogłeś przeczytać.