ci sono un paio di questioni di fondo con questo approccio (IMO):
EF, come qualsiasi ORM, rientra nella preoccupazione persistenza. In quanto tale, non dovrebbe interferire con il modo in cui strutturate il vostro modello di dominio. Il fatto che tutte le entità siano persistite in ciò che sembra un archivio di persistenza può essere un'indicazione che i contesti limitati si sovrappongono o sono inesistenti.
Cercare di passare a una struttura migliore non è una cosa negativa :) --- tuttavia, come ha affermato Mark Oreta, probabilmente non mi preoccuperei della struttura EF.
Il problema principale che si sta verificando è causato dal tentativo di leggere dal modello di dominio. Questo sembra emergere troppo spesso nei sistemi e rende le cose piuttosto difficili. Il caricamento lento è il risultato diretto di esattamente questo. Quando leggi, dovresti idealmente usare un livello di query con accesso a un negozio di query (potrebbe essere lo stesso database) ottimizzato per la lettura. Nel tuo esempio hai bisogno di un nome cliente denormalizzato nel tuo dominio di vendita. Questo va bene. Cercando di ottenere ciò leggendo il tuo modello di dominio e poi cercando di inserire dati da un modello di dominio in un altro contesto limitato, ciò che ti sta causando il dolore.
Se si procede lungo il percorso di suddivisione dei dati, sarà necessario tenerlo diviso.
Sebbene i dati di vari BC possano essere tutti nello stesso negozio, è necessario considerare i dati come se ogni BC avesse il proprio database. A volte ho un singolo progetto con varie preoccupazioni (livelli per alcuni) in diverse cartelle/spazio dei nomi (.NET qui). Dovrebbe essere possibile suddividere queste preoccupazioni in assemblee separate per un capriccio. Quindi non dovrebbero essere troppo strettamente accoppiati. Lo stesso vale per questa struttura dati che stai tentando di dividere. Dovresti in sostanza essere in grado di suddividere i dati BC rilevanti in un database separato. I meccanismi per ottenere i dati attraverso le BC sono un'altra cosa e immagino che se ciò non può essere risolto potreste trovarlo in difficoltà.
Anche se non credo che l'identificazione jacket dal lato dei dati può essere idea migliore è certamente un passo nella giusta direzione :)
fonte
2013-03-01 04:39:47
Quindi stai dicendo, in realtà non importa se aggiungo clienti nella mia aC Le vendite dal momento che è buona per trattare ogni BC come un archivio dati separato? –
Inoltre, quando dici che ho bisogno di un nome cliente denormalizzato nel mio dominio di vendita, vuoi dire che devo aggiungere un'altra colonna CustomerName nella mia tabella delle vendite? O vuoi dire che devo aggiungere l'intera tabella clienti nel mio edmx vendite (BC)? –
Il fatto è questo: se si aggiunge il cliente al dominio di vendita diventa un VO poiché fornisce dati (solo una vista) e non si interagirebbe con esso. Forse il 'Cliente' nel dominio Vendite ha solo un ID e FullName, ma non" tira "nell'entità Cliente nel tuo dominio Vendite. d optare per il nome cliente denormalizzato nel dominio di vendita. Naturalmente tutto dipende dal contesto :) –