È capitato frequentemente di dover fornire l'accesso a un gruppo di file organizzati in un albero di directory in base ad alcune regole (talvolta non specificate). Il mio modello standard prevede di fornire una classe Database che viene inizializzata con la directory root. Questa classe fornisce i metodi getX () - like (esempio: getStructure ()) per estrarre i dati dal database. Questi metodi normalmente restituiscono oggetti semanticamente significativi (Structure) con metodi appropriati che restituiscono dati (ad esempio structure.getPoints ()). Non sono completamente soddisfatto di questo design, per due motivi principali.
Il primo problema è che la mappatura tra oggetti e file in-applicazioni potrebbe non essere 1: 1, cioè creare l'oggetto Structure potrei dover aprire file diversi nel "database", e la mappatura potrebbe non Sii perfetto. In questo caso, chiamo la Struttura un "oggetto spesso". Un'alternativa ("oggetti sottili") è di attenersi agli oggetti che sono completamente rappresentati in un file, anche se poveri nel significato di dominio di alto livello (cioè se ho due file per definire una struttura , un file contenente punti e l'altro contenente connessioni tra questi punti, fornisco solo un oggetto Points e un oggetto Connections e consento a qualcun altro di "connettere i punti" al di fuori del Database).
L'altro problema che ho è il seguente: chi dovrebbe eseguire l'analisi dei file effettiva? Immagino due strategie: o gli oggetti sono in grado di deserializzare se stessi da file ("pickle-like" in linguaggio python), o sono solo stupidi contenitori di dati riempiti da oggetti parser stateless (uno per file), o anche dall'oggetto database stesso.
Quando si esegue ORM, esistono regole chiare e ben definite su come l'oggetto è rappresentato nel database e il processo è estremamente ben definito in termini di interfaccia e comportamento. Questo non è necessariamente verificato con un gruppo arbitrario di file che alcuni chiamano "database".
Mi piacerebbe davvero i tuoi punti al riguardo. Come devo eseguire la deserializzazione corretta in questo caso di "raw mapping"? Oggetti sottili o spessi? Intelligente o stupido?
Si noti che in realtà non ho alcun controllo quando si tratta dei file che devo accedere. Ottengo i file da fonti esterne e devo convertirli in qualche tipo di oggetti di dominio, in genere solo per la lettura, ma a volte anche per la scrittura. Readonly è di gran lunga il caso più frequente però.