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.