Segnala gli argomenti in una classe html factory

0

Mi è stato detto che gli argomenti flag (argomenti booleani) sono una cosa negativa perché complica la firma del metodo e significa che il metodo fa più di una cosa.

Un problema che ho con questa regola è che cosa succede se ho una classe html factory che costruisce HTML grezzo da argomenti passati. Quindi diciamo che voglio un'opzione per rendere l'elemento del modulo richiesto. Ciò avrebbe ovviamente più senso come argomento booleano. Ma questo è in contraddizione con ciò che mi è stato detto.

Quindi le mie domande sono: questa è un'eccezione a questa regola, questa regola ha senso, o qual è il modo corretto di fare un'opzione richiesta in una classe html factory?

    
posta mattNit 25.06.2015 - 00:27
fonte

2 risposte

1

Ogni regola nella programmazione è solo una guida (proprio come questa affermazione esatta, scommetto che ci sono alcune regole che non sono una guida :)). Ci sono molti modi per ottenere la stessa cosa, ma alcuni sono migliori di altri.

Nel tuo caso, usare flag è assolutamente soddisfacente, se vedi che sono veramente flag (il tuo sembra essere).

Un altro momento importante da considerare è che quando si ha un flag, è preferibile utilizzarlo direttamente nel metodo, e non cambiare completamente l'ambito di esecuzione per tutto ciò che segue. A.K.A Flag semplice - nel tuo caso è così semplice:

return String.Format("<input type=\"text\" class=\"required-{0}\" />", isRequired);
    
risposta data 25.06.2015 - 01:10
fonte
1

Il problema di usare i parametri booleani per me è che quando incontri una chiamata a tale metodo, non è chiaro che cosa rappresenti quel valore booleano. Dovresti cercarlo, mentre preferirei concentrarmi sul problema che sto cercando di risolvere.

Trovo più leggibile creare un metodo separato, come addRequiredTextBox() e addOptionalTextBox() invece di addTextBox(true|false) . Per impedire la duplicazione del codice, devi chiamare addRequiredTextBox() e addOptionalTextBox() a un metodo privato addTextBox(true|false) .

    
risposta data 25.06.2015 - 14:45
fonte

Leggi altre domande sui tag