Nei miei progetti uso un bel po 'di classi statiche. Di solito sono classi che sembrano adattarsi a un tipo di cosa a istanza singola. Molte volte uso classi statiche e recentemente ho iniziato a usare alcuni singleton.
Quanti di questi servono per diventare un odore di codice? Ad esempio, nel mio recente progetto che ha un sacco di classi statiche c'è una libreria di autenticazione per ASP.Net.
Uso una classe statica per una classe helper che corregge i codici di errore di ASP.Net in modo che possa essere usata come
CustomErrorsFixer.Fix(Context);
Oppure la mia classe di autenticazione stessa è una classe statica
//in global.asax's begin_application
Authentication.SomeState="blah";
Authentication.SomeOption=true;
//etc
//in global.asax's begin_request
Authentication.Authenticate();
Quando le classi statiche o singleton sono cattive da usare? Sto sbagliando, o sono solo in un progetto che per definizione ha pochissimo stato per-instance associato ad esso?
L'unico stato per istanza che ho è memorizzato in HttpContext.Current.Items
in questo modo:
/// <summary>
/// The current user logged in for the HTTP request. If there is not a user logged in, this will be null.
/// </summary>
public static UserData CurrentUser{
get{
return HttpContext.Current.Items["fscauth_currentuser"] as UserData; //use HttpContext.Current as a little place to persist static data for this request
}
private set{
HttpContext.Current.Items["fscauth_currentuser"]=value;
}
}