ลักษณะที่สองทำให้ฉันงง เมื่อฉันดูที่ลายเซ็นเท่านั้นฉันสงสัยว่าสนามนั้นเป็นที่รู้จักแล้วว่าผึ้งกำลังไม่ถูกต้องหรือไม่? หรือจะตรวจสอบก่อน (ตามที่เรียกว่า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 })
}
}
อย่างไรก็ตามฉันคิดว่าบ็อบมาร์ตินอาจจะก้าวไปอีกขั้นและทำให้โค้ดมีความชัดเจนมากขึ้นเพื่อความชัดเจนมากขึ้นในทิศทางที่ต่างออกไป การปรับโครงสร้างตามแนวปกติของหนังสือ "Clean Code" อาจมีลักษณะเช่นนี้:
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)
}
มันเป็นที่ถกเถียงกันอยู่ว่ามันจะไปไกลแค่ไหนด้วยหลักการความรับผิดชอบเดียว จริงๆแล้วมันมีข้อดีและข้อเสีย มุมมองส่วนตัวของฉันคือรหัสต้นฉบับคือ "สะอาดพอ" สำหรับรหัสการผลิตส่วนใหญ่ แต่รหัสที่ได้รับการปรับปรุงจะดีกว่า
เมื่อฉันรู้ว่าฉันต้องเพิ่มบางอย่างในตัวแปรแรกดังนั้นมันจะเพิ่มมากขึ้นเรื่อย ๆ ฉันจะแบ่งมันออกเป็นฟังก์ชั่นเล็ก ๆ เหล่านี้ไว้ล่วงหน้าดังนั้นโค้ดจะไม่เริ่มยุ่งเหยิงเลย