Ho preso in mano del codice al lavoro che ha un file di repository del database che mantiene costanti i nomi delle stored procedure. Il file ha il seguente aspetto:
class DatabaseRepository
{
private const string SP_GET_EMPLOYEES = "GetEmployees";
private const string SP_GET_DEPARTMENTS = "GetDepartments";
private const string SP_GET_MANAGERS = "GetManagers";
// Many more stored procedure constants ...
public EmployeeList GetEmployees()
{
return RunCommand(DatabaseRepository.SP_GET_EMPLOYEES);
}
//more methods below that call the stored procedures
}
Trovo fastidioso trattare queste costanti quando sto lavorando sul confine tra il codice e le stored procedure.
-
Se voglio sapere quale stored procedure sta usando un metodo, devo scorrere verso l'alto o go-to-definition per la costante. Di solito devo tornare indietro o cercare il metodo in questione perché potrei lavorare su quel metodo.
-
Andando nella direzione opposta, se voglio sapere quale metodo chiama una determinata stored procedure (di solito c'è solo una), devo cercare il codice per il nome della stored procedure, copiare il nome della costante di stringa, e poi cerca il codice per quella costante di stringa.
In entrambi i casi # 1 e # 2, potrei impedire la ricerca e lo scorrimento e andare alla definizione se i nomi delle stored procedure non erano stringhe costanti ma erano effettivamente codificati come stringhe magiche nei metodi stessi.
Questo approccio mi piace di più:
class DatabaseRepository
{
public EmployeeList GetEmployees()
{
return RunCommand("GetEmployees"); //magic string
}
//more methods below that call the stored procedures
}
Ci sono dei vantaggi che non vedo nel mantenere i nomi delle stored procedure nelle costanti? So che è utile se più di un metodo utilizza quella stored procedure. In questo modo, se il nome della stored procedure cambia, devo solo apportare una modifica anziché più modifiche. Nella mia esperienza, tuttavia, a causa della loro natura, i nomi delle stored procedure cambiano raramente.
È meglio avere i nomi delle stored procedure codificati in modo rigido in stringhe magiche anziché essere tenuti in stringhe costanti? Conosco tutti i motivi per cui dovremmo evitare le stringhe magiche, ma penso che questa sia un'eccezione.