Una domanda sull'utilizzo di diversi livelli di accesso ai dati per diversi provider di database

4

Ho una domanda sull'opportunità di utilizzare diversi livelli di accesso ai dati per diversi provider di database come SQL Server, MySQL Server, Oracle ecc.

Non è meglio utilizzare un singolo livello di accesso ai dati con l'ORM o simili mappature in modo che le attività specifiche del database siano gestite con meno codice rispetto alla duplicazione completa del codice tra diversi livelli di accesso ai dati.

Forniscimi i tuoi suggerimenti insieme ai riferimenti da utilizzare in caso di linguaggio di programmazione C # nella piattaforma .NET.

    
posta Saravanan 11.07.2011 - 07:56
fonte

2 risposte

3

Bene saravanan, sembra che tu abbia già la risposta! SÌ, sarebbe sbagliato utilizzare diverse implementazioni DAL se tutti eseguono la stessa logica (e questo solo per un supporto del motore DB più ampio)! Come hai detto, il principio di design "Non ripeterti" parla contro di esso. E secondo il principio di design "Separation of Concerns", sarebbe anche sbagliato confondere le tue preoccupazioni. La tua logica di query è una preoccupazione e il tuo metodo di accesso al motore DB / dialetto SQL altro. Quindi sì, è in realtà il compito degli ORM di parlare con il motore DB sottostante e il suo specifico dialetto SQL. In caso di NHibernate come ORM, la modifica del motore DB sottostante sarà costituita da poche righe di configurazione (per l'oggetto SessionFactory). Potresti semplicemente specificare la configurazione del tuo motore DB durante ogni distribuzione in base alle tue esigenze. Visita il link per ulteriori dettagli su NHibernate. Mostra anche i diversi dialetti supportati da NHibernate. Spero che questo aiuti.

    
risposta data 11.07.2011 - 12:02
fonte
1

ok, un esempio è Entity Framework con Oracle - EF genera SQL non valido fino a qualsiasi DB non SQLServer (Microsoft ha esteso sql con una nuova istruzione - Cross Application ). Quindi in questo caso, usare EF ORM con Oracle o MySQL può essere una scelta disastrosa.

Solitamente le persone come le librerie client indipendenti dal DB, il costo è un po 'di prestazioni e occasionalmente problemi legati al tipo di dati (ad es. una data può essere rappresentata in modo diverso per diversi DB), occasionalmente si ottengono alcune limitazioni nelle diverse funzionalità dei DB (ad es. 10 x da y "non funziona con Oracle ma con SQLServer, devi" selezionare x da y dove rowid < 10 ". Di solito questo è permesso nella libreria client ma a volte non offrono questa funzionalità affatto per entrambi i DB).

Penso che le uniche volte in cui si vuole veramente un provider specifico per DB ora è quando le prestazioni sono molto importanti, specialmente per non doversi preoccupare di ciò che la libreria client fa con la memoria. La maggior parte degli accessi al DB sono lenti, ma la riallocazione di enormi blocchi di memoria è ancora più lenta. L'altro aspetto è se hai bisogno di funzionalità specialistiche fornite da un singolo DB, in questo caso è più probabile che tu abbia bisogno della libreria dei provider.

    
risposta data 11.07.2011 - 11:19
fonte

Leggi altre domande sui tag