Sto cercando di pensare al modo più pulito per implementare un paio di metodi che aprono un file.
Considera le seguenti firme del metodo:
public static DomainObject Load(Uri urlToFile)
{
/* downloads file and calls Load(savedToFilename) */
}
public static DomainObject Load(string filename)
{
/* creates filestream and calls Load(stream) */
}
public static DomainObject Load(Stream stream)
{
/* does actual loading */
}
Sto cercando di implementare alcuni concetti da Pulisci codice , in particolare:
When constructors are overloaded, use static factory methods with names that describe the arguments. For example,
Complex fulcrumPoint = Complex.FromRealNumber(23.0);
is generally better than
Complex fulcrumPoint = new Complex(23.0);
Ora, so che non ho sovraccaricato i costruttori, di per sé (ne ho rifattorizzato), ma penso che il principio sia lo stesso. Quindi questo implica che i miei metodi di caricamento vengano rifatti a qualcosa del tipo:
public static DomainObject FromURI(Uri urlToFile);
public static DomainObject FromFile(string filename);
public static DomainObject FromStream(Stream stream);
Ma, tbh, penso che sia più intuitivo usare ciò che ho già ottenuto. Dal punto di vista del consumatore, sembra che Open prenderà la fonte che mi capita di avere, mentre l'altro metodo mi impone di pensare prima a quale sia la mia fonte e poi mi chiedo se esiste un metodo specifico per questo.
Quindi ti chiedo, dal tuo punto di vista più esperto, che è meglio e perché?