Struttura corretta ed efficiente per un livello di entità?

4

Contesto

Applicazione Web basata su .NET Framework scritto in C # e seguendo il modello di progettazione MVC.

Domanda

Qual è il modo più efficiente per strutturare un livello di entità costituito da vari input di dati?

Sfondo

Sto sviluppando un'applicazione per un client che richiede la lettura e la scrittura di dati da varie fonti e vorrei creare un singolo livello / modello di entità per astrarre le varie origini dati in modo che sia sufficiente interrogare il modello unificato da codice. Ecco un esempio delle fonti disparate:

  • MS SQL Data Warehouse (circa 200 tabelle di dati a livello di impresa
  • Servizi Web di MS Dynamics AX
  • Un nuovo database MS SQL specifico per l'applicazione in fase di sviluppo
  • MS Active Directory per autenticare gli utenti e ottenere informazioni sul profilo utente e sul gruppo.
  • In alcuni casi, servizi Web di SharePoint.

Ho usato ADO.NET un bel po '(file .edmx e così via) e fondamentalmente, so come farlo, ma sto lottando un po' con un approccio solido e pulito. Creo due file .edmx separati per i due DB SQL e quindi scrivo classi di oggetti per Active Directory, SharePoint e AX? Scrivo semplicemente un file di grande modello? Un intero progetto separarato solo per fare l'astrazione?

Grazie mille!

    
posta Matt Cashatt 22.05.2012 - 21:34
fonte

3 risposte

1

Sembra che tu stia provando a modellare un insieme di fonti di dati disparate come un singolo modello.

Se è davvero così, la mia opinione è che la creazione di un progetto per rendere l'astrazione è la strada da percorrere.

Dico questo perché hai a che fare con diversi TIPI di fonti. Ad esempio, se tu avessi solo due database potresti mettere un collegamento tra loro e astratto in questo modo.

Tuttavia, hai a disposizione un data warehouse, alcuni servizi Web e Active Directory. Non so se ci sarebbe un modo per consolidare tutte queste cose, e anche se ci fosse, potrebbe essere complicato.

Mettere l'astrazione in un progetto separato assicura anche che tu debba cambiare UN posto quando le entità cambiano. Inoltre ti assicura di nascondere i dettagli di ciò che accade dietro le quinte del tuo front-end. Questo può essere importante, in particolare quando devi aggiungere qualcos'altro (non se - con molte fonti qualcos'altro verrà sicuramente dopo)

    
risposta data 22.05.2012 - 22:00
fonte
0

Avere un assembly separato per l'accesso ai dati è una buona idea in questo caso e rende più semplice puntare un progetto di test separato per testare in modo più pulito il livello di accesso ai dati. È possibile sviluppare i modelli di entità come classi semplici e quindi utilizzare i servizi per popolarli. Potresti dare un'occhiata a Entity Framework Code First per l'accesso al database in quanto si allontanerà dalla dipendenza .edmx e manterrà le tue classi di entità più pulite.

C'è un tutorial di Scott Guthrie sull'uso di Code First con i database esistenti.

    
risposta data 23.05.2012 - 04:26
fonte
-1

Ho già utilizzato il modello di repository in un progetto che sembra molto simile a questo. Ho catturato le entità come semplici classi e quindi per le entità che sono state archiviate in SQL ho usato Entity Framework Code First per generare le tabelle in SQL per me. Inoltre, se le tue informazioni saranno archiviate in più database, avrai solo bisogno di una classe DBContext per ogni origine dati. L'utilizzo del modello di repository ti consentirà di puntare a qualsiasi fonte per popolare ogni repository di entità.

Per quanto riguarda i servizi web, in genere li divido in un altro progetto per creare una divisione fisica tra un livello di servizio e uno strato dati.

Quindi in questo scenario avrei 2 progetti. Uno per il livello dati (questo implementerebbe il pattern del repository, includerà entità correlate e gestirà CRUD in datastore usando EF o ADO.Net), e uno per il livello di servizio (questo parlerà con il servizio AD, i servizi SharePoint e qualsiasi altro servizi. Conterrà anche le entità correlate per questi servizi).

    
risposta data 24.07.2012 - 20:03
fonte

Leggi altre domande sui tag