Progettazione software .NET e Oracle ODP.NET UDT

1

Sto lavorando a un nuovo design di software .NET comune (principalmente) per applicazioni di servizi Web basate su WCF con frontend client correlati (tutti scritti in C #). Finora ho scelto alcuni framework (NUnit, Autofac / Castle Windsor) come base per l'applicazione.

Ora sto facendo qualche ricerca sull'astrazione db. Sto considerando NHibernate (insieme a FluentNHibernate) come framework di persistenza. Ma ci sono alcune preoccupazioni su NHibernate.

Le interfacce database fornite dal nostro team db dev si basano molto su stored procedure e spesso usano oggetti UDT come parametri di output (a volte anche cursori ref). Molte applicazioni già esistenti utilizzano classi UDT C # generate automaticamente.

NHibernate sembra funzionare bene con Oracle (con configurazione e utilizzo appropriati di ODP.NET). Vedi Fluent NHibernate - come configurare oracle? , Fluent NHibernate: configurazione ODP di Oracle Data Provider . Anche i cursori ref e le chiamate alle stored procedure sembrano funzionare con nhibernate (vedere Chiamare una procedura di archiviazione Oracle con nHibernate e Oracle stored procedure, SYS_REFCURSOR e NHibernate ).

È appropriato utilizzare NHibernate in questo caso (procedure memorizzate e output UDT / ref cursore)? O sarebbe meglio mantenere le classi UDT C # generate automaticamente e implementare oggetti di accesso ai dati personalizzati?

Progettazione A (con classi UDT generate automaticamente):

  • Crea oggetti di business nel modello di dominio (ad esempio class Product )
  • Definisci interfacce indipendenti dal database, ad es. %codice%.
  • Implementalo nelle classi, ad es. IDataAccessProduct che rappresenta dati specifici accedere agli oggetti. Ad esempio, questa classe esegue una mappatura di classi UDT generate automaticamente (entità) a% oggetti di dominio% co_de e viceversa.

Design B (con NHibernate):

  • Crea oggetti di business nel modello di dominio (ad esempio, classe di entità OracleDataAccessProduct .)
  • Aggiungi interfaccia a IProductRepository per il repository. Nel modello di dominio. Aggiungi Product che estende il valore es. classe base Product : IEntity<Product> .
  • Utilizzo del mapping di ibernazione per gli oggetti dominio nella tabella db ( ProductRepository ).

Quindi quale design preferiresti?

    
posta Marco Mayer 03.04.2013 - 17:26
fonte

1 risposta

-2

nHibernate, Entity Framework e altri strumenti ORM (Object Relational Mapping) sono meravigliosi per rappresentare le astrazioni degli oggetti del database (tabelle / viste), le relazioni e le chiavi attraverso veri oggetti di business nel livello dati di un'applicazione. Il motivo attorno agli strumenti ORM è quello di rendere il livello dati robusto e supportare il Rapid Application Development (RAD) attraverso il supporto del tempo di progettazione in Visual Studio per mappare e rappresentare gli oggetti e le relazioni del database nel livello dati. ODP .Net UDT in una certa misura supporta tutte queste filosofie. Tuttavia, se si desidera fornire l'astrazione relazionale completa dell'oggetto nel livello dati, è necessario utilizzare nHibernate o Entity Framework.

    
risposta data 16.02.2015 - 21:03
fonte

Leggi altre domande sui tag