Sto lavorando su un codice che controlla la presenza di alcuni invarianti nel database. Ad esempio, per verificare che un elemento non venga ripetuto, il codice verifica un errore del database poiché l'invariante è codificato a livello di database.
Fondamentalmente per far rispettare l'unicità per un determinato set di chiavi il codice verifica l'errore:
if (sqlError = "name_age") { // name+age are non unique cannot insert
throw error("no users with same name and age allowed")
}
Per me è stato un po 'illeggibile, soprattutto perché deve essere letto insieme alla configurazione del database, inoltre, non può essere testato senza un mock o colpendo il db stesso. Quello che vorrei fare è:
if (countWithNameAndAge(name, age) == 1) {
throw error("no users with same name and age allowed")
}
Non solo questo è più immediatamente leggibile, ma posso consentire a 2 o 3 persone con lo stesso nome ed età senza evolvere il database o aggiungere colonne.
L'unico inconveniente è che questo potrebbe essere più lento .
È vero che il mio approccio potrebbe essere più lento? È davvero più leggibile?