Witam.
Od kilku lat systematycznie rozwijam swoją aplikację.
Jest ona coraz większa i zachciało mi się odzielić zapytania do bazy od logiki tak aby w przyszłości móc zamienić bezproblemowo mysqla na postgresa albo xmla albo jeszcze cokolwiek innego.
I tu pojawia się problem.
Przeczytałem sporo o wzorcach projektowych (ActiveRecord itp.) jednak one nie za bardzo spełniają moje założenia. W zapytaniach używam wielokrotnych złączeń, funkcji agregujących, funkcji dodatkowych (np. concat() czy date_add() w mysql). Tak więc ich koncepcja generalnie mi nie odpowiada.
Na phppatterns.com widziałem tez rozwiązanie brute forcowe polegające na tym, że tworzy się dla każdego modułu osobną klasę, w której dla każdego zapytania używanego w logice tworzy się osobną metodę zwracającą zestandaryzowany wynik zapytania. Jednak przy wielu zapytaniach klasa taka rozrośnie się niemiłosiernie.
Wszelkie kreatory zapytań też wydają mi się mało optymalne ze względu na bogactwo języka zapytań i na to, że nie może nikt mi zagwarantować, że późniejsze migracje do xmola zachowają kompatybilność np. z frazą gruoupby. Może się więc okazać, że jeżeli napiszę klasę kreatora zapytań implementującą metodę groupby() to potem nie będę miał jak tego przekonwertować do nowego enginu.
Pytanie moje jest więc takie.
Czy macie jakiś sensowny, łatwo dostosowywalny sposób na oddzielenie zapytań od logiki?