La mia situazione è che ho fottuto essenzialmente. Ho ereditato la mia base di codice circa 1,5 anni fa quando ho preso questa posizione e piuttosto che reinventare la ruota, anche se ora so che avrei dovuto, ho mantenuto il DAL praticamente nella stessa struttura del precedente sviluppatore.Quale strategia DAL usi o suggerisci?
Essenzialmente c'è un file (ora a 15k linee di codice) che funge da passaggio tra un gruppo di DAO che utilizzano DataSet e TableAdapter per recuperare i dati. I miei file xsd sono cresciuti a tal punto da far sì che R # subisca un arresto anomalo allo studio visivo ogni volta che si apre e la classe intermedia che ora è di 15k linee impiega anche un'eternità per analizzare R #. Per non dire che è brutto, funziona ma non bene, ed è un incubo assoluto per il debug.
Quello che ho provato fino ad ora è passare a NHibernate. NHibernate è una grande libreria, ma sfortunatamente non era abbastanza adattabile per funzionare con la mia applicazione, da quello che dice lo sviluppatore principale (Fabio Maulo) è praticamente una combinazione dei miei requisiti applicativi e delle restrizioni su NHibernate quando si usa l'identità come database Strategia PK.
Così ora sono tornato a progettare essenzialmente il mio DAL. Sto osservando alcuni modelli diversi per questo, ma vorrei ottenere le tue strategie di progettazione DAL. Ci sono tanti modi e motivi per implementare un DAL in un modo particolare, quindi se potessi spiegare la tua strategia e perché era la soluzione migliore per te, lo apprezzerei molto.
Grazie in anticipo!
Modifica: mi permetta di spiegare perché NHibernate non ha funzionato poiché quella sembra essere la risposta immediata. I miei utenti creano un "lavoro" che in realtà è solo una rappresentazione transitoria della mia classe di lavoro. All'interno di questo lavoro gli daranno uno o un elenco di fattori di peso che sono anche transitori al momento della creazione. Infine forniscono un elenco di dettagli del lavoro a cui è associato un particolare fattore di peso. Perché, nel DB, i fattori di peso sono unici quando vado a perseguire il lavoro e si riduce a un fattore di peso che muore quando trova un fattore di peso duplicato. Ho provato a eseguire un controllo prima di assegnare il fattore peso al dettaglio (che non volevo fare perché non voglio le chiamate extra al db) ma chiamare CreateCriteria in NH provoca anche un flush nella sessione, secondo Fabio, che distrugge la mia cache e quindi uccide l'intera rappresentazione in memoria del lavoro. La gente alla mailing list NH ha detto che dovrei passare a GUID, ma questa non è un'opzione praticabile in quanto il processo di conversione sarebbe un incubo.
Quali problemi hai con NHibernate? Lo uso sempre con i PK di identità senza problemi. –
Hmm, forse usa Sessioni di lunga durata (modello Session per Business Transaction), e in tale approccio, l'uso dell'identità è scoraggiato, dal momento che rompe l'unità di lavoro (deve essere svuotato direttamente dopo l'inserimento di una nuova entità). Una soluzione potrebbe essere quella di eliminare l'identità e utilizzare il generatore di identità HiLo. –
Ah sì, questa è una possibilità (e la tua soluzione). –