La seconda variante sembra essere perplessa. Quando guardo solo la firma, mi chiedo se il campo è già noto come non valido? O verrà prima convalidato (come si chiama validatingField
), per scoprire se è davvero non valido?
Quindi qui non sono solo informazioni ridondanti, le informazioni extra sembrano essere in qualche modo fuorvianti. Questo tipo di "chiarezza" non è più chiaro, è il contrario.
In realtà, quando ho visto la tua prima funzione, mi ha anche lasciato perplesso. Mi sono chiesto perché diavolo fa la tua funzione solo a prendere un campo, ma poi non lo usa e ne cerca un altro in invalidFields
? Cercare un campo sembra avere molto più senso quando c'è solo un fieldname, come questo:
addInvalidField (fieldname, message) {
const foundField = this.invalidFields.find(value => {
return value.name === fieldname
})
const errors = foundField.errors
if (!errors.some(error => error.name === message)) {
errors.push({ name: message, message })
}
}
Tuttavia, penso che Bob Martin probabilmente farebbe un passo in più e renderebbe il codice più dettagliato - per maggiore chiarezza - in una direzione diversa. Un tipico refactoring sulla falsariga del libro "Codice pulito" probabilmente assomiglia a questo:
addInvalidField (fieldname, message) {
const foundField = findInvalidField(fieldName)
addMessageForInvalidField(foundField,message)
}
con tre funzioni aggiuntive
findInvalidField(fieldname){
return this.invalidFields.find(value => { return value.name === fieldname })
}
addMessageForInvalidField(field,message){
const errors = field.errors
if (!doesErrorsContain(message)) {
errors.push({ name: message, message })
}
}
doesErrorsContain(message){
return errors.some(error => error.name === message)
}
È discutibile se vale la pena di andare così lontano con il principio della responsabilità unica. Ha in realtà alcuni pro e contro. Il mio punto di vista personale è che il codice originale è "abbastanza pulito" per la maggior parte del codice di produzione, ma il refactored è migliore.
Quando sapevo di dover aggiungere qualcosa alla prima variante in modo che aumentasse sempre di più, lo suddividerei in precedenza in queste funzioni più piccole, quindi il codice non inizierà nemmeno a diventare un disastro.