Entity Framework è la strada da seguire per la nostra situazione?

3

Una piccola panoramica su ciò che fa il mio gruppo ...

Lavoro in un team di sviluppo in una compagnia assicurativa piuttosto grande. La responsabilità del mio gruppo consiste principalmente nella creazione di applicazioni per i nostri dipendenti. Roba come i sistemi di tracciamento, le applicazioni di pianificazione, le directory dei contatti, ecc.

Ovviamente abbiamo una quantità decente di "dati condivisi" che tutte le applicazioni di solito fanno riferimento. Cose come stati, impiegati e una manciata di elementi che riguardano la nostra particolare attività (agenti, linee di business, società di rating, ecc.). Al momento disponiamo di un set di codice comune che tutte le applicazioni possono sfruttare per recuperare la maggior parte di questi dati comuni.

La maggior parte delle richieste che richiediamo richiede modifiche agli oggetti del database corrente o alla creazione di molti nuovi oggetti del database. Il nostro gruppo è piuttosto piccolo, ma probabilmente abbiamo ancora 3-4 serie di modifiche al database che passano attraverso il nostro sistema di gestione delle modifiche in un dato momento e, in base alla priorità, alcune nuove modifiche possono far saltare gli altri sulla loro strada verso la produzione. / p>

Comprendo tutti i vantaggi che EFL offre, ma ho anche alcune preoccupazioni date la nostra configurazione: Dato che esiste l'elemento dei dati condivisi, sembra che abbia senso avere un modello di dati per l'intero database (che contiene tutti gli oggetti per tutte le diverse applicazioni). È un'assunzione sicura? Oppure è possibile costruire modelli di dati separati e farli interagire tra loro?

Alla fine, vogliamo una classe che si chiami "Dipendente" e vogliamo che sia in grado di costante attraverso qualsiasi applicazione, quindi sembra che sia necessario creare un mega Data Model in modo che le applicazioni AZ abbiano accesso a tutte i dati dei dipendenti e tutti fanno riferimento alla classe Employee. A meno che la classe non possa sedersi in una DLL GAC e quindi ogni modello di dati può fare riferimento ... o, come ho chiesto, modelli di dati separati possono interagire tra loro.

Quindi ... se andiamo con un mega modello di dati, quanto sarebbe difficile avere individui diversi che apportano modifiche separate a quel modello di dati unificato e poi spostarlo attraverso un sistema di gestione delle modifiche?

Riesco a vedere i vantaggi dell'utilizzo di una tale tecnologia in un'applicazione silo-cata ... soprattutto una con una manutenzione minima ... ma sto facendo fatica a immaginare se il risparmio di tempo sarebbe ancora lì su un grande scala con tonnellate di diversi modelli di manutenzione dei dati in corso ... tutto allo stesso tempo.

Qualsiasi consiglio dato sarebbe molto apprezzato.

    
posta user107775 21.10.2011 - 22:08
fonte

2 risposte

0

Per quanto riguarda il controllo delle versioni, ti dirò che hai già questo problema in una forma diversa, anche se potresti non saperlo. Hai un database, ma hai più progetti che accedono ai dati, correggi? In sostanza, ciò che sta accadendo ora è che dal momento che tu stai utilizzando (probabilmente) SQL per accedere al tuo database in ciascuna delle tue applicazioni, il tuo progetto si compila comunque, indipendentemente dalle modifiche apportate al database. Qualsiasi vero cambiamento si verifica in fase di esecuzione.

Aggiungendo un modello di dati di entità, si sposta semplicemente questa interruzione nella propria applicazione a una che avviene in fase di compilazione. Credo che la mia domanda a te sia "come stai modificando la versione del tuo database?" Ti suggerirei di creare un modello di dati a singola entità, inserirlo in un assieme e apportarvi modifiche quando apporti modifiche al tuo database. Utilizzare la ramificazione e l'unione nel provider di controllo del codice sorgente per gestire il modo in cui queste modifiche si verificano effettivamente nel flusso di lavoro di sviluppo. Le versioni più recenti di Entity Framework sono molto meglio al giorno d'oggi per la gestione delle unioni rispetto a prima.

    
risposta data 22.10.2011 - 17:18
fonte
1

La mia esperienza è: è l'inferno sulla terra.

Abbiamo un grande prodotto principale che ha molti moduli aggiunti. Un determinato cliente avrà un core più uno o più moduli, e ogni cliente avrà un insieme diverso di moduli per qualsiasi altro. I moduli possono apportare modifiche allo schema del DB, in genere alle proprie tabelle, ma a volte aggiungere colonne alle tabelle principali.

In precedenza questo era facile, apporta le modifiche a sql e spediscile insieme alle istruzioni di installazione per ciascun modulo. Nessun problema (a meno che, ovviamente, non sia stato installato correttamente, ma questo è un problema con qualsiasi cosa).

Quando ci siamo trasferiti su EF, non è stato divertente. Innanzitutto, se apporti modifiche al tuo DB, cambi di conseguenza il tuo EF locale. Dovrai quindi ricostruire tutti i moduli e il core che usano quell'assemblaggio EF - o ottieni errori o, peggio, non riesce a caricare completamente un modulo. (ok, puoi usare GAC e i file dei criteri, ma si sommano rapidamente e avere molte delle stesse DLL nel GAC smette di funzionare, abbiamo trovato)

Quando si tratta di eseguire il test, ora è necessario creare un assieme EF che visualizzi il DB utilizzato dal cliente e ricostruire tutti i componenti, poiché si dispone di un sistema di controllo delle versioni, oppure nessuno di essi verrà caricato.

Quindi siamo passati dalla scrittura di un file di testo con istruzioni sql che sono state eseguite in qualunque DB, per farlo, oltre ad aggiornare molte diverse DLL EF e assicurandoci di averle installate correttamente, oltre a ricostruire molti dei nostri moduli tutto il tempo. Forse avremmo potuto farlo meglio con le sub-EF dll, ma quella principale è di diversi Mb quindi non avevamo voglia di gestirne molti contemporaneamente su ogni sito del cliente.

I risparmi potrebbero essere presenti in un'applicazione siloed (si intende monolitica), ma è comunque necessario gestire le ricostruzioni mentre si modifica lo schema DB (o si finisce per distribuire molte e numerose DLL EF). Potrei essere tentato di farlo di nuovo e cercare di farlo bene, ma penso che il vecchio modo fosse così semplice e infallibile che non riesco a capire perché mi preoccuperei. Avere LINQ è bello, ma scrivere vecchio sql non ha richiesto esattamente tutto il giorno per scrivere.

    
risposta data 21.01.2012 - 16:45
fonte

Leggi altre domande sui tag