I metodi con molti parametri sono spesso a volte inevitabili. Nella mia esperienza personale trovo spesso questo il caso per i punti di ingresso del programma e le complesse procedure matematiche - dove il refactoring non è possibile o oscurerebbe il significato del metodo. Sebbene non ci siano limiti concreti per il numero di parametri che un metodo potrebbe avere, è palesemente indesiderabile scrivere / mantenere / vedere i metodi con un gran numero di parametri.
Un'alternativa è il wrapping dei parametri nelle classi. Questo ha alcuni chiari vantaggi , tra cui:
- Più facile per gli occhi; a nessuno piace la pesca dei parametri.
- Manutenzione più semplice; la modifica dei parametri non richiede modifiche alla dichiarazione del metodo.
- Migliore digitazione; avvolgere i relativi parametri in un unico tipo può aiutare a chiarire il significato della funzione.
Tuttavia, ci sono diversi svantaggi in questo approccio:
- Scrittura peggiore; i parametri di accoppiamento che non si adattano naturalmente possono essere fuorvianti.
- Il sovraccarico diventa impossibile o disordinato.
- Può imporre tipi stranieri indesiderati agli utenti.
- Può portare alla pigrizia.
Ad esempio: ho visto spesso codice Python in cui l'autore passa ripetutamente attorno agli oggetti generati da optparse
(o argparse
) mentre utilizza solo un piccolo sottoinsieme dei parametri in ciascun metodo.
Per brevità, ecco le opzioni:
my_method(Param1 a, Param2 b, Param3 c, ...., ParamInf zzz)
my_method(Params params)
my_method(Param1 a, Param2 b, Param3 c, SomeParams the_rest)
my_method(ParamSetA a, ParamSetB b, ...)
Sebbene si tratti di un argomento alquanto soggettivo, sono interessato a conoscere le strategie per trattare i metodi con un gran numero di parametri. Gli esempi di vita reale, in particolare quelli sottoposti a revisione del codice, sarebbero particolarmente utili.