Quali sono alcuni dei vantaggi di un "Micro-ORM"?

21

Ho esaminato i cosiddetti "Micro ORM" come Dapper e (in misura minore dato che si basa su .NET 4.0). Massive in quanto potrebbero essere più facili da implementare sul lavoro rispetto a un ORM completo dal il nostro sistema attuale è altamente dipendente dalle procedure memorizzate e richiederebbe un significativo refactoring per lavorare con un ORM come NHibernate o EF. Qual è il vantaggio di utilizzare uno di questi su un ORM completo? Sembra solo uno strato sottile attorno a una connessione al database che ti costringe ancora a scrivere SQL raw - forse ho sbagliato ma mi è sempre stato detto che la ragione degli ORM in primo luogo è che non hai avere scrivere SQL, potrebbe essere generato automaticamente; in particolare per i join multi-table e per mappare le relazioni tra tabelle che sono difficili da fare in puro SQL ma banali con un ORM.

Ad esempio, guardando un esempio di Dapper:

var connection = new SqlConnection(); // setup here...
var person = connection.Query<Person>("select * from people where PersonId = @personId", new { PersonId = 42 });

È tutto diverso dall'utilizzo di un livello dati ADO.NET gestito a mano, tranne per il fatto che non è necessario scrivere il comando, impostare i parametri e supponiamo mappare l'entità utilizzando un Builder. Sembra che potresti persino utilizzare una chiamata di procedura memorizzata come stringa SQL.

Ci sono altri benefici tangibili che mi mancano qui dove un Micro ORM ha senso usare? Non sto davvero vedendo come sta salvando qualcosa sul "vecchio" modo di usare ADO.NET tranne forse alcune righe di codice - devi ancora scrivere per capire quale SQL devi eseguire (che può diventare peloso) e devi ancora mappare le relazioni tra i tavoli (la parte che IMHO ORMs aiuta di più con).

    
posta Wayne Molina 18.11.2011 - 14:30
fonte

3 risposte

12

I vantaggi:

  • Prestazioni simili a un SqlCommand non elaborato con DataReader e analisi.
  • Non è necessario eseguire il rollover del proprio livello di conversione per DataReader.

Questo è praticamente tutto, ad essere onesti. Hai un involucro molto leggero per le tue connessioni sql che realizzeranno la conversione dell'oggetto per te. È possibile, ovviamente, perfezionare le query senza dover gestire alcun SQL autogenerato.

Contro:

  • Neanche leggermente tipizzato. Se esegui un errore di battitura in SQL, il tuo server CI non lo catturerà, dovrai sperare che venga catturato durante l'interfaccia utente automatizzata oi test funzionali.
  • Un dolore da mantenere. Hai un sacco di istruzioni SQL inline che fanno varie query che non hanno legami forti con l'architettura DB. Questo può facilmente portare a query che vengono "lasciate indietro" quando la struttura del DB sottostante cambia, che, di nuovo, non vedrai al momento della compilazione.

Hanno il loro posto, e sono uno strumento molto efficace che può portare via alcuni degli "asini" dagli sviluppatori quando interagiscono con il DB, ma in realtà non possono semplicemente prendere il posto di un ORM completo in qualsiasi sistema su larga scala per query che non sono critiche per le prestazioni, semplicemente a causa dei maggiori costi di manutenzione.

Se si ha difficoltà con le prestazioni sulle query DB, suggerirei che sarebbe meglio utilizzare questi framework di mappatura solo con Stored Procedures, per ottenere un'indicazione in fase di compilazione per verificare se il proprio SQL è valido (più l'addizionale prestazioni).

    
risposta data 18.11.2011 - 15:32
fonte
2

Nel sito Web di micro ORM PetaPoco spiega alcuni vantaggi con altri ORM. per spiegare di più

PetaPoco is a tiny, fast, single-file micro-ORM for .NET and Mono.

  • Like Massive it's a single file that you easily add to any project
  • Unlike Massive it works with strongly typed POCO's
  • Like Massive, it now also supports dynamic Expandos too - read more
  • Like ActiveRecord, it supports a close relationship between object and database table
  • Like SubSonic, it supports generation of poco classes with T4 templates
  • Like Dapper, it's fast because it uses dynamic method generation (MSIL) to assign column values to properties
    
risposta data 18.11.2011 - 15:13
fonte
1

How is that any different than using a handrolled ADO.NET data layer, except that you don't have to write the command, set the parameters and I suppose map the entity back using a Builder. It looks like you could even use a stored procedure call as the SQL string.

Credo che questo sia il principale vantaggio di un Micro-ORM, per ottenere gli altri vantaggi di un ORM che sarebbe necessario utilizzare a pieno regime. Questo e il codice sono relativamente più piccoli, quindi se hai bisogno di personalizzarlo, sarebbe più facile.

    
risposta data 18.11.2011 - 15:27
fonte

Leggi altre domande sui tag