സ്വന്തം കാൽക്കുലേറ്ററുമായി പൊരുത്തപ്പെടാത്ത ഒരു ഉദാഹരണം
വീട് നവീകരണത്തിനുള്ള ചിലവ് കണക്കാക്കുന്ന (cost calculators) ഒരു വെബ്സൈറ്റ് ഞാൻ നടത്തുന്നുണ്ട്.
ഓരോ പേജിലും നാല് സ്ഥലങ്ങളിൽ ചിലവുകൾ കാണിക്കുന്നുണ്ട്:
- ഒരു ഇന്ററാക്ടീവ് വിഡ്ജറ്റ് (interactive widget).
- ഒരു സ്റ്റാറ്റിക് റഫറൻസ് ടേബിൾ (static reference table).
- ടെക്സ്റ്റിലെ എഴുതിയിട്ടുള്ള ഉദാഹരണങ്ങൾ.
- ഒരു FAQ വിഭാഗം.
ഞാൻ ഒരു വലിയ പിശക് (bug) കണ്ടെത്തി. എഴുതിയിട്ടുള്ള ഒരു ഉദാഹരണത്തിൽ ഒരു പ്രോജക്റ്റിന്റെ ചിലവ് $62,300 എന്ന് കാണിച്ചു. എന്നാൽ വിഡ്ജറ്റിൽ അതേ പ്രോജക്റ്റിന്റെ ചിലവ് $56,779 എന്നാണ് പറഞ്ഞിരുന്നത്.
അവിടെ $5,500-ന്റെ വ്യത്യാസമുണ്ടായിരുന്നു.
ആ സംഖ്യകൾ യാദൃശ്ചികമായി വന്നതല്ല. അവ വ്യത്യസ്തമായ ഒളിഞ്ഞിരിക്കുന്ന അനുമാനങ്ങളിൽ (hidden assumptions) നിന്നാണ് വന്നത്. എഴുതിയിട്ടുള്ള ടെക്സ്റ്റിൽ ഒരു പുതിയ HVAC യൂണിറ്റ് ഉപയോഗിക്കുമെന്ന് കരുതിയിരുന്നു. എന്നാൽ വിഡ്ജറ്റിൽ നിലവിലുള്ള സിസ്റ്റം തന്നെ ഉപയോഗിക്കുമെന്ന് കരുതിയിരുന്നു. രണ്ടും ശരിയായിരുന്നു, പക്ഷേ അവ തമ്മിൽ പരസ്പരം ബന്ധപ്പെട്ടിരുന്നില്ല.
ഇതൊരു സാധാരണ പരാജയമാണ്. ഒരേ കാര്യം തന്നെ രണ്ട് സ്ഥലങ്ങളിൽ സൂക്ഷിക്കുമ്പോൾ അവ തമ്മിൽ വ്യത്യാസങ്ങൾ വരാൻ സാധ്യതയുണ്ട്. നിങ്ങൾ വെറുതെ ഉള്ളടക്കം (content) പകർത്തി വെക്കുകയല്ല ചെയ്യുന്നത്, മറിച്ച് ഡാറ്റയാണ് (data) ഡ്യൂപ്ലിക്കേറ്റ് ചെയ്യുന്നത്.
'source-first' എന്ന് ഞാൻ വിളിക്കുന്ന ഒരു നിയമത്തിലൂടെ ഞാൻ ഇത് പരിഹരിച്ചു. ഇതിന് രണ്ട് ഭാഗങ്ങളുണ്ട്.
ഒന്നാം ഭാഗം: ഒരു ചിലവ് ഒരു സ്ഥലത്ത് മാത്രമേ നിലനിൽക്കാവൂ.
ടെക്സ്റ്റിലും ടേബിളുകളിലും സംഖ്യകൾ ടൈപ്പ് ചെയ്യുന്നത് ഞാൻ നിർത്തി. ഇപ്പോൾ, കാൽക്കുലേറ്റർ ഫംഗ്ഷൻ (calculator function) മാത്രമാണ് ഏക സ്രോതസ്സ്. ബിൽഡ് പ്രോസസ്സിനിടെ (build process) ടേബിളുകളും എഴുതിയിട്ടുള്ള ഉദാഹരണങ്ങളും ആ ഫംഗ്ഷനിൽ നിന്ന് നേരിട്ട് സംഖ്യകൾ എടുക്കുന്നു. ഫംഗ്ഷനിൽ മാറ്റം വന്നാൽ, പേജിലെ എല്ലാ സംഖ്യകളും തനിയെ മാറുന്നു. സംഖ്യകൾ ഒരേ മൂല്യമുള്ളതുകൊണ്ട് അവ തമ്മിൽ വ്യത്യാസം വരാൻ കഴിയില്ല.
രണ്ടാം ഭാഗം: ഓരോ സംഖ്യയും അതിന്റെ ഉറവിടം (origin) കാണിക്കണം.
ചിലവ് സംബന്ധിച്ച ഡാറ്റ എന്നത് ശാശ്വതമായ ഒന്നല്ല. അതിന് കാലാവധിയുണ്ട്. ഓരോ കണക്കുകൂട്ടലിനും ഞാൻ ഒരു ചെറിയ ഡാറ്റാ ഒബ്ജക്റ്റ് (data object) ചേർത്തു. അത് കാണിക്കുന്നു:
- ഉപയോഗിച്ച സാഹചര്യം (scenario).
- ഡാറ്റയുടെ ഉറവിടം.
- അത് പരിശോധിച്ച തീയതി.
- ഡാറ്റ എപ്പോൾ പുനപരിശോധിക്കണം.
ഇത് ഡാറ്റയുടെ കൃത്യത ഉറപ്പാക്കുന്നു. സ്രോതസ്സിലെ ഡാറ്റ തെറ്റാണെങ്കിൽ സൈറ്റ് മുഴുവനും തെറ്റാകും. എങ്കിലും, സൈറ്റിലെ വിവരങ്ങൾ പരസ്പരവിരുദ്ധമാകില്ല (consistent). ഒരു വൈരുദ്ധ്യം കണ്ടാൽ ഉപയോക്താവ് അത് ഉടൻ തന്നെ ശ്രദ്ധിക്കും. അത് വിശ്വാസം തകർക്കും.
പാഠം ലളിതമാണ്:
- ഒരു പേജിലെ രണ്ട് സ്ഥലങ്ങളിൽ ഒരേ സംഖ്യ കാണിക്കുന്നുണ്ടെങ്കിൽ, ഒന്ന് മറ്റൊന്നിൽ നിന്ന് ഇംപോർട്ട് ചെയ്യണം. വീണ്ടും ടൈപ്പ് ചെയ്യരുത്.
- ഡാറ്റ സിങ്ക് (sync) ചെയ്യാൻ നിങ്ങളുടെ ബിൽഡ് പ്രോസസ്സ് ഉപയോഗിക്കുക. ഇത് ഒരു അച്ചടക്ക പ്രശ്നത്തെ സാങ്കേതികമായി അസാധ്യമായ ഒന്നാക്കി മാറ്റുന്നു.
- ഒരു ഫംഗ്ഷൻ നേരത്തെ തന്നെ കണക്കാക്കുന്ന സംഖ്യകൾ കൈകൊണ്ട് എഴുതുന്നത് നിർത്തുക.
സംഖ്യകൾ എഴുതുന്നതിന് പകരം അവ ഡിലീറ്റ് ചെയ്യാൻ ഞാൻ ഒരു ദിവസം ചെലവഴിച്ചു. എന്റെ കോഡ്ബേസ് (codebase) ഇപ്പോൾ ചെറുതാണ്, കൂടാതെ അത് ഉപയോക്താക്കളോട് ഇനി കള്ളം പറയുന്നില്ല.
Source: https://dev.to/mark_b5f4ffdd8e7cd58/the-worked-example-that-disagreed-with-its-own-calculator-4cp9