Jakie podstawy teoretyczne znalazłeś dla projektu bazy danych „Wzorzec repozytorium”? Nie sądzę. Jest to warstwa złożoności oparta na fałszywym założeniu: że „warstwa trwałości” jest czymś, od czego trzeba się odizolować. Z tego, co mogę powiedzieć, chodzi o powszechną niewiedzę programistyczną o relacyjnych zasadach projektowania, a także o założoną centralną rolę projektowania aplikacji. Nie uzasadnia to jednak istnienia na racjonalnych, nie mówiąc już teoretycznych podstawach.
Jedna prawdziwa ścieżka do projektu bazy danych nie zmieniła się od 30 lat: analizuj dane. Znajdź klucze i ograniczenia oraz relacje „jeden do jednego”. Zaprojektuj swoje stoły zgodnie z normalną formą Boyce-Codd. Użyj widoków i procedur przechowywanych, aby ułatwić dostęp do danych.
Być może niekochany SQL DBMS zapewnia lepszą warstwę izolacyjną niż wszystko, co może zapewnić programista. Prawdą jest, że wraz ze zmianą bazy danych SQL używany do uzyskania dostępu może ulec zmianie. Pamiętaj jednak, że jest to prawdą niezależnie od tego, czy istnieje warstwa mediacyjna . Tak długo, jak aplikacja korzysta z widoków i procedur przechowywanych w celu uzyskania dostępu do DBMS, zwykłe narzędzia inżynierskie SQL będą wskazywać, kiedy zmiany w bazowej bazie danych unieważnią te widoki i procedury przechowywane.
Na tym polega oczywiście wyzwanie. Warstwa mediacyjna zapewnia złudzenie izolacji i wygodę dla programisty pisania kodu, który wie, jak to zrobić. Nauka projektowania baz danych i SQL wymaga nauczenia się czegoś nowego. Większość ludzi woli umrzeć niż myśleć, a wielu odnosi sukcesy.
Ktoś z twojego zespołu bez wątpienia sprzeciwi się temu, że pisanie SQL w celu obsługi 200 klas to dużo pracy. Bez wątpienia. Ale to przynajmniej przydatna praca. Jeśli projektujesz bazę danych naśladując projekt OO, wykonasz również dużo pracy, w większości bezużytecznej i pokonasz większość tego, co oferuje DBMS.
Na przykład, rozważasz odzwierciedlenie jednostki pracy w bazie danych (zakładam, że jako tabelę lub tabele). Jednostka pracy jest wbudowany w służbie DBMS: begin transaction
... ... aktualizacji bazy danych commit transaction
. Nic do modelowania, oprócz mapowania klas na tabele bazy danych w SQL.
Twoje pytanie zostało opublikowane 4 lata temu. Odpowiadam, ponieważ ostatnio został w jakiś sposób „zaktualizowany”, co oznacza, że nadal jest dla kogoś interesujący. Mam nadzieję, że moja odpowiedź zachęca czytelnika do zastosowania podstawowej teorii relacyjnej do problemu zamiast przyjmowania bezsensownego obejścia.