I metodi di accesso ai dati ORM devono essere integrati o utilizzati direttamente?

2

Usiamo un ORM costruito internamente. Ogni tabella è rappresentata da una classe Model, che eredita da una classe del modello base che ha una manciata di metodi come GetAll, GetWhere (per ottenere righe con valori di colonna specificati), GetFirstWhere, ecc. Per accedere ai dati dalla tabella. C'è una questione se questi metodi devono essere protetti (in modo che qualsiasi accesso al database debba chiamare un metodo di wrapper pubblico per la query esatta) o metodi pubblici (in modo che il codice possa chiamare GetAll, GetWhere, ecc.)

Vedo alcuni pro e contro per entrambe le parti. Quale stile sarebbe considerato migliore pratica e più gestibile?

Protezione

Pro: è facile vedere tutte le query su una tabella, basta aprire il file Model. Questo potrebbe essere utile per verificare se la tabella è indicizzata correttamente, ecc.

Contro: lavoro aggiuntivo e spese generali cognitive per ogni accesso ai dati. Ora devo controllare se esiste già un metodo di query e crearlo se non lo è; Devo cercare i nomi dei metodi, che tendono ad essere specifici come "GetThisThingByIDAndName"; inoltre, se voglio cambiare una query, devo assicurarmi che nient'altro stia usando quel metodo o crei un nuovo metodo. Molte di queste query verranno utilizzate solo una volta e in pratica finiscono per essere tonnellate di questi metodi i cui nomi non sempre chiariscono esattamente che cosa fa il metodo.

Pubblica

Pro: l'interfaccia di accesso ai dati standardizzata consente agli sviluppatori di memorizzare facilmente i pochi metodi di accesso ai dati e di usarli in modo coerente tra le tabelle, il che rende lo sviluppo più veloce e più semplice. Inoltre, possono apportare modifiche direttamente dove avviene la query senza rompere qualcosa altrove nella base di codice.

Contro: richiede una ricerca per trovare tutte le query su una tabella. Se non stai attento, potrebbero esserci delle duplicazioni.

    
posta Ben Morris 12.08.2014 - 03:49
fonte

1 risposta

3

È necessario utilizzare il modello di repository (progettazione basata sul dominio) che stacca la logica aziendale dall'infrastruttura. I dettagli (implementazione) dovrebbero dipendere dalle astrazioni, non in altro modo.

Il pattern del repository consente di modificare lo storage di persistenza sottostante (database) ogni volta che lo si desidera, anche in runtime e rende il codice molto più facile da testare.

    
risposta data 12.08.2014 - 13:01
fonte

Leggi altre domande sui tag