ലെഗസി കോഡ് റീഫാക്ടർ ചെയ്യുന്നതിനുള്ള ഒരു പ്രായോഗിക ഗൈഡ്. ഇതിൽ കോഡ് തിരിച്ചറിയൽ, മുൻഗണന നൽകൽ, ടെക്നിക്കുകൾ, ആധുനികവൽക്കരണത്തിനും പരിപാലനത്തിനുമുള്ള മികച്ച രീതികൾ എന്നിവ ഉൾപ്പെടുന്നു.
ലെഗസി കോഡിനെ മെരുക്കുന്നു: റീഫാക്ടറിംഗ് തന്ത്രങ്ങൾ
ലെഗസി കോഡ്. ഈ വാക്ക് കേൾക്കുമ്പോൾ തന്നെ, ചിതറിക്കിടക്കുന്നതും ഡോക്യുമെൻ്റേഷൻ ഇല്ലാത്തതുമായ സിസ്റ്റങ്ങൾ, ദുർബലമായ ആശ്രിതത്വങ്ങൾ, വല്ലാത്തൊരു ഭയം എന്നിവയുടെ ചിത്രങ്ങൾ മനസ്സിൽ വരാം. ലോകമെമ്പാടുമുള്ള നിരവധി ഡെവലപ്പർമാർ ഈ സിസ്റ്റങ്ങൾ പരിപാലിക്കുകയും വികസിപ്പിക്കുകയും ചെയ്യുന്ന വെല്ലുവിളി നേരിടുന്നു, അവ പലപ്പോഴും ബിസിനസ്സ് പ്രവർത്തനങ്ങൾക്ക് അത്യന്താപേക്ഷിതമാണ്. ഈ സമഗ്രമായ ഗൈഡ് ലെഗസി കോഡ് റീഫാക്ടർ ചെയ്യുന്നതിനുള്ള പ്രായോഗിക തന്ത്രങ്ങൾ നൽകുന്നു, നിരാശയുടെ ഉറവിടത്തെ ആധുനികവൽക്കരണത്തിനും മെച്ചപ്പെടുത്തലിനുമുള്ള അവസരമാക്കി മാറ്റുന്നു.
എന്താണ് ലെഗസി കോഡ്?
റീഫാക്ടറിംഗ് ടെക്നിക്കുകളിലേക്ക് കടക്കുന്നതിന് മുമ്പ്, "ലെഗസി കോഡ്" എന്നതുകൊണ്ട് എന്താണ് അർത്ഥമാക്കുന്നത് എന്ന് നിർവചിക്കേണ്ടത് അത്യാവശ്യമാണ്. ഈ പദം പഴയ കോഡിനെ സൂചിപ്പിക്കാമെങ്കിലും, കൂടുതൽ സൂക്ഷ്മമായ ഒരു നിർവചനം അതിൻ്റെ പരിപാലനക്ഷമതയിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കുന്നു. മൈക്കിൾ ഫെദേഴ്സ്, തൻ്റെ പ്രശസ്തമായ "വർക്കിംഗ് എഫക്റ്റീവ്ലി വിത്ത് ലെഗസി കോഡ്" എന്ന പുസ്തകത്തിൽ, ടെസ്റ്റുകളില്ലാത്ത കോഡിനെയാണ് ലെഗസി കോഡ് എന്ന് നിർവചിക്കുന്നത്. ഈ ടെസ്റ്റുകളുടെ അഭാവം, റിഗ്രഷനുകൾ വരുത്താതെ കോഡ് സുരക്ഷിതമായി പരിഷ്കരിക്കുന്നത് ബുദ്ധിമുട്ടാക്കുന്നു. എന്നിരുന്നാലും, ലെഗസി കോഡിന് മറ്റ് സ്വഭാവസവിശേഷതകളും കാണിക്കാം:
- ഡോക്യുമെൻ്റേഷൻ്റെ അഭാവം: യഥാർത്ഥ ഡെവലപ്പർമാർ പോയിട്ടുണ്ടാവാം, സിസ്റ്റത്തിൻ്റെ ആർക്കിടെക്ചർ, ഡിസൈൻ തീരുമാനങ്ങൾ, അല്ലെങ്കിൽ അടിസ്ഥാനപരമായ പ്രവർത്തനങ്ങൾ പോലും വിശദീകരിക്കുന്ന ഡോക്യുമെൻ്റേഷൻ ഇല്ലാതെയാവാം.
- സങ്കീർണ്ണമായ ആശ്രിതത്വങ്ങൾ: കോഡ് പരസ്പരം ശക്തമായി ബന്ധിപ്പിച്ചിരിക്കാം, ഇത് സിസ്റ്റത്തിൻ്റെ മറ്റ് ഭാഗങ്ങളെ ബാധിക്കാതെ വ്യക്തിഗത ഘടകങ്ങളെ വേർതിരിച്ച് പരിഷ്കരിക്കുന്നത് ബുദ്ധിമുട്ടാക്കുന്നു.
- കാലഹരണപ്പെട്ട സാങ്കേതികവിദ്യകൾ: കോഡ് പഴയ പ്രോഗ്രാമിംഗ് ഭാഷകൾ, ഫ്രെയിംവർക്കുകൾ, അല്ലെങ്കിൽ ഇപ്പോൾ സജീവമായി പിന്തുണയ്ക്കാത്ത ലൈബ്രറികൾ എന്നിവ ഉപയോഗിച്ച് എഴുതിയതാകാം, ഇത് സുരക്ഷാ അപകടസാധ്യതകൾ സൃഷ്ടിക്കുകയും ആധുനിക ടൂളുകളിലേക്കുള്ള പ്രവേശനം പരിമിതപ്പെടുത്തുകയും ചെയ്യുന്നു.
- നിലവാരം കുറഞ്ഞ കോഡ്: കോഡിൽ ഡ്യൂപ്ലിക്കേറ്റ് കോഡ്, നീണ്ട മെത്തേഡുകൾ, മറ്റ് കോഡ് സ്മെല്ലുകൾ എന്നിവ അടങ്ങിയിരിക്കാം, അത് മനസ്സിലാക്കാനും പരിപാലിക്കാനും ബുദ്ധിമുട്ടാക്കുന്നു.
- ദുർബലമായ ഡിസൈൻ: ചെറിയ മാറ്റങ്ങൾ പോലും അപ്രതീക്ഷിതവും വ്യാപകവുമായ പ്രത്യാഘാതങ്ങൾ ഉണ്ടാക്കാം.
ലെഗസി കോഡ് അതിൽത്തന്നെ മോശമല്ല എന്നത് ശ്രദ്ധിക്കേണ്ടതാണ്. ഇത് പലപ്പോഴും ഒരു സുപ്രധാന നിക്ഷേപത്തെ പ്രതിനിധീകരിക്കുന്നു ഒപ്പം വിലയേറിയ ഡൊമെയ്ൻ പരിജ്ഞാനം ഉൾക്കൊള്ളുന്നു. റീഫാക്ടറിംഗിൻ്റെ ലക്ഷ്യം ഈ മൂല്യം സംരക്ഷിച്ചുകൊണ്ട് കോഡിൻ്റെ പരിപാലനക്ഷമത, വിശ്വാസ്യത, പ്രകടനം എന്നിവ മെച്ചപ്പെടുത്തുക എന്നതാണ്.
എന്തിനാണ് ലെഗസി കോഡ് റീഫാക്ടർ ചെയ്യുന്നത്?
ലെഗസി കോഡ് റീഫാക്ടർ ചെയ്യുന്നത് ശ്രമകരമായ ഒരു ജോലിയാണ്, എന്നാൽ അതിൻ്റെ പ്രയോജനങ്ങൾ വെല്ലുവിളികളെക്കാൾ കൂടുതലാണ്. റീഫാക്ടറിംഗിൽ നിക്ഷേപിക്കുന്നതിനുള്ള ചില പ്രധാന കാരണങ്ങൾ ഇതാ:
- മെച്ചപ്പെട്ട പരിപാലനക്ഷമത: റീഫാക്ടറിംഗ് കോഡ് മനസ്സിലാക്കാനും, പരിഷ്കരിക്കാനും, ഡീബഗ് ചെയ്യാനും എളുപ്പമാക്കുന്നു, ഇത് തുടർപരിപാലനത്തിന് ആവശ്യമായ ചെലവും പ്രയത്നവും കുറയ്ക്കുന്നു. ആഗോള ടീമുകൾക്ക് ഇത് വളരെ പ്രധാനമാണ്, കാരണം ഇത് പ്രത്യേക വ്യക്തികളെ ആശ്രയിക്കുന്നത് കുറയ്ക്കുകയും വിജ്ഞാനം പങ്കുവെക്കൽ പ്രോത്സാഹിപ്പിക്കുകയും ചെയ്യുന്നു.
- ടെക്നിക്കൽ ഡെറ്റ് കുറയ്ക്കുന്നു: കൂടുതൽ സമയമെടുക്കുന്ന മികച്ച സമീപനം ഉപയോഗിക്കുന്നതിന് പകരം എളുപ്പമുള്ള ഒരു പരിഹാരം തിരഞ്ഞെടുക്കുന്നത് കാരണം പിന്നീട് വരുന്ന പുനർനിർമ്മാണത്തിന്റെ ചെലവിനെയാണ് ടെക്നിക്കൽ ഡെറ്റ് എന്ന് പറയുന്നത്. റീഫാക്ടറിംഗ് ഈ ഡെറ്റ് വീട്ടാൻ സഹായിക്കുന്നു, കോഡ്ബേസിൻ്റെ മൊത്തത്തിലുള്ള ആരോഗ്യം മെച്ചപ്പെടുത്തുന്നു.
- വർധിച്ച വിശ്വാസ്യത: കോഡ് സ്മെല്ലുകൾ പരിഹരിക്കുകയും കോഡിൻ്റെ ഘടന മെച്ചപ്പെടുത്തുകയും ചെയ്യുന്നതിലൂടെ, റീഫാക്ടറിംഗിന് ബഗുകളുടെ സാധ്യത കുറയ്ക്കാനും സിസ്റ്റത്തിൻ്റെ മൊത്തത്തിലുള്ള വിശ്വാസ്യത മെച്ചപ്പെടുത്താനും കഴിയും.
- വേഗത വർദ്ധിപ്പിക്കുന്നു: റീഫാക്ടറിംഗിന് പെർഫോമൻസ് ബോട്ടിൽനെക്കുകൾ കണ്ടെത്താനും പരിഹരിക്കാനും കഴിയും, ഇത് വേഗതയേറിയ എക്സിക്യൂഷൻ സമയത്തിനും മെച്ചപ്പെട്ട പ്രതികരണത്തിനും കാരണമാകുന്നു.
- എളുപ്പമുള്ള സംയോജനം: റീഫാക്ടറിംഗിന് ലെഗസി സിസ്റ്റത്തെ പുതിയ സിസ്റ്റങ്ങളുമായും സാങ്കേതികവിദ്യകളുമായും സംയോജിപ്പിക്കുന്നത് എളുപ്പമാക്കാൻ കഴിയും, ഇത് നവീകരണവും ആധുനികവൽക്കരണവും സാധ്യമാക്കുന്നു. ഉദാഹരണത്തിന്, ഒരു യൂറോപ്യൻ ഇ-കൊമേഴ്സ് പ്ലാറ്റ്ഫോമിന് വ്യത്യസ്ത എപിഐ ഉപയോഗിക്കുന്ന ഒരു പുതിയ പേയ്മെൻ്റ് ഗേറ്റ്വേയുമായി സംയോജിപ്പിക്കേണ്ടി വന്നേക്കാം.
- മെച്ചപ്പെട്ട ഡെവലപ്പർ മനോവീര്യം: വൃത്തിയുള്ളതും നന്നായി ചിട്ടപ്പെടുത്തിയതുമായ കോഡിൽ പ്രവർത്തിക്കുന്നത് ഡെവലപ്പർമാർക്ക് കൂടുതൽ ആസ്വാദ്യകരവും ഉൽപ്പാദനക്ഷമവുമാണ്. റീഫാക്ടറിംഗിന് മനോവീര്യം വർദ്ധിപ്പിക്കാനും കഴിവുള്ളവരെ ആകർഷിക്കാനും കഴിയും.
റീഫാക്ടറിംഗിനായി കോഡ് എങ്ങനെ തിരഞ്ഞെടുക്കാം
എല്ലാ ലെഗസി കോഡുകളും റീഫാക്ടർ ചെയ്യേണ്ടതില്ല. താഴെ പറയുന്ന ഘടകങ്ങളെ അടിസ്ഥാനമാക്കി റീഫാക്ടറിംഗ് ശ്രമങ്ങൾക്ക് മുൻഗണന നൽകേണ്ടത് പ്രധാനമാണ്:
- മാറ്റങ്ങളുടെ ആവൃത്തി: പതിവായി പരിഷ്കരിക്കുന്ന കോഡ് റീഫാക്ടറിംഗിന് ഒരു പ്രധാന സ്ഥാനാർത്ഥിയാണ്, കാരണം പരിപാലനക്ഷമതയിലെ മെച്ചപ്പെടുത്തലുകൾ ഡെവലപ്മെൻ്റ് ഉൽപ്പാദനക്ഷമതയിൽ കാര്യമായ സ്വാധീനം ചെലുത്തും.
- സങ്കീർണ്ണത: സങ്കീർണ്ണവും മനസ്സിലാക്കാൻ പ്രയാസമുള്ളതുമായ കോഡിൽ ബഗുകൾ ഉണ്ടാകാൻ സാധ്യതയുണ്ട്, സുരക്ഷിതമായി പരിഷ്കരിക്കുന്നതും പ്രയാസമാണ്.
- ബഗുകളുടെ സ്വാധീനം: ബിസിനസ്സ് പ്രവർത്തനങ്ങൾക്ക് നിർണായകമായതോ അല്ലെങ്കിൽ വലിയ പിഴവുകൾക്ക് കാരണമാകാൻ സാധ്യതയുള്ളതോ ആയ കോഡിന് റീഫാക്ടറിംഗിൽ മുൻഗണന നൽകണം.
- പെർഫോമൻസ് ബോട്ടിൽനെക്കുകൾ: പെർഫോമൻസ് ബോട്ടിൽനെക്ക് ആയി തിരിച്ചറിഞ്ഞ കോഡ് പ്രകടനം മെച്ചപ്പെടുത്തുന്നതിനായി റീഫാക്ടർ ചെയ്യണം.
- കോഡ് സ്മെല്ലുകൾ: നീണ്ട മെത്തേഡുകൾ, വലിയ ക്ലാസുകൾ, ഡ്യൂപ്ലിക്കേറ്റ് കോഡ്, ഫീച്ചർ എൻവി തുടങ്ങിയ സാധാരണ കോഡ് സ്മെല്ലുകൾ ശ്രദ്ധിക്കുക. ഇവ റീഫാക്ടറിംഗിൽ നിന്ന് പ്രയോജനം ലഭിക്കുന്ന മേഖലകളുടെ സൂചകങ്ങളാണ്.
ഉദാഹരണം: ഒരു ആഗോള ലോജിസ്റ്റിക്സ് കമ്പനിക്ക് ഷിപ്പ്മെൻ്റുകൾ കൈകാര്യം ചെയ്യുന്നതിനുള്ള ഒരു ലെഗസി സിസ്റ്റം ഉണ്ടെന്ന് സങ്കൽപ്പിക്കുക. മാറുന്ന ചട്ടങ്ങളും ഇന്ധന വിലയും കാരണം ഷിപ്പിംഗ് ചെലവ് കണക്കാക്കുന്നതിനുള്ള മൊഡ്യൂൾ പതിവായി അപ്ഡേറ്റ് ചെയ്യപ്പെടുന്നു. ഈ മൊഡ്യൂൾ റീഫാക്ടറിംഗിന് ഏറ്റവും അനുയോജ്യമായ ഒന്നാണ്.
റീഫാക്ടറിംഗ് ടെക്നിക്കുകൾ
നിരവധി റീഫാക്ടറിംഗ് ടെക്നിക്കുകൾ ലഭ്യമാണ്, ഓരോന്നും പ്രത്യേക കോഡ് സ്മെല്ലുകൾ പരിഹരിക്കാനോ കോഡിൻ്റെ പ്രത്യേക വശങ്ങൾ മെച്ചപ്പെടുത്താനോ രൂപകൽപ്പന ചെയ്തിട്ടുള്ളതാണ്. സാധാരണയായി ഉപയോഗിക്കുന്ന ചില ടെക്നിക്കുകൾ ഇതാ:
മെത്തേഡുകൾ ചിട്ടപ്പെടുത്തുന്നു
വലിയ, സങ്കീർണ്ണമായ മെത്തേഡുകളെ ചെറിയ, കൈകാര്യം ചെയ്യാൻ എളുപ്പമുള്ള മെത്തേഡുകളായി വിഭജിക്കുന്നതിലാണ് ഈ ടെക്നിക്കുകൾ ശ്രദ്ധ കേന്ദ്രീകരിക്കുന്നത്. ഇത് വായനാക്ഷമത മെച്ചപ്പെടുത്തുന്നു, ഡ്യൂപ്ലിക്കേഷൻ കുറയ്ക്കുന്നു, കോഡ് ടെസ്റ്റ് ചെയ്യാൻ എളുപ്പമാക്കുന്നു.
- എക്സ്ട്രാക്റ്റ് മെത്തേഡ് (Extract Method): ഒരു പ്രത്യേക ടാസ്ക് ചെയ്യുന്ന ഒരു കോഡ് ബ്ലോക്ക് കണ്ടെത്തി അതിനെ ഒരു പുതിയ മെത്തേഡിലേക്ക് മാറ്റുന്നത് ഇതിൽ ഉൾപ്പെടുന്നു.
- ഇൻലൈൻ മെത്തേഡ് (Inline Method): ഒരു മെത്തേഡ് കോളിനെ മെത്തേഡിൻ്റെ ബോഡി ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുന്നത് ഇതിൽ ഉൾപ്പെടുന്നു. ഒരു മെത്തേഡിൻ്റെ പേര് അതിൻ്റെ ബോഡി പോലെ വ്യക്തമാകുമ്പോൾ, അല്ലെങ്കിൽ നിങ്ങൾ എക്സ്ട്രാക്റ്റ് മെത്തേഡ് ഉപയോഗിക്കാൻ പോകുമ്പോൾ നിലവിലുള്ള മെത്തേഡ് വളരെ ചെറുതാണെങ്കിൽ ഇത് ഉപയോഗിക്കുക.
- റിപ്ലേസ് ടെംപ് വിത്ത് ക്വറി (Replace Temp with Query): ഒരു താൽക്കാലിക വേരിയബിളിനെ, ആവശ്യാനുസരണം വേരിയബിളിൻ്റെ മൂല്യം കണക്കാക്കുന്ന ഒരു മെത്തേഡ് കോൾ ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുന്നത് ഇതിൽ ഉൾപ്പെടുന്നു.
- ഇൻട്രൊഡ്യൂസ് എക്സ്പ്ലെയിനിംഗ് വേരിയബിൾ (Introduce Explaining Variable): ഒരു എക്സ്പ്രഷന്റെ ഫലം വിവരണാത്മകമായ പേരിലുള്ള ഒരു വേരിയബിളിലേക്ക് നൽകാൻ ഇത് ഉപയോഗിക്കുക, അതിൻ്റെ ഉദ്ദേശ്യം വ്യക്തമാക്കുന്നു.
ഒബ്ജക്റ്റുകൾക്കിടയിൽ ഫീച്ചറുകൾ നീക്കുന്നു
ഈ ടെക്നിക്കുകൾ ഉത്തരവാദിത്തങ്ങൾ അവയുടെ ശരിയായ സ്ഥാനത്തേക്ക് മാറ്റിക്കൊണ്ട് ക്ലാസുകളുടെയും ഒബ്ജക്റ്റുകളുടെയും ഡിസൈൻ മെച്ചപ്പെടുത്തുന്നതിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കുന്നു.
- മൂവ് മെത്തേഡ് (Move Method): ഒരു മെത്തേഡിനെ ഒരു ക്ലാസിൽ നിന്ന് അത് യുക്തിപരമായി ചേരുന്ന മറ്റൊരു ക്ലാസിലേക്ക് മാറ്റുന്നത് ഇതിൽ ഉൾപ്പെടുന്നു.
- മൂവ് ഫീൽഡ് (Move Field): ഒരു ഫീൽഡിനെ ഒരു ക്ലാസിൽ നിന്ന് അത് യുക്തിപരമായി ചേരുന്ന മറ്റൊരു ക്ലാസിലേക്ക് മാറ്റുന്നത് ഇതിൽ ഉൾപ്പെടുന്നു.
- എക്സ്ട്രാക്റ്റ് ക്ലാസ് (Extract Class): നിലവിലുള്ള ഒരു ക്ലാസിൽ നിന്ന് വേർതിരിച്ചെടുത്ത ഒരു കൂട്ടം ഉത്തരവാദിത്തങ്ങളിൽ നിന്ന് ഒരു പുതിയ ക്ലാസ് ഉണ്ടാക്കുന്നത് ഇതിൽ ഉൾപ്പെടുന്നു.
- ഇൻലൈൻ ക്ലാസ് (Inline Class): ഒരു ക്ലാസ് അതിൻ്റെ നിലനിൽപ്പിനെ ന്യായീകരിക്കാൻ പര്യാപ്തമായ കാര്യങ്ങൾ ചെയ്യുന്നില്ലെങ്കിൽ അതിനെ മറ്റൊന്നിലേക്ക് ലയിപ്പിക്കാൻ ഇത് ഉപയോഗിക്കുക.
- ഹൈഡ് ഡെലിഗേറ്റ് (Hide Delegate): ക്ലയിൻ്റിൽ നിന്ന് ഡെലിഗേഷൻ ലോജിക് മറയ്ക്കുന്നതിനായി സെർവറിൽ മെത്തേഡുകൾ ഉണ്ടാക്കുന്നത് ഇതിൽ ഉൾപ്പെടുന്നു, ഇത് ക്ലയിൻ്റും ഡെലിഗേറ്റും തമ്മിലുള്ള കപ്ലിംഗ് കുറയ്ക്കുന്നു.
- റിമൂവ് മിഡിൽ മാൻ (Remove Middle Man): ഒരു ക്ലാസ് അതിൻ്റെ മിക്കവാറും എല്ലാ ജോലികളും ഡെലിഗേറ്റ് ചെയ്യുകയാണെങ്കിൽ, ഇടനിലക്കാരനെ ഒഴിവാക്കാൻ ഇത് സഹായിക്കുന്നു.
- ഇൻട്രൊഡ്യൂസ് ഫോറിൻ മെത്തേഡ് (Introduce Foreign Method): ഒരു സെർവർ ക്ലാസിൽ നിന്ന് ശരിക്കും ആവശ്യമുള്ളതും എന്നാൽ ആക്സസ് ഇല്ലാത്തതിനാലോ സെർവർ ക്ലാസിലെ ആസൂത്രിതമായ മാറ്റങ്ങൾ കാരണമോ പരിഷ്കരിക്കാൻ കഴിയാത്ത ഫീച്ചറുകൾ നൽകുന്നതിന് ക്ലയിൻ്റ് ക്ലാസിലേക്ക് ഒരു മെത്തേഡ് ചേർക്കുന്നു.
- ഇൻട്രൊഡ്യൂസ് ലോക്കൽ എക്സ്റ്റൻഷൻ (Introduce Local Extension): പുതിയ മെത്തേഡുകൾ അടങ്ങുന്ന ഒരു പുതിയ ക്ലാസ് ഉണ്ടാക്കുന്നു. നിങ്ങൾക്ക് ക്ലാസിൻ്റെ സോഴ്സിൽ നിയന്ത്രണമില്ലാത്തപ്പോഴും നേരിട്ട് പെരുമാറ്റം ചേർക്കാൻ കഴിയാത്തപ്പോഴും ഇത് ഉപയോഗപ്രദമാണ്.
ഡാറ്റ ഓർഗനൈസുചെയ്യുന്നു
ഡാറ്റ സംഭരിക്കുന്നതും ആക്സസ് ചെയ്യുന്നതും മെച്ചപ്പെടുത്തുന്നതിലാണ് ഈ ടെക്നിക്കുകൾ ശ്രദ്ധ കേന്ദ്രീകരിക്കുന്നത്, ഇത് മനസ്സിലാക്കാനും പരിഷ്കരിക്കാനും എളുപ്പമാക്കുന്നു.
- റിപ്ലേസ് ഡാറ്റ വാല്യു വിത്ത് ഒബ്ജക്റ്റ് (Replace Data Value with Object): ലളിതമായ ഒരു ഡാറ്റ മൂല്യത്തെ ബന്ധപ്പെട്ട ഡാറ്റയും പെരുമാറ്റവും ഉൾക്കൊള്ളുന്ന ഒരു ഒബ്ജക്റ്റ് ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുന്നത് ഇതിൽ ഉൾപ്പെടുന്നു.
- ചേഞ്ച് വാല്യു ടു റഫറൻസ് (Change Value to Reference): ഒന്നിലധികം ഒബ്ജക്റ്റുകൾ ഒരേ മൂല്യം പങ്കിടുമ്പോൾ ഒരു വാല്യു ഒബ്ജക്റ്റിനെ ഒരു റഫറൻസ് ഒബ്ജക്റ്റാക്കി മാറ്റുന്നത് ഇതിൽ ഉൾപ്പെടുന്നു.
- ചേഞ്ച് യൂണിഡയറക്ഷണൽ അസോസിയേഷൻ ടു ബൈഡയറക്ഷണൽ (Change Unidirectional Association to Bidirectional): ഒരു വൺ-വേ ലിങ്ക് മാത്രം നിലനിൽക്കുന്നിടത്ത് രണ്ട് ക്ലാസുകൾക്കിടയിൽ ഒരു ബൈഡയറക്ഷണൽ ലിങ്ക് ഉണ്ടാക്കുന്നു.
- ചേഞ്ച് ബൈഡയറക്ഷണൽ അസോസിയേഷൻ ടു യൂണിഡയറക്ഷണൽ (Change Bidirectional Association to Unidirectional): ഒരു ടു-വേ ബന്ധം വൺ-വേ ആക്കി അസോസിയേഷനുകൾ ലളിതമാക്കുന്നു.
- റിപ്ലേസ് മാജിക് നമ്പർ വിത്ത് സിംബോളിക് കോൺസ്റ്റൻ്റ് (Replace Magic Number with Symbolic Constant): ലിറ്ററൽ മൂല്യങ്ങളെ പേരുള്ള കോൺസ്റ്റൻ്റുകൾ ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുന്നത് ഇതിൽ ഉൾപ്പെടുന്നു, ഇത് കോഡ് മനസ്സിലാക്കാനും പരിപാലിക്കാനും എളുപ്പമാക്കുന്നു.
- എൻക്യാപ്സുലേറ്റ് ഫീൽഡ് (Encapsulate Field): ഫീൽഡ് ആക്സസ് ചെയ്യുന്നതിന് ഒരു ഗെറ്റർ, സെറ്റർ മെത്തേഡ് നൽകുന്നു.
- എൻക്യാപ്സുലേറ്റ് കളക്ഷൻ (Encapsulate Collection): കളക്ഷനിലെ എല്ലാ മാറ്റങ്ങളും ഉടമ ക്ലാസിലെ ശ്രദ്ധാപൂർവ്വം നിയന്ത്രിക്കപ്പെടുന്ന മെത്തേഡുകളിലൂടെ നടക്കുന്നുവെന്ന് ഉറപ്പാക്കുന്നു.
- റിപ്ലേസ് റെക്കോർഡ് വിത്ത് ഡാറ്റ ക്ലാസ് (Replace Record with Data Class): റെക്കോർഡിൻ്റെ ഘടനയ്ക്കും ആക്സസർ മെത്തേഡുകൾക്കും സമാനമായ ഫീൽഡുകളുള്ള ഒരു പുതിയ ക്ലാസ് ഉണ്ടാക്കുന്നു.
- റിപ്ലേസ് ടൈപ്പ് കോഡ് വിത്ത് ക്ലാസ് (Replace Type Code with Class): ടൈപ്പ് കോഡിന് പരിമിതവും അറിയാവുന്നതുമായ സാധ്യമായ മൂല്യങ്ങൾ ഉള്ളപ്പോൾ ഒരു പുതിയ ക്ലാസ് ഉണ്ടാക്കുക.
- റിപ്ലേസ് ടൈപ്പ് കോഡ് വിത്ത് സബ്ക്ലാസസ് (Replace Type Code with Subclasses): ടൈപ്പ് കോഡ് മൂല്യം ക്ലാസിൻ്റെ പെരുമാറ്റത്തെ ബാധിക്കുമ്പോൾ ഇത് ഉപയോഗിക്കുക.
- റിപ്ലേസ് ടൈപ്പ് കോഡ് വിത്ത് സ്റ്റേറ്റ്/സ്ട്രാറ്റജി (Replace Type Code with State/Strategy): ടൈപ്പ് കോഡ് മൂല്യം ക്ലാസിൻ്റെ പെരുമാറ്റത്തെ ബാധിക്കുമ്പോൾ, എന്നാൽ സബ്ക്ലാസിംഗ് അനുയോജ്യമല്ലാത്തപ്പോൾ ഇത് ഉപയോഗിക്കുക.
- റിപ്ലേസ് സബ്ക്ലാസ് വിത്ത് ഫീൽഡ്സ് (Replace Subclass with Fields): ഒരു സബ്ക്ലാസ് നീക്കം ചെയ്യുകയും സബ്ക്ലാസിൻ്റെ വ്യതിരിക്തമായ പ്രോപ്പർട്ടികളെ പ്രതിനിധീകരിക്കുന്ന ഫീൽഡുകൾ സൂപ്പർക്ലാസിലേക്ക് ചേർക്കുകയും ചെയ്യുന്നു.
കണ്ടീഷണൽ എക്സ്പ്രഷനുകൾ ലളിതമാക്കുന്നു
കണ്ടീഷണൽ ലോജിക് പെട്ടെന്ന് സങ്കീർണ്ണമാകും. ഈ ടെക്നിക്കുകൾ അത് വ്യക്തമാക്കാനും ലളിതമാക്കാനും ലക്ഷ്യമിടുന്നു.
- ഡീകമ്പോസ് കണ്ടീഷണൽ (Decompose Conditional): സങ്കീർണ്ണമായ ഒരു കണ്ടീഷണൽ സ്റ്റേറ്റ്മെൻ്റിനെ ചെറിയ, കൈകാര്യം ചെയ്യാൻ എളുപ്പമുള്ള കഷണങ്ങളായി വിഭജിക്കുന്നത് ഇതിൽ ഉൾപ്പെടുന്നു.
- കൺസോളിഡേറ്റ് കണ്ടീഷണൽ എക്സ്പ്രഷൻ (Consolidate Conditional Expression): ഒന്നിലധികം കണ്ടീഷണൽ സ്റ്റേറ്റ്മെൻ്റുകളെ ഒരൊറ്റ, കൂടുതൽ സംക്ഷിപ്തമായ സ്റ്റേറ്റ്മെൻ്റിലേക്ക് സംയോജിപ്പിക്കുന്നത് ഇതിൽ ഉൾപ്പെടുന്നു.
- കൺസോളിഡേറ്റ് ഡ്യൂപ്ലിക്കേറ്റ് കണ്ടീഷണൽ ഫ്രാഗ്മെൻ്റ്സ് (Consolidate Duplicate Conditional Fragments): ഒരു കണ്ടീഷണൽ സ്റ്റേറ്റ്മെൻ്റിൻ്റെ ഒന്നിലധികം ബ്രാഞ്ചുകളിൽ ഡ്യൂപ്ലിക്കേറ്റ് ചെയ്ത കോഡിനെ കണ്ടീഷണലിന് പുറത്തേക്ക് മാറ്റുന്നത് ഇതിൽ ഉൾപ്പെടുന്നു.
- റിമൂവ് കൺട്രോൾ ഫ്ലാഗ് (Remove Control Flag): ലോജിക്കിൻ്റെ ഒഴുക്ക് നിയന്ത്രിക്കാൻ ഉപയോഗിക്കുന്ന ബൂളിയൻ വേരിയബിളുകൾ ഒഴിവാക്കുക.
- റിപ്ലേസ് നെസ്റ്റഡ് കണ്ടീഷണൽ വിത്ത് ഗാർഡ് ക്ലോസസ് (Replace Nested Conditional with Guard Clauses): എല്ലാ പ്രത്യേക കേസുകളും മുകളിൽ വെക്കുകയും അവയിലൊന്ന് ശരിയാണെങ്കിൽ പ്രോസസ്സിംഗ് നിർത്തുകയും ചെയ്യുന്നതിലൂടെ കോഡ് കൂടുതൽ വായിക്കാൻ എളുപ്പമാക്കുന്നു.
- റിപ്ലേസ് കണ്ടീഷണൽ വിത്ത് പോളിമോർഫിസം (Replace Conditional with Polymorphism): കണ്ടീഷണൽ ലോജിക്കിനെ പോളിമോർഫിസം ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുന്നത് ഇതിൽ ഉൾപ്പെടുന്നു, ഇത് വ്യത്യസ്ത ഒബ്ജക്റ്റുകളെ വ്യത്യസ്ത കേസുകൾ കൈകാര്യം ചെയ്യാൻ അനുവദിക്കുന്നു.
- ഇൻട്രൊഡ്യൂസ് നൾ ഒബ്ജക്റ്റ് (Introduce Null Object): ഒരു നൾ മൂല്യം പരിശോധിക്കുന്നതിനു പകരം, ഡിഫോൾട്ട് പെരുമാറ്റം നൽകുന്ന ഒരു ഡിഫോൾട്ട് ഒബ്ജക്റ്റ് ഉണ്ടാക്കുക.
- ഇൻട്രൊഡ്യൂസ് അസേർഷൻ (Introduce Assertion): പ്രതീക്ഷകൾ പരിശോധിക്കുന്ന ഒരു ടെസ്റ്റ് ഉണ്ടാക്കി അവ വ്യക്തമായി രേഖപ്പെടുത്തുക.
മെത്തേഡ് കോളുകൾ ലളിതമാക്കുന്നു
- റീനെയിം മെത്തേഡ് (Rename Method): ഇത് വ്യക്തമാണെന്ന് തോന്നുമെങ്കിലും, കോഡ് വ്യക്തമാക്കുന്നതിൽ അവിശ്വസനീയമാംവിധം സഹായകമാണ്.
- ആഡ് പാരാമീറ്റർ (Add Parameter): ഒരു മെത്തേഡ് സിഗ്നേച്ചറിലേക്ക് വിവരങ്ങൾ ചേർക്കുന്നത് മെത്തേഡിനെ കൂടുതൽ വഴക്കമുള്ളതും പുനരുപയോഗിക്കാവുന്നതുമാക്കാൻ അനുവദിക്കുന്നു.
- റിമൂവ് പാരാമീറ്റർ (Remove Parameter): ഒരു പാരാമീറ്റർ ഉപയോഗിക്കുന്നില്ലെങ്കിൽ, ഇൻ്റർഫേസ് ലളിതമാക്കാൻ അത് ഒഴിവാക്കുക.
- സെപ്പറേറ്റ് ക്വറി ഫ്രം മോഡിഫയർ (Separate Query from Modifier): ഒരു മെത്തേഡ് മൂല്യം മാറ്റുകയും തിരികെ നൽകുകയും ചെയ്യുന്നുവെങ്കിൽ, അതിനെ രണ്ട് വ്യത്യസ്ത മെത്തേഡുകളായി വേർതിരിക്കുക.
- പാരാമീറ്ററൈസ് മെത്തേഡ് (Parameterize Method): സമാനമായ മെത്തേഡുകളെ ഒരു പാരാമീറ്റർ ഉപയോഗിച്ച് ഒരൊറ്റ മെത്തേഡിലേക്ക് ഏകീകരിക്കാൻ ഇത് ഉപയോഗിക്കുക, അത് പെരുമാറ്റത്തെ വ്യത്യാസപ്പെടുത്തുന്നു.
- റിപ്ലേസ് പാരാമീറ്റർ വിത്ത് എക്സ്പ്ലിസിറ്റ് മെത്തേഡ്സ് (Replace Parameter with Explicit Methods): പാരാമീറ്ററൈസ് ചെയ്യുന്നതിൻ്റെ വിപരീതം ചെയ്യുക - ഒരൊറ്റ മെത്തേഡിനെ പാരാമീറ്ററിൻ്റെ ഓരോ പ്രത്യേക മൂല്യത്തെയും പ്രതിനിധീകരിക്കുന്ന ഒന്നിലധികം മെത്തേഡുകളായി വിഭജിക്കുക.
- പ്രിസേർവ് ഹോൾ ഒബ്ജക്റ്റ് (Preserve Whole Object): ഒരു മെത്തേഡിലേക്ക് കുറച്ച് നിർദ്ദിഷ്ട ഡാറ്റാ ഇനങ്ങൾ കൈമാറുന്നതിന് പകരം, മുഴുവൻ ഒബ്ജക്റ്റും കൈമാറുക, അതുവഴി മെത്തേഡിന് അതിൻ്റെ എല്ലാ ഡാറ്റയും ആക്സസ് ചെയ്യാൻ കഴിയും.
- റിപ്ലേസ് പാരാമീറ്റർ വിത്ത് മെത്തേഡ് (Replace Parameter with Method): ഒരു ഫീൽഡിൽ നിന്ന് ലഭിക്കുന്ന ഒരേ മൂല്യം ഉപയോഗിച്ച് ഒരു മെത്തേഡ് എപ്പോഴും കോൾ ചെയ്യുകയാണെങ്കിൽ, മെത്തേഡിനുള്ളിൽ പാരാമീറ്റർ മൂല്യം ഡിറൈവ് ചെയ്യുന്നത് പരിഗണിക്കുക.
- ഇൻട്രൊഡ്യൂസ് പാരാമീറ്റർ ഒബ്ജക്റ്റ് (Introduce Parameter Object): നിരവധി പാരാമീറ്ററുകൾ സ്വാഭാവികമായി ഒരുമിച്ച് ചേരുമ്പോൾ അവയെ ഒരു ഒബ്ജക്റ്റിലേക്ക് ഗ്രൂപ്പ് ചെയ്യുക.
- റിമൂവ് സെറ്റിംഗ് മെത്തേഡ് (Remove Setting Method): ഒരു ഫീൽഡ് നിർമ്മാണത്തിന് ശേഷം പരിഷ്കരിക്കരുത്, പ്രാരംഭമായി മാത്രം സജ്ജമാക്കണമെങ്കിൽ സെറ്ററുകൾ ഒഴിവാക്കുക.
- ഹൈഡ് മെത്തേഡ് (Hide Method): ഒരു മെത്തേഡ് ഒരു ക്ലാസിനുള്ളിൽ മാത്രം ഉപയോഗിക്കുന്നുവെങ്കിൽ അതിൻ്റെ വിസിബിലിറ്റി കുറയ്ക്കുക.
- റിപ്ലേസ് കൺസ്ട്രക്ടർ വിത്ത് ഫാക്ടറി മെത്തേഡ് (Replace Constructor with Factory Method): കൺസ്ട്രക്ടറുകൾക്ക് കൂടുതൽ വിവരണാത്മകമായ ഒരു ബദൽ.
- റിപ്ലേസ് എക്സപ്ഷൻ വിത്ത് ടെസ്റ്റ് (Replace Exception with Test): ഫ്ലോ കൺട്രോളായി എക്സപ്ഷനുകൾ ഉപയോഗിക്കുന്നുണ്ടെങ്കിൽ, പ്രകടനം മെച്ചപ്പെടുത്തുന്നതിന് അവയെ കണ്ടീഷണൽ ലോജിക് ഉപയോഗിച്ച് മാറ്റിസ്ഥാപിക്കുക.
ജനറലൈസേഷനുമായി ബന്ധപ്പെട്ട കാര്യങ്ങൾ
- പുൾ അപ്പ് ഫീൽഡ് (Pull Up Field): ഒരു ഫീൽഡിനെ ഒരു സബ്ക്ലാസിൽ നിന്ന് അതിൻ്റെ സൂപ്പർക്ലാസിലേക്ക് മാറ്റുക.
- പുൾ അപ്പ് മെത്തേഡ് (Pull Up Method): ഒരു മെത്തേഡിനെ ഒരു സബ്ക്ലാസിൽ നിന്ന് അതിൻ്റെ സൂപ്പർക്ലാസിലേക്ക് മാറ്റുക.
- പുൾ അപ്പ് കൺസ്ട്രക്ടർ ബോഡി (Pull Up Constructor Body): ഒരു കൺസ്ട്രക്ടറിൻ്റെ ബോഡിയെ ഒരു സബ്ക്ലാസിൽ നിന്ന് അതിൻ്റെ സൂപ്പർക്ലാസിലേക്ക് മാറ്റുക.
- പുഷ് ഡൗൺ മെത്തേഡ് (Push Down Method): ഒരു മെത്തേഡിനെ ഒരു സൂപ്പർക്ലാസിൽ നിന്ന് അതിൻ്റെ സബ്ക്ലാസുകളിലേക്ക് മാറ്റുക.
- പുഷ് ഡൗൺ ഫീൽഡ് (Push Down Field): ഒരു ഫീൽഡിനെ ഒരു സൂപ്പർക്ലാസിൽ നിന്ന് അതിൻ്റെ സബ്ക്ലാസുകളിലേക്ക് മാറ്റുക.
- എക്സ്ട്രാക്റ്റ് ഇൻ്റർഫേസ് (Extract Interface): ഒരു ക്ലാസിലെ പബ്ലിക് മെത്തേഡുകളിൽ നിന്ന് ഒരു ഇൻ്റർഫേസ് ഉണ്ടാക്കുന്നു.
- എക്സ്ട്രാക്റ്റ് സൂപ്പർക്ലാസ് (Extract Superclass): രണ്ട് ക്ലാസുകളിൽ നിന്നുള്ള പൊതുവായ പ്രവർത്തനങ്ങളെ ഒരു പുതിയ സൂപ്പർക്ലാസിലേക്ക് മാറ്റുക.
- കൊളാപ്സ് ഹൈറാർക്കി (Collapse Hierarchy): ഒരു സൂപ്പർക്ലാസും സബ്ക്ലാസും ഒരൊറ്റ ക്ലാസിലേക്ക് സംയോജിപ്പിക്കുക.
- ഫോം ടെംപ്ലേറ്റ് മെത്തേഡ് (Form Template Method): ഒരു അൽഗോരിതംത്തിൻ്റെ ഘട്ടങ്ങൾ നിർവചിക്കുന്ന ഒരു ടെംപ്ലേറ്റ് മെത്തേഡ് ഒരു സൂപ്പർക്ലാസിൽ ഉണ്ടാക്കുക, ഇത് സബ്ക്ലാസുകളെ നിർദ്ദിഷ്ട ഘട്ടങ്ങൾ ഓവർറൈഡ് ചെയ്യാൻ അനുവദിക്കുന്നു.
- റിപ്ലേസ് ഇൻഹെറിറ്റൻസ് വിത്ത് ഡെലിഗേഷൻ (Replace Inheritance with Delegation): ഇൻഹെറിറ്റ് ചെയ്യുന്നതിനു പകരം, ക്ലാസിൽ പ്രവർത്തനത്തെ റഫറൻസ് ചെയ്യുന്ന ഒരു ഫീൽഡ് ഉണ്ടാക്കുക.
- റിപ്ലേസ് ഡെലിഗേഷൻ വിത്ത് ഇൻഹെറിറ്റൻസ് (Replace Delegation with Inheritance): ഡെലിഗേഷൻ വളരെ സങ്കീർണ്ണമാകുമ്പോൾ, ഇൻഹെറിറ്റൻസിലേക്ക് മാറുക.
ലഭ്യമായ നിരവധി റീഫാക്ടറിംഗ് ടെക്നിക്കുകളുടെ ഏതാനും ഉദാഹരണങ്ങൾ മാത്രമാണിത്. ഏത് ടെക്നിക് ഉപയോഗിക്കണം എന്നത് നിർദ്ദിഷ്ട കോഡ് സ്മെല്ലിനെയും ആഗ്രഹിക്കുന്ന ഫലത്തെയും ആശ്രയിച്ചിരിക്കുന്നു.
ഉദാഹരണം: ഒരു ആഗോള ബാങ്ക് ഉപയോഗിക്കുന്ന ഒരു ജാവ ആപ്ലിക്കേഷനിലെ ഒരു വലിയ മെത്തേഡ് പലിശ നിരക്കുകൾ കണക്കാക്കുന്നു. എക്സ്ട്രാക്റ്റ് മെത്തേഡ് പ്രയോഗിക്കുന്നത് വഴി ചെറിയ, കൂടുതൽ ശ്രദ്ധ കേന്ദ്രീകരിച്ച മെത്തേഡുകൾ ഉണ്ടാക്കുന്നത് വായനാക്ഷമത മെച്ചപ്പെടുത്തുകയും മെത്തേഡിൻ്റെ മറ്റ് ഭാഗങ്ങളെ ബാധിക്കാതെ പലിശ നിരക്ക് കണക്കാക്കൽ ലോജിക് അപ്ഡേറ്റ് ചെയ്യുന്നത് എളുപ്പമാക്കുകയും ചെയ്യുന്നു.
റീഫാക്ടറിംഗ് പ്രക്രിയ
അപകടസാധ്യത കുറയ്ക്കുന്നതിനും വിജയസാധ്യത വർദ്ധിപ്പിക്കുന്നതിനും റീഫാക്ടറിംഗിനെ ചിട്ടയായി സമീപിക്കണം. ശുപാർശ ചെയ്യുന്ന ഒരു പ്രക്രിയ ഇതാ:
- റീഫാക്ടറിംഗിനായി കോഡ് തിരഞ്ഞെടുക്കുക: റീഫാക്ടറിംഗിൽ നിന്ന് ഏറ്റവും കൂടുതൽ പ്രയോജനം ലഭിക്കുന്ന കോഡിൻ്റെ ഭാഗങ്ങൾ കണ്ടെത്താൻ മുമ്പ് സൂചിപ്പിച്ച മാനദണ്ഡങ്ങൾ ഉപയോഗിക്കുക.
- ടെസ്റ്റുകൾ ഉണ്ടാക്കുക: എന്തെങ്കിലും മാറ്റങ്ങൾ വരുത്തുന്നതിന് മുമ്പ്, കോഡിൻ്റെ നിലവിലുള്ള പെരുമാറ്റം പരിശോധിക്കാൻ ഓട്ടോമേറ്റഡ് ടെസ്റ്റുകൾ എഴുതുക. റീഫാക്ടറിംഗ് റിഗ്രഷനുകൾ വരുത്തുന്നില്ലെന്ന് ഉറപ്പാക്കാൻ ഇത് നിർണായകമാണ്. യൂണിറ്റ് ടെസ്റ്റുകൾ എഴുതാൻ JUnit (ജാവ), pytest (പൈത്തൺ), അല്ലെങ്കിൽ Jest (ജാവാസ്ക്രിപ്റ്റ്) പോലുള്ള ടൂളുകൾ ഉപയോഗിക്കാം.
- ഘട്ടം ഘട്ടമായി റീഫാക്ടർ ചെയ്യുക: ചെറിയ, ഘട്ടം ഘട്ടമായുള്ള മാറ്റങ്ങൾ വരുത്തുകയും ഓരോ മാറ്റത്തിന് ശേഷവും ടെസ്റ്റുകൾ പ്രവർത്തിപ്പിക്കുകയും ചെയ്യുക. ഇത് അവതരിപ്പിക്കപ്പെടുന്ന ഏതെങ്കിലും പിശകുകൾ കണ്ടെത്താനും പരിഹരിക്കാനും എളുപ്പമാക്കുന്നു.
- പതിവായി കമ്മിറ്റ് ചെയ്യുക: നിങ്ങളുടെ മാറ്റങ്ങൾ പതിവായി വേർഷൻ കൺട്രോളിലേക്ക് കമ്മിറ്റ് ചെയ്യുക. എന്തെങ്കിലും തെറ്റ് സംഭവിച്ചാൽ മുൻ പതിപ്പിലേക്ക് എളുപ്പത്തിൽ മടങ്ങാൻ ഇത് നിങ്ങളെ അനുവദിക്കുന്നു.
- കോഡ് റിവ്യൂ ചെയ്യുക: നിങ്ങളുടെ കോഡ് മറ്റൊരു ഡെവലപ്പറെക്കൊണ്ട് റിവ്യൂ ചെയ്യിക്കുക. ഇത് സാധ്യതയുള്ള പ്രശ്നങ്ങൾ കണ്ടെത്താനും റീഫാക്ടറിംഗ് ശരിയായി ചെയ്തുവെന്ന് ഉറപ്പാക്കാനും സഹായിക്കും.
- പ്രകടനം നിരീക്ഷിക്കുക: റീഫാക്ടറിംഗിന് ശേഷം, മാറ്റങ്ങൾ പ്രകടനത്തിൽ എന്തെങ്കിലും പ്രശ്നങ്ങൾ ഉണ്ടാക്കിയിട്ടില്ലെന്ന് ഉറപ്പാക്കാൻ സിസ്റ്റത്തിൻ്റെ പ്രകടനം നിരീക്ഷിക്കുക.
ഉദാഹരണം: ഒരു ആഗോള ഇ-കൊമേഴ്സ് പ്ലാറ്റ്ഫോമിലെ ഒരു പൈത്തൺ മൊഡ്യൂൾ റീഫാക്ടർ ചെയ്യുന്ന ഒരു ടീം നിലവിലുള്ള പ്രവർത്തനത്തിനായി യൂണിറ്റ് ടെസ്റ്റുകൾ ഉണ്ടാക്കാൻ `pytest` ഉപയോഗിക്കുന്നു. തുടർന്ന് അവർ ആശങ്കകൾ വേർതിരിക്കുന്നതിനും മൊഡ്യൂളിൻ്റെ ഘടന മെച്ചപ്പെടുത്തുന്നതിനും എക്സ്ട്രാക്റ്റ് ക്ലാസ് റീഫാക്ടറിംഗ് പ്രയോഗിക്കുന്നു. ഓരോ ചെറിയ മാറ്റത്തിന് ശേഷവും, പ്രവർത്തനം മാറ്റമില്ലാതെ തുടരുന്നുവെന്ന് ഉറപ്പാക്കാൻ അവർ ടെസ്റ്റുകൾ പ്രവർത്തിപ്പിക്കുന്നു.
ലെഗസി കോഡിൽ ടെസ്റ്റുകൾ ചേർക്കാനുള്ള തന്ത്രങ്ങൾ
മൈക്കിൾ ഫെദേഴ്സ് കൃത്യമായി പറഞ്ഞതുപോലെ, ലെഗസി കോഡ് എന്നാൽ ടെസ്റ്റുകളില്ലാത്ത കോഡാണ്. നിലവിലുള്ള കോഡ്ബേസുകളിൽ ടെസ്റ്റുകൾ ചേർക്കുന്നത് ഒരു വലിയ ഉദ്യമമായി തോന്നാം, എന്നാൽ സുരക്ഷിതമായ റീഫാക്ടറിംഗിന് ഇത് അത്യാവശ്യമാണ്. ഈ ജോലി സമീപിക്കാൻ നിരവധി തന്ത്രങ്ങൾ ഇതാ:
ക്യാരക്റ്ററൈസേഷൻ ടെസ്റ്റുകൾ (അഥവാ ഗോൾഡൻ മാസ്റ്റർ ടെസ്റ്റുകൾ)
മനസ്സിലാക്കാൻ പ്രയാസമുള്ള കോഡുമായി നിങ്ങൾ ഇടപെഴുകുമ്പോൾ, മാറ്റങ്ങൾ വരുത്താൻ തുടങ്ങുന്നതിനു മുമ്പ് അതിൻ്റെ നിലവിലെ പെരുമാറ്റം മനസ്സിലാക്കാൻ ക്യാരക്റ്ററൈസേഷൻ ടെസ്റ്റുകൾ സഹായിക്കും. ഒരു നിശ്ചിത ഇൻപുട്ടുകൾക്ക് കോഡിൻ്റെ നിലവിലെ ഔട്ട്പുട്ട് ഉറപ്പാക്കുന്ന ടെസ്റ്റുകൾ എഴുതുക എന്നതാണ് ആശയം. ഈ ടെസ്റ്റുകൾ കൃത്യത പരിശോധിക്കുന്നില്ല; അവ കോഡ് *നിലവിൽ* എന്തു ചെയ്യുന്നു എന്ന് രേഖപ്പെടുത്തുന്നു.
ഘട്ടങ്ങൾ:
- നിങ്ങൾ ക്യാരക്റ്ററൈസ് ചെയ്യാൻ ആഗ്രഹിക്കുന്ന കോഡിൻ്റെ ഒരു യൂണിറ്റ് തിരിച്ചറിയുക (ഉദാഹരണത്തിന്, ഒരു ഫംഗ്ഷൻ അല്ലെങ്കിൽ മെത്തേഡ്).
- സാധാരണവും അസാധാരണവുമായ സാഹചര്യങ്ങളെ പ്രതിനിധീകരിക്കുന്ന ഇൻപുട്ട് മൂല്യങ്ങളുടെ ഒരു കൂട്ടം ഉണ്ടാക്കുക.
- ആ ഇൻപുട്ടുകൾ ഉപയോഗിച്ച് കോഡ് പ്രവർത്തിപ്പിക്കുകയും ഫലമായുണ്ടാകുന്ന ഔട്ട്പുട്ടുകൾ പിടിച്ചെടുക്കുകയും ചെയ്യുക.
- ആ ഇൻപുട്ടുകൾക്ക് കോഡ് അതേ ഔട്ട്പുട്ടുകൾ നൽകുന്നുവെന്ന് ഉറപ്പാക്കുന്ന ടെസ്റ്റുകൾ എഴുതുക.
ശ്രദ്ധിക്കുക: അടിസ്ഥാന ലോജിക് സങ്കീർണ്ണമോ ഡാറ്റയെ ആശ്രയിച്ചുള്ളതോ ആണെങ്കിൽ ക്യാരക്റ്ററൈസേഷൻ ടെസ്റ്റുകൾ ദുർബലമാകാം. പിന്നീട് കോഡിൻ്റെ പെരുമാറ്റം മാറ്റണമെങ്കിൽ അവ അപ്ഡേറ്റ് ചെയ്യാൻ തയ്യാറാകുക.
സ്പ്രൗട്ട് മെത്തേഡ്, സ്പ്രൗട്ട് ക്ലാസ്
മൈക്കിൾ ഫെദേഴ്സ് വിവരിച്ച ഈ ടെക്നിക്കുകൾ, നിലവിലുള്ള കോഡ് തകർക്കാനുള്ള സാധ്യത കുറച്ചുകൊണ്ട് ഒരു ലെഗസി സിസ്റ്റത്തിലേക്ക് പുതിയ പ്രവർത്തനങ്ങൾ ചേർക്കാൻ ലക്ഷ്യമിടുന്നു.
സ്പ്രൗട്ട് മെത്തേഡ്: നിലവിലുള്ള ഒരു മെത്തേഡ് പരിഷ്കരിക്കേണ്ട ഒരു പുതിയ ഫീച്ചർ ചേർക്കേണ്ടിവരുമ്പോൾ, പുതിയ ലോജിക് അടങ്ങുന്ന ഒരു പുതിയ മെത്തേഡ് ഉണ്ടാക്കുക. തുടർന്ന്, നിലവിലുള്ള മെത്തേഡിൽ നിന്ന് ഈ പുതിയ മെത്തേഡ് കോൾ ചെയ്യുക. ഇത് പുതിയ കോഡ് വേർതിരിക്കാനും സ്വതന്ത്രമായി ടെസ്റ്റ് ചെയ്യാനും നിങ്ങളെ അനുവദിക്കുന്നു.
സ്പ്രൗട്ട് ക്ലാസ്: സ്പ്രൗട്ട് മെത്തേഡിന് സമാനം, എന്നാൽ ക്ലാസുകൾക്കായി. പുതിയ പ്രവർത്തനം നടപ്പിലാക്കുന്ന ഒരു പുതിയ ക്ലാസ് ഉണ്ടാക്കുക, തുടർന്ന് അതിനെ നിലവിലുള്ള സിസ്റ്റത്തിലേക്ക് സംയോജിപ്പിക്കുക.
സാൻഡ്ബോക്സിംഗ്
ലെഗസി കോഡിനെ സിസ്റ്റത്തിൻ്റെ മറ്റ് ഭാഗങ്ങളിൽ നിന്ന് വേർതിരിക്കുന്നതാണ് സാൻഡ്ബോക്സിംഗ്, ഇത് നിയന്ത്രിത പരിതസ്ഥിതിയിൽ ടെസ്റ്റ് ചെയ്യാൻ നിങ്ങളെ അനുവദിക്കുന്നു. ഡിപൻഡൻസികൾക്കായി മോക്കുകളോ സ്റ്റബുകളോ ഉണ്ടാക്കിയോ അല്ലെങ്കിൽ ഒരു വെർച്വൽ മെഷീനിൽ കോഡ് പ്രവർത്തിപ്പിച്ചോ ഇത് ചെയ്യാൻ കഴിയും.
ദ മിക്കാഡോ മെത്തേഡ്
സങ്കീർണ്ണമായ റീഫാക്ടറിംഗ് ജോലികൾ കൈകാര്യം ചെയ്യുന്നതിനുള്ള ഒരു വിഷ്വൽ പ്രോബ്ലം-സോൾവിംഗ് സമീപനമാണ് മിക്കാഡോ മെത്തേഡ്. കോഡിൻ്റെ വിവിധ ഭാഗങ്ങൾ തമ്മിലുള്ള ആശ്രിതത്വങ്ങളെ പ്രതിനിധീകരിക്കുന്ന ഒരു ഡയഗ്രം ഉണ്ടാക്കുകയും തുടർന്ന് സിസ്റ്റത്തിൻ്റെ മറ്റ് ഭാഗങ്ങളിലെ സ്വാധീനം കുറയ്ക്കുന്ന രീതിയിൽ കോഡ് റീഫാക്ടർ ചെയ്യുകയും ചെയ്യുന്നു. "മാറ്റം പരീക്ഷിക്കുക, എന്ത് തകരുന്നു എന്ന് നോക്കുക" എന്നതാണ് പ്രധാന തത്വം. അത് തകർന്നാൽ, അവസാനമായി പ്രവർത്തിച്ച അവസ്ഥയിലേക്ക് മടങ്ങുകയും പ്രശ്നം രേഖപ്പെടുത്തുകയും ചെയ്യുക. യഥാർത്ഥ മാറ്റം വീണ്ടും ശ്രമിക്കുന്നതിന് മുമ്പ് ആ പ്രശ്നം പരിഹരിക്കുക.
റീഫാക്ടറിംഗിനുള്ള ടൂളുകൾ
നിരവധി ടൂളുകൾ റീഫാക്ടറിംഗിന് സഹായിക്കും, ആവർത്തന ജോലികൾ ഓട്ടോമേറ്റ് ചെയ്യുകയും മികച്ച രീതികളിൽ മാർഗ്ഗനിർദ്ദേശം നൽകുകയും ചെയ്യുന്നു. ഈ ടൂളുകൾ പലപ്പോഴും ഇൻ്റഗ്രേറ്റഡ് ഡെവലപ്മെൻ്റ് എൻവയോൺമെൻ്റുകളിൽ (IDEs) സംയോജിപ്പിച്ചിരിക്കുന്നു:
- IDEs (ഉദാ. ഇൻ്റലിജെ ഐഡിയ, എക്ലിപ്സ്, വിഷ്വൽ സ്റ്റുഡിയോ): വേരിയബിളുകൾക്ക് പുനർനാമകരണം ചെയ്യുക, മെത്തേഡുകൾ എക്സ്ട്രാക്റ്റ് ചെയ്യുക, ക്ലാസുകൾ നീക്കുക തുടങ്ങിയ ജോലികൾ സ്വയമേവ നിർവഹിക്കാൻ കഴിയുന്ന ബിൽറ്റ്-ഇൻ റീഫാക്ടറിംഗ് ടൂളുകൾ IDE-കൾ നൽകുന്നു.
- സ്റ്റാറ്റിക് അനാലിസിസ് ടൂളുകൾ (ഉദാ. സോണാർക്യൂബ്, ചെക്ക്സ്റ്റൈൽ, PMD): ഈ ടൂളുകൾ കോഡ് സ്മെല്ലുകൾ, സാധ്യതയുള്ള ബഗുകൾ, സുരക്ഷാ തകരാറുകൾ എന്നിവയ്ക്കായി കോഡ് വിശകലനം ചെയ്യുന്നു. റീഫാക്ടറിംഗിൽ നിന്ന് പ്രയോജനം ലഭിക്കുന്ന കോഡിൻ്റെ ഭാഗങ്ങൾ കണ്ടെത്താൻ അവ സഹായിക്കും.
- കോഡ് കവറേജ് ടൂളുകൾ (ഉദാ. JaCoCo, Cobertura): ഈ ടൂളുകൾ ടെസ്റ്റുകളാൽ കവർ ചെയ്യപ്പെട്ട കോഡിൻ്റെ ശതമാനം അളക്കുന്നു. വേണ്ടത്ര ടെസ്റ്റ് ചെയ്യപ്പെടാത്ത കോഡിൻ്റെ ഭാഗങ്ങൾ കണ്ടെത്താൻ അവ സഹായിക്കും.
- റീഫാക്ടറിംഗ് ബ്രൗസറുകൾ (ഉദാ. സ്മോൾടോക്ക് റീഫാക്ടറിംഗ് ബ്രൗസർ): വലിയ പുനർഘടന പ്രവർത്തനങ്ങളിൽ സഹായിക്കുന്ന പ്രത്യേക ടൂളുകൾ.
ഉദാഹരണം: ഒരു ആഗോള ഇൻഷുറൻസ് കമ്പനിക്കായി ഒരു C# ആപ്ലിക്കേഷനിൽ പ്രവർത്തിക്കുന്ന ഒരു ഡെവലപ്മെൻ്റ് ടീം വേരിയബിളുകൾക്ക് പുനർനാമകരണം ചെയ്യാനും മെത്തേഡുകൾ എക്സ്ട്രാക്റ്റ് ചെയ്യാനും വിഷ്വൽ സ്റ്റുഡിയോയുടെ ബിൽറ്റ്-ഇൻ റീഫാക്ടറിംഗ് ടൂളുകൾ ഉപയോഗിക്കുന്നു. കോഡ് സ്മെല്ലുകളും സാധ്യതയുള്ള അപകടസാധ്യതകളും കണ്ടെത്താൻ അവർ സോണാർക്യൂബും ഉപയോഗിക്കുന്നു.
വെല്ലുവിളികളും അപകടസാധ്യതകളും
ലെഗസി കോഡ് റീഫാക്ടർ ചെയ്യുന്നത് വെല്ലുവിളികളും അപകടസാധ്യതകളും ഇല്ലാത്ത ഒന്നല്ല:
- റിഗ്രഷനുകൾ ഉണ്ടാകാനുള്ള സാധ്യത: റീഫാക്ടറിംഗ് പ്രക്രിയയിൽ ബഗുകൾ ഉണ്ടാകാനുള്ള സാധ്യതയാണ് ഏറ്റവും വലിയ അപകടസാധ്യത. സമഗ്രമായ ടെസ്റ്റുകൾ എഴുതുകയും ഘട്ടം ഘട്ടമായി റീഫാക്ടർ ചെയ്യുകയും ചെയ്യുന്നതിലൂടെ ഇത് ലഘൂകരിക്കാനാകും.
- ഡൊമെയ്ൻ പരിജ്ഞാനത്തിൻ്റെ അഭാവം: യഥാർത്ഥ ഡെവലപ്പർമാർ പോയിട്ടുണ്ടെങ്കിൽ, കോഡും അതിൻ്റെ ഉദ്ദേശ്യവും മനസ്സിലാക്കാൻ പ്രയാസമായിരിക്കും. ഇത് തെറ്റായ റീഫാക്ടറിംഗ് തീരുമാനങ്ങളിലേക്ക് നയിച്ചേക്കാം.
- ശക്തമായ കപ്ലിംഗ്: ശക്തമായി ബന്ധിപ്പിച്ച കോഡ് റീഫാക്ടർ ചെയ്യാൻ കൂടുതൽ ബുദ്ധിമുട്ടാണ്, കാരണം കോഡിൻ്റെ ഒരു ഭാഗത്തെ മാറ്റങ്ങൾ കോഡിൻ്റെ മറ്റ് ഭാഗങ്ങളിൽ അപ്രതീക്ഷിത പ്രത്യാഘാതങ്ങൾ ഉണ്ടാക്കിയേക്കാം.
- സമയപരിമിതികൾ: റീഫാക്ടറിംഗിന് സമയമെടുക്കും, പുതിയ ഫീച്ചറുകൾ നൽകുന്നതിൽ ശ്രദ്ധ കേന്ദ്രീകരിക്കുന്ന സ്റ്റേക്ക്ഹോൾഡർമാർക്ക് ഈ നിക്ഷേപം ന്യായീകരിക്കാൻ പ്രയാസമായിരിക്കും.
- മാറ്റത്തോടുള്ള പ്രതിരോധം: ചില ഡെവലപ്പർമാർ റീഫാക്ടറിംഗിനോട് പ്രതിരോധം കാണിച്ചേക്കാം, പ്രത്യേകിച്ചും അവർ ഉൾപ്പെട്ടിട്ടുള്ള ടെക്നിക്കുകളുമായി പരിചയമില്ലെങ്കിൽ.
മികച്ച രീതികൾ
ലെഗസി കോഡ് റീഫാക്ടർ ചെയ്യുന്നതുമായി ബന്ധപ്പെട്ട വെല്ലുവിളികളും അപകടസാധ്യതകളും ലഘൂകരിക്കുന്നതിന്, ഈ മികച്ച രീതികൾ പിന്തുടരുക:
- അംഗീകാരം നേടുക: സ്റ്റേക്ക്ഹോൾഡർമാർ റീഫാക്ടറിംഗിൻ്റെ പ്രയോജനങ്ങൾ മനസ്സിലാക്കുകയും ആവശ്യമായ സമയവും വിഭവങ്ങളും നിക്ഷേപിക്കാൻ തയ്യാറാകുകയും ചെയ്യുന്നുവെന്ന് ഉറപ്പാക്കുക.
- ചെറുതായി തുടങ്ങുക: കോഡിൻ്റെ ചെറിയ, ഒറ്റപ്പെട്ട ഭാഗങ്ങൾ റീഫാക്ടർ ചെയ്തുകൊണ്ട് ആരംഭിക്കുക. ഇത് ആത്മവിശ്വാസം വളർത്താനും റീഫാക്ടറിംഗിൻ്റെ മൂല്യം പ്രകടിപ്പിക്കാനും സഹായിക്കും.
- ഘട്ടം ഘട്ടമായി റീഫാക്ടർ ചെയ്യുക: ചെറിയ, ഘട്ടം ഘട്ടമായുള്ള മാറ്റങ്ങൾ വരുത്തുകയും പതിവായി ടെസ്റ്റ് ചെയ്യുകയും ചെയ്യുക. ഇത് ഉണ്ടാകുന്ന ഏതെങ്കിലും പിശകുകൾ കണ്ടെത്താനും പരിഹരിക്കാനും എളുപ്പമാക്കും.
- ടെസ്റ്റുകൾ ഓട്ടോമേറ്റ് ചെയ്യുക: റീഫാക്ടറിംഗിന് മുമ്പും ശേഷവും കോഡിൻ്റെ പെരുമാറ്റം പരിശോധിക്കുന്നതിന് സമഗ്രമായ ഓട്ടോമേറ്റഡ് ടെസ്റ്റുകൾ എഴുതുക.
- റീഫാക്ടറിംഗ് ടൂളുകൾ ഉപയോഗിക്കുക: ആവർത്തന ജോലികൾ ഓട്ടോമേറ്റ് ചെയ്യുന്നതിനും മികച്ച രീതികളിൽ മാർഗ്ഗനിർദ്ദേശം നൽകുന്നതിനും നിങ്ങളുടെ IDE-യിലോ മറ്റ് ടൂളുകളിലോ ലഭ്യമായ റീഫാക്ടറിംഗ് ടൂളുകൾ പ്രയോജനപ്പെടുത്തുക.
- നിങ്ങളുടെ മാറ്റങ്ങൾ രേഖപ്പെടുത്തുക: റീഫാക്ടറിംഗ് സമയത്ത് നിങ്ങൾ വരുത്തുന്ന മാറ്റങ്ങൾ രേഖപ്പെടുത്തുക. ഇത് മറ്റ് ഡെവലപ്പർമാർക്ക് കോഡ് മനസ്സിലാക്കാനും ഭാവിയിൽ റിഗ്രഷനുകൾ ഉണ്ടാകുന്നത് ഒഴിവാക്കാനും സഹായിക്കും.
- തുടർച്ചയായ റീഫാക്ടറിംഗ്: റീഫാക്ടറിംഗിനെ ഒറ്റത്തവണയുള്ള ഒരു സംഭവമായി കാണാതെ, വികസന പ്രക്രിയയുടെ തുടർച്ചയായ ഒരു ഭാഗമാക്കുക. ഇത് കോഡ്ബേസ് വൃത്തിയും പരിപാലിക്കാൻ എളുപ്പമുള്ളതുമായി നിലനിർത്താൻ സഹായിക്കും.
ഉപസംഹാരം
ലെഗസി കോഡ് റീഫാക്ടർ ചെയ്യുന്നത് വെല്ലുവിളി നിറഞ്ഞതും എന്നാൽ പ്രതിഫലദായകവുമായ ഒരു ഉദ്യമമാണ്. ഈ ഗൈഡിൽ പ്രതിപാദിച്ചിട്ടുള്ള തന്ത്രങ്ങളും മികച്ച രീതികളും പിന്തുടരുന്നതിലൂടെ, നിങ്ങൾക്ക് ഈ ഭീമനെ മെരുക്കാനും നിങ്ങളുടെ ലെഗസി സിസ്റ്റങ്ങളെ പരിപാലിക്കാൻ കഴിയുന്നതും വിശ്വസനീയവും ഉയർന്ന പ്രകടനം കാഴ്ചവെക്കുന്നതുമായ ആസ്തികളാക്കി മാറ്റാനും കഴിയും. റീഫാക്ടറിംഗിനെ ചിട്ടയായി സമീപിക്കാനും പതിവായി ടെസ്റ്റ് ചെയ്യാനും നിങ്ങളുടെ ടീമുമായി ഫലപ്രദമായി ആശയവിനിമയം നടത്താനും ഓർമ്മിക്കുക. ശ്രദ്ധാപൂർവ്വമായ ആസൂത്രണത്തിലൂടെയും നിർവ്വഹണത്തിലൂടെയും, നിങ്ങളുടെ ലെഗസി കോഡിനുള്ളിലെ ഒളിഞ്ഞിരിക്കുന്ന സാധ്യതകൾ തുറക്കാനും ഭാവിയിലെ നവീകരണത്തിന് വഴിയൊരുക്കാനും നിങ്ങൾക്ക് കഴിയും.