Varian kedua terlihat membuat saya bingung. Ketika saya hanya melihat tanda tangan, saya bertanya-tanya apakah bidang itu sudah dikenal sebagai beeing invalid? Atau akankah itu divalidasi terlebih dahulu (seperti namanya validatingField
), untuk mengetahui apakah itu benar-benar tidak valid? Jadi ini bukan hanya informasi yang berlebihan di sini, informasi tambahan itu tampaknya agak menyesatkan. "Kejelasan" semacam ini tidak lebih jelas, justru sebaliknya.
Sebenarnya, ketika saya melihat fungsi pertama Anda, itu membuat saya bingung juga. Saya bertanya pada diri sendiri mengapa sih fungsi Anda hanya mengambil bidang, tetapi kemudian tidak menggunakannya dan mencari yang lain invalidFields
? Mencari bidang tampaknya jauh lebih masuk akal ketika hanya ada nama bidang yang diberikan, seperti ini:
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 })
}
}
Namun, saya kira Bob Martin mungkin akan melangkah lebih jauh dan membuat kode lebih bertele-tele - untuk lebih jelasnya - ke arah yang berbeda. Refactoring tipikal di sepanjang baris buku "Kode Bersih" mungkin akan terlihat seperti ini:
addInvalidField (fieldname, message) {
const foundField = findInvalidField(fieldName)
addMessageForInvalidField(foundField,message)
}
dengan tiga fungsi tambahan
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)
}
Dapat diperdebatkan jika membayar sejauh itu dengan prinsip tanggung jawab tunggal. Sebenarnya ada beberapa pro dan kontra. Pandangan pribadi saya adalah bahwa kode asli "cukup bersih" untuk sebagian besar kode produksi, tetapi kode yang dire-refour lebih baik.
Ketika saya tahu saya harus menambahkan sesuatu ke varian pertama sehingga akan tumbuh lebih dan lebih, saya akan membaginya ke fungsi-fungsi yang lebih kecil sebelumnya, sehingga kode itu bahkan tidak akan mulai menjadi berantakan.