Se si seguono i modelli di servizio e di repository standard, il repository dovrebbe contenere un metodo specifico per ogni operazione di database o utilizzare solo i metodi generali, ad es. aggiornare? Prendi ad esempio il seguente metodo di servizio:
DisableUser(User user) {
user.enabled = false;
userRepo.update(user); // General user update method
}
Questo esegue le sue modifiche sul record utente, quindi richiede al repository di aggiornare il database chiamando il metodo di aggiornamento generale dell'utente.
O dovrebbe essere più specifico, come:
DisableUser(User user) {
userRepo.disable(user); // Specific operation, matching the service
}
Ovviamente questo è un esempio molto semplice, ma ritengo che la conclusione influenzi il modo in cui vado avanti con il repository in generale e questa stessa logica si applica a molti scenari.
Ciò che mi confonde ulteriormente è che nel primo caso l'uso del metodo di aggiornamento standard può essere considerato inefficiente, perché può aggiornare ogni colonna del record, ma mi capita di usare Entity Framework in modo che si occupi di controllare cosa i campi sono cambiati e solo l'aggiornamento del campo modificato per me. Ma dovrei fare questa ipotesi dal mio servizio?
Se dovessi scrivere un'implementazione plain sql alternativa dell'ID del repository, devi aggiornare tutti i campi lì, o implementare il rilevamento dei cambiamenti di campo da solo. Quindi quella parte mi spinge verso l'implementazione specifica, ma con ciò sto aggiungendo molti più metodi e forse mi sembra un po 'inutile.
Quindi, in poche parole, se il repository ha solo i metodi standard, aggiorna, inserisci, trovaById, trova Tutto, elimina. O dovrebbe avere un metodo per ogni specifica operazione di database, come le stored procedure.
Ci sono probabilmente molte altre considerazioni che non sto afferrando. Qualsiasi consiglio sarebbe apprezzato.