Biến thể thứ hai trông khiến tôi hoang mang. Khi tôi chỉ nhìn vào chữ ký, tôi tự hỏi liệu lĩnh vực này đã được gọi là ong không hợp lệ? Hoặc nó sẽ được xác nhận đầu tiên (như nó được gọi validatingField
), để tìm hiểu xem nó có thực sự không hợp lệ không? Vì vậy, đây không chỉ là thông tin dư thừa ở đây, thông tin bổ sung dường như có phần sai lệch. Loại "rõ ràng" này không rõ ràng hơn, nó ngược lại.
Thật ra, khi tôi thấy chức năng đầu tiên của bạn, nó cũng khiến tôi hoang mang. Tôi đã tự hỏi tại sao chức năng của bạn chỉ lấy một trường, nhưng sau đó không sử dụng nó và tìm kiếm một cái khác trong invalidFields
? Tìm kiếm một lĩnh vực dường như có ý nghĩa hơn nhiều khi chỉ có một tên trường được đưa ra, như thế này:
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 })
}
}
Tuy nhiên, tôi đoán Bob Martin có thể sẽ tiến thêm một bước và làm cho mã dài dòng hơn - để rõ ràng hơn - theo một hướng khác. Một cấu trúc lại điển hình dọc theo dòng của cuốn sách "Mã sạch" có thể sẽ trông như thế này:
addInvalidField (fieldname, message) {
const foundField = findInvalidField(fieldName)
addMessageForInvalidField(foundField,message)
}
với ba chức năng bổ sung
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)
}
Thật đáng tranh luận nếu nó được đền đáp để đi xa đến mức đó với nguyên tắc trách nhiệm duy nhất. Nó thực sự có một số ưu và nhược điểm. Quan điểm cá nhân của tôi là mã gốc "đủ sạch" cho hầu hết mã sản xuất, nhưng mã được tái cấu trúc thì tốt hơn.
Khi tôi biết rằng tôi phải thêm một cái gì đó vào biến thể đầu tiên để nó ngày càng phát triển hơn, tôi sẽ chia nó thành các hàm nhỏ hơn trước, vì vậy mã sẽ không bắt đầu trở thành một mớ hỗn độn.