Recentemente ho preso uno strano comportamento nella mia codifica: ad un certo punto nell'ultimo anno ho iniziato a creare metodi protected static
per implementare la logica dei miei metodi public
, assicurandoti che la versione protected static
contenga tutti della logica, ma non è influenzato dallo stato.
per es.
class Demo
{
string someAttribute;
public Demo(string someAttribute)
{
this.someAttribute = someAttribute;
}
// public method only calls the static method, passing all
// parameters sent to the public function as well as any
// of the object's attributes required by the function.
public string AppendSomeAttribute(string textToAppendTo) =>
AppendSomeAttribute(textToAppendTo, someAttribute);
// static method is not publicly exposed. It contains all
// of the function's logic, but is not affected by state
protected static string AppendSomeAttribute(string textToAppendTo, string someAttribute) =>
string.Concat(textToAppendTo, someAttribute);
/*
// this is what a normal person would do:
public string AppendSomeAttribute(string textToAppendTo) =>
string.Concat(textToAppendTo, someAttribute);
*/
}
Non ricordo di aver letto nulla che avrebbe innescato questo cambiamento. La mia ipotesi migliore è che leggo qualcosa che lo consiglia e che è bloccato nel mio subconscio; ma potrebbe essere solo una cattiva abitudine che avevo inconsciamente raccolto.
Cercando di capire perché questo può essere consigliato ho trovato il seguente:
- Tutta la logica viene gestita in un unico luogo; quindi, dove ci sono più metodi pubblici che adottano parametri diversi, questo aiuta a mantenere tutta la logica in una routine (ha sicuramente senso dove la versione di quella routine che fornisce tutti i parametri non dovrebbe essere esposta pubblicamente, altrimenti non ne vedo alcun beneficio).
- Rimuovendo lo stato dell'oggetto dall'equazione, la logica di questi metodi è più facilmente testata / provata; sia per unit test, sia quando copia il codice di incollamento su LinqPad (o simile) per provarlo in una sandbox.
Tuttavia, queste non sono grandi giustificazioni per fare ciò come uno stile di codifica de facto (cioè dove non esiste uno scenario specifico per giustificare questo, come i molti sovraccarichi pubblici dello stesso metodo con nessuno che prende tutti i parametri esempio, come descritto sopra).
Domanda:
C'è un chiaro vantaggio nella scrittura del codice in questo modo?