Capisco l'importanza di un codice ben documentato. Ma capisco anche l'importanza del codice auto-documentante . Più è facile leggere visivamente una determinata funzione, più velocemente possiamo andare avanti durante la manutenzione del software.
Detto ciò, mi piace separare le funzioni big in altre più piccole. Ma lo faccio a un punto in cui una classe può avere più di cinque di loro solo per servire un metodo pubblico. Ora moltiplica cinque metodi privati di cinque di quelli pubblici e ottieni circa venticinque metodi nascosti che probabilmente verranno chiamati solo una volta da quelli pubblici.
Certo, ora è più facile leggere quei metodi pubblici, ma non posso fare a meno di pensare che avere troppe funzioni sia una cattiva pratica.
[Edit]
Le persone mi hanno chiesto perché penso che avere troppe funzioni sia una cattiva pratica.
La risposta semplice: è una sensazione istintiva.
La mia convinzione non è, per un certo punto, sostenuta da alcuna ora di esperienza di ingegneria del software. È solo un'incertezza che mi ha dato un "blocco dello scrittore", ma per un programmatore.
In passato, ho solo programmato progetti personali. È solo di recente che sono passato a progetti basati sul team. Ora, voglio assicurarmi che gli altri possano leggere e capire il mio codice.
Non ero sicuro di cosa possa migliorare la leggibilità. Da un lato, stavo pensando di separare una grande funzione in altre più piccole con nomi intelligibili. Ma c'era un altro lato di me che diceva che è ridondante.
Quindi, sto chiedendo questo per illuminare me stesso al fine di scegliere il percorso corretto.
[Edit]
Di seguito ho incluso due versioni di come potrei risolvere il mio problema. Il primo lo risolve non separando grandi blocchi di codice. Il secondo fa cose separate.
Prima versione:
public static int Main()
{
// Displays the menu.
Console.WriteLine("Pick your option");
Console.Writeline("[1] Input and display a polynomial");
Console.WriteLine("[2] Add two polynomials");
Console.WriteLine("[3] Subtract two polynomials");
Console.WriteLine("[4] Differentiate two polynomials");
Console.WriteLine("[0] Quit");
}
Seconda versione:
public static int Main()
{
DisplayMenu();
}
private static void DisplayMenu()
{
Console.WriteLine("Pick your option");
Console.Writeline("[1] Input and display a polynomial");
Console.WriteLine("[2] Add two polynomials");
Console.WriteLine("[3] Subtract two polynomials");
Console.WriteLine("[4] Differentiate two polynomials");
Console.WriteLine("[0] Quit");
}
Negli esempi precedenti, quest'ultimo chiama una funzione che verrà utilizzata una sola volta nell'intero runtime del programma.
Nota: il codice sopra è generalizzato, ma è della stessa natura del mio problema.
Ora, ecco la mia domanda: quale? Prendo il primo o il secondo?