podam odpowiedź na podstawie pliku readme mojego niestandardowego konstruktora SQL ( Dialect )
(następuje zwykły tekst, usunięte odwołania specyficzne dla biblioteki)
Wymagania
- Obsługa wielu dostawców DB (np. MySQL, PostgreSQL, SQLite, MS SQL / SQL Server, Oracle, DB2, ..)
- Łatwo rozszerzony na nowe bazy danych (najlepiej poprzez ustawienie konfiguracji niezależne od implementacji)
- Modułowość i niezależność od implementacji możliwości przenoszenia
- Elastyczny i intuicyjny interfejs API
cechy
- szablony oparte na gramatyce
- obsługa niestandardowych widoków miękkich
- abstrakcja db, modułowość i możliwość przenoszenia
- przygotowane szablony
- ucieczka danych
Myślę, że powyższe funkcje i wymagania szkicują powody, dla których warto użyć konstruktora abstrakcji SQL
Większość powyższych funkcji jest obsługiwana przez większość konstruktorów SQL (choć nie sądzę, że wszystkie wymienione są obsługiwane, o ile wiem)
Przykłady przypadków użycia:
- Platforma CMS może współpracować (bez zmiany kodu bazowego) z wieloma dostawcami DB
- Niestandardowy kod aplikacji, w którym dostawca DB może się zmieniać i / lub schematy dB są dynamiczne (oznacza to, że wiele zapytań nie może być zakodowanych na stałe, ale nadal musi być wystarczająco abstrakcyjnych, aby kod był odporny na zmiany)
- Prototypowanie przy użyciu innej bazy danych niż ta używana w produkcji (wymagałoby duplikacji bazy kodu przynajmniej dla części kodu)
- Kod aplikacji nie jest ściśle powiązany z konkretnym dostawcą DB i / lub implementacją (nawet w obrębie tego samego dostawcy DB, np. Różnych wersji dostawcy DB), dlatego jest bardziej niezawodny, elastyczny i modułowy
- Wiele zwykłych przypadków zapytań i ucieczki danych jest obsługiwanych przez samą strukturę i zwykle jest to zarówno optymalne, jak i szybsze
W końcu przykład przypadku, który miałem. budowałem aplikację, w której bazowy schemat DB (wordpress) nie był dobrze dopasowany do rodzaju zapytań o dane, które należało wykonać, a także niektóre tabele WP (np. posty) musiały zostać użyte (więc mając zupełnie nowe tabele dla wszystkich danych aplikacji nie było opcją).
W takim przypadku możliwość stworzenia aplikacji podobnej do MVC, w której model mógłby być sprawdzany w niestandardowych / dynamicznych warunkach, sprawił, że zapytania stały się niemal koszmarem. Wyobraź sobie, że potrzebujesz obsługi zapytań może do 2-3 tabel z łączeniami i filtrowania warunków, aby zobaczyć, z którą tabelą się połączyć, a także zadbać o wymagane aliasy i tak dalej.
Najwyraźniej był to przypadek użycia abstrakcji zapytania, a co więcej, wymagał (lub przynajmniej znacznie skorzystał) z możliwości definiowania niestandardowych widoków miękkich (konglomerat połączonych tabel, tak jakby były one jedną niestandardową tabelą odpowiednią dla modelu) . Wtedy było o wiele łatwiejsze, czystsze, modułowe i elastyczne. W innym aspekcie aplikacja (kod) również używała warstwy abstrakcji zapytania jako narzędzia normalizacyjnego (schematu db) . Jak niektórzy twierdzą, był on przyszłościowy .
Jeśli jutro ludzie zdecydują, że potrzebują dodatkowych opcji lub danych, bardzo łatwo można dodać to do modelu w kilku liniach i działać dobrze. Dodatkowo, jeśli jutro ludzie zdecydują, że nie chcą już używać wordpressa (ponieważ aplikacja jest luźno powiązana z wordpressem jako wtyczką), można go również stosunkowo łatwo zmienić ( tylko definicja ) modeli w kilku liniach kodu w celu dostosowania do nowego schematu.
Widzisz co mam na myśli?