Quali fondamenti teorici hai trovato per la progettazione di database "Modello di repository"? Non sto indovinando nessuno. È uno strato di complessità che poggia su una premessa falsa: che lo "strato di persistenza" è qualcosa da cui devi essere isolato. Da quello che posso dire, gioca alla diffusa ignoranza della programmazione dei principi di progettazione relazionale e asseconda una presunta centralità del design OO dell'applicazione. Ma non giustifica la sua esistenza su basi razionali, figuriamoci teoriche.
L'unico vero percorso per la progettazione del database non è cambiato da 30 anni: analizzare i dati. Trova le chiavi, i vincoli e le relazioni molti-a-uno. Progetta i tuoi tavoli secondo la forma normale di Boyce-Codd. Utilizzare le viste e le procedure memorizzate per facilitare l'accesso ai dati.
Per quanto non sia amato, un DBMS SQL offre un livello di isolamento migliore di qualsiasi cosa il programmatore possa fornire. È vero che, quando il database cambia, potrebbe essere necessario modificare l'SQL utilizzato per accedervi. Ma nota che questo è vero indipendentemente dal fatto che ci sia o meno un livello di mediazione . Finché l'applicazione utilizza viste e procedure memorizzate per accedere al DBMS, i normali strumenti di ingegneria SQL indicheranno quando le modifiche al database sottostante invalidano tali viste e procedure memorizzate.
Qui sta la sfida, ovviamente. Uno strato di mediazione fornisce l'illusione dell'isolamento e il conforto al programmatore di scrivere codice, che lui sa come fare. L'apprendimento della progettazione di database e SQL richiede l'apprendimento di qualcosa di nuovo. Molte persone preferiscono morire piuttosto che pensare, e molti ci riescono.
Qualcuno del tuo team obietterà senza dubbio che scrivere SQL per supportare le tue 200 classi richiede molto lavoro. Nessun dubbio. Ma almeno è un lavoro utile . Se si progetta un database imitando il proprio progetto OO, si farà anche molto lavoro, in gran parte inutile, e si sconfiggerà la maggior parte di ciò che offre il DBMS.
Ad esempio, si considera l'Unità di lavoro che riflette nel database (come tabella o tabelle, presumo). Unità di lavoro è un built-in servizio del DBMS: begin transaction
... aggiornamento del database ... commit transaction
. Nulla da modellare, tranne la mappatura delle classi alle tabelle del database in SQL.
La tua domanda è stata pubblicata 4 anni fa. Sto rispondendo perché è stato "aggiornato" in qualche modo di recente, indicando che è ancora interessante per qualcuno. Spero che la mia risposta incoraggi il lettore ad applicare la teoria relazionale di base al problema invece di adottare una soluzione inutile.