दूसरा वैरिएंट लुक मुझे हैरान कर देता है। जब मैं केवल हस्ताक्षर देखता हूं, तो मुझे आश्चर्य होता है कि क्या क्षेत्र को पहले से ही अवैध रूप से मधुमक्खी के रूप में जाना जाता है? या क्या यह पहले वैध होगा (जैसा कि इसे कहा जाता है 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)
}
यह एक ही जिम्मेदारी सिद्धांत के साथ उस दूर जाने के लिए भुगतान करता है, तो यह बहस का मुद्दा है। यह वास्तव में कुछ पेशेवरों और विपक्ष है। मेरा व्यक्तिगत दृष्टिकोण यह है कि अधिकांश उत्पादन कोड के लिए मूल कोड "पर्याप्त रूप से साफ" है, लेकिन रिफलेक्ट किए गए एक बेहतर है।
जब मुझे पता था कि मुझे पहले संस्करण में कुछ जोड़ना है तो यह अधिक से अधिक बढ़ेगा, मैं इसे पहले से ही इन छोटे कार्यों के लिए विभाजित कर दूंगा, इसलिए कोड भी गड़बड़ नहीं होने लगेगा।