Другий варіант виглядає, що я здивований. Коли я дивлюся лише на підпис, мені цікаво, чи поле вже відомо як недійсне? Або він буде попередньо перевірений (як його називають validatingField
), щоб з’ясувати, чи справді він недійсний? Тож ця не просто зайва інформація тут, але додаткова інформація здається дещо оманливою. Цей вид «ясності» не зрозуміліший, його навпаки.
Насправді, коли я побачив вашу першу функцію, мене це теж спантеличило. Я запитав себе, чому чорт виконує вашу функцію просто з поля, але потім не використовує її і шукає іншого в invalidFields
? Шукати поле, схоже, має набагато більше сенсу, коли введено лише ім’я поля, наприклад:
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 })
}
}
Однак, я думаю, Боб Мартін, ймовірно, піде на крок далі і зробить код більш багатослівним - для більшої чіткості - в іншому напрямку. Типовий рефакторинг за принципом книги "Чистий код", мабуть, виглядатиме так:
addInvalidField (fieldname, message) {
const foundField = findInvalidField(fieldName)
addMessageForInvalidField(foundField,message)
}
з трьома додатковими функціями
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)
}
Це спірне питання, якщо воно окупиться зайти так далеко за принципом єдиної відповідальності. Насправді є деякі плюси і мінуси. Моя особиста точка зору полягає в тому, що оригінальний код є "досить чистим" для більшості виробничих кодів, але реконструйований - краще.
Коли я знав, що мені потрібно щось додати до першого варіанту, щоб воно зростало все більше і більше, я би заздалегідь розділив його на ці менші функції, тому код навіть не почне ставати безладом.