Stavo solo lavorando con un metodo di circa 70 linee di codice sviluppato da altri. Usa una struttura di pattern molto carina, roba simile al container IOC, ma mi chiedo ... Il metodo è troppo lungo?
È un metodo così lungo ancora facilmente leggibile?
La domanda potrebbe essere finita, ma ora inizia la premessa da cui è nata la mia domanda.
Prima di rendermi conto della sua lunghezza (eccessiva per me) mi stavo annoiando cercando di capire cosa stava facendo.
È pieno di istruzioni di questo tipo:
if (success == null)
{
//Log response error
logger.LogProviderActionResponse(userId, "actionName", transactionRequestId,
_configuration.ResponseLogErrorTryAgainId, xmlResponse.InnerXml.ToXml(true));
return new CheckActionResult(ActionStatus.Failed);
}
Che cosa sta facendo e perché? Si occupa ovviamente della registrazione, perché la variabile success
è nullo, ma cosa implica? E anche ci sono molti parametri, qual è il loro significato?
Avrei bisogno di leggerlo attentamente, per studiarlo.
Il problema è che questo metodo implementa un'interfaccia e una classe astratta, ha molti fratelli. Copia e incollati fratelli che condividono lo stesso comportamento strutturale. Ma non è immediato distinguere le informazioni strutturali dalle informazioni specifiche del dominio.
Nello sviluppo di una nuova azione o di un nuovo fornitore dovrei solo copiare, incollare e modificare elementi specifici del dominio . Ma è difficile ... dato che sono profondamente mescolati con il comportamento strutturale ...
Refactoring Vorrei fare per aumentare la leggibilità
-
1o passaggio
racchiudi tutto questo logging con una #region che può essere compressa
-
Il secondo passaggio potrebbe essere
utilizzare il metodo Extract per trasnsformare la precedente chiamata di registro a una singola istruzione. Qualcosa come:
Log.LogWithReason (Success.IsEmpty);
Ma l'uso del rendimento è in conflitto con questo scopo e richiede uno sforzo extra.
-
3 ° passaggio
significherebbe separare completamente la responsabilità di Logging (usando AOP? Implementandolo nella classe base? usando eventi?). Se un metodo ha 5/8 chiamate al registro per diversi motivi. È troppo consapevole della registrazione. A mio parere, il principio della responsabilità unica è violato poiché i metodi hanno acquisito la responsabilità secondaria di essere strongmente consapevoli della registrazione.
La domanda rimane quella specificata nel titolo ma spero di leggere un confronto molto maturo qui basato sull'idea di semi che ho scritto!
Grazie per il tuo contributo