𝗟𝗟𝗗 𝗗𝗲𝘀𝗶𝗴𝗻 𝗣𝗿𝗼𝗰𝗲𝘀𝘀 (𝗙𝗿𝗼𝗺 𝗥𝗲𝗾𝘂𝗶𝗿𝗲𝗺𝗲𝗻𝘁𝘀 𝘁𝗼 𝗖𝗼𝗱𝗲)

ലോ ലെവൽ ഡിസൈൻ (Low Level Design) എന്നാൽ ഉടൻ തന്നെ കോഡ് എഴുതുക എന്നതല്ല. മറിച്ച്, ഒരു ഘടനാപരമായ പ്രക്രിയ പിന്തുടരുക എന്നതാണ്.

ഒരു പ്രശ്നത്തിൽ (problem statement) നിന്ന് പ്രവർത്തിക്കുന്ന കോഡിലേക്ക് മാറാൻ ഈ ഘട്ടങ്ങൾ പിന്തുടരുക.

  1. ആവശ്യകതകൾ മനസ്സിലാക്കുക (Understand the Requirements) നേരിട്ട് ക്ലാസുകളിലേക്ക് (classes) കടക്കരുത്. ആദ്യം, സിസ്റ്റം എന്താണ് ചെയ്യേണ്ടതെന്ന് കണ്ടെത്തുക.
  • ഇതിന് എന്തൊക്കെ ഫീച്ചറുകൾ ആവശ്യമാണ്?
  • ഇതിന് എന്തൊക്കെ പ്രവർത്തനങ്ങൾ (actions) പിന്തുണയ്ക്കണം?
  • പിന്നീട് എന്തൊക്കെ മാറ്റങ്ങൾ വന്നേക്കാം?
  1. ക്ലാസുകൾ കണ്ടെത്താൻ നാമങ്ങൾ (Nouns) തിരിച്ചറിയുക നിങ്ങളുടെ ആവശ്യകതകളിൽ നാമങ്ങൾക്കായി തിരയുക. നാമങ്ങളാണ് നിങ്ങളുടെ ക്ലാസുകളായി മാറുന്നത്. ഉദാഹരണം: ഒരു Document Editor
  • നാമങ്ങൾ: Document, Text, Image, Storage, Editor.
  • ക്ലാസുകൾ: Document, TextElement, ImageElement, Storage, DocumentEditor.

ഉദാഹരണം: ഒരു Parking Lot

  • നാമങ്ങൾ: ParkingLot, Floor, Slot, Vehicle, Ticket.
  • ക്ലാസുകൾ: ParkingLot, Floor, Slot, Vehicle, Ticket.
  1. ഇൻഹെറിറ്റൻസിനായി (Inheritance) IS-A ഉപയോഗിക്കുക സ്വയം ചോദിക്കുക: "ചൈൽഡ് ഒരു പേരന്റ് ടൈപ്പ് ആണോ?"
  • TextElement എന്നത് ഒരു DocumentElement ആണ് (IS-A).
  • Car എന്നത് ഒരു Vehicle ആണ് (IS-A).
  • Dog എന്നത് ഒരു Animal ആണ് (IS-A). ഉത്തരം 'അതെ' എന്നാണെങ്കിൽ, ഇൻഹെറിറ്റൻസ് ഉപയോഗിക്കുക.
  1. കോമ്പോസിഷനായി (Composition) HAS-A ഉപയോഗിക്കുക സ്വയം ചോദിക്കുക: "ഒരു ഒബ്‌ജക്റ്റ് മറ്റൊരു ഒബ്‌ജക്റ്റിനെ ഉൾക്കൊള്ളുന്നുണ്ടോ?"
  • ഒരു Document-ൽ എലമെന്റുകളുടെ ഒരു ശേഖരം (collection) ഉണ്ട് (HAS-A).
  • ഒരു ParkingLot-ൽ ഫ്ലോറുകളുടെ ഒരു കൂട്ടം ഉണ്ട് (HAS-A).
  • ഒരു Car-ന് ഒരു എൻജിൻ ഉണ്ട് (HAS-A). ഈ ഒബ്‌ജക്റ്റുകളെ ബന്ധിപ്പിക്കാൻ കോമ്പോസിഷൻ ഉപയോഗിക്കുക.
  1. മെത്തേഡുകൾ കണ്ടെത്താൻ ക്രിയകൾ (Verbs) തിരിച്ചറിയുക ആവശ്യകതകളിലെ പ്രവർത്തനങ്ങൾക്കായി തിരയുക. ക്രിയകളാണ് നിങ്ങളുടെ മെത്തേഡുകളായി മാറുന്നത്.
  • Add text എന്നത് addText() ആയി മാറുന്നു.
  • Save document എന്നത് save() ആയി മാറുന്നു.
  • Park vehicle എന്നത് parkVehicle() ആയി മാറുന്നു.
  1. ഇന്റർഫേസുകൾ (Interfaces) ഉപയോഗിച്ച് മാറ്റങ്ങൾക്കായി പ്ലാൻ ചെയ്യുക ഭാവിയിലെ അപ്‌ഡേറ്റുകളെക്കുറിച്ച് ചിന്തിക്കുക. നിങ്ങൾ ഒരു ഡോക്യുമെന്റ് സേവ് ചെയ്യുമ്പോൾ, ഒരു File, ഒരു Database അല്ലെങ്കിൽ Cloud എന്നിവ ഉപയോഗിച്ചേക്കാം.
  • Persistence എന്ന പേരിൽ ഒരു ഇന്റർഫേസ് നിർമ്മിക്കുക.
  • FileStorage അല്ലെങ്കിൽ DBStorage പോലുള്ള ഇംപ്ലിമെന്റേഷനുകൾ നിർമ്മിക്കുക. ഇത് നിലവിലുള്ള കോഡ് മാറ്റാതെ തന്നെ പിന്നീട് CloudStorage ചേർക്കാൻ നിങ്ങളെ അനുവദിക്കുന്നു.
  1. UML വരയ്ക്കുക, കോഡ് എഴുതുക ക്ലാസുകൾ, ഇൻഹെറിറ്റൻസ്, കോമ്പോസിഷൻ, മെത്തേഡുകൾ എന്നിവ തയ്യാറായ ശേഷം ഒരു UML ഡയഗ്രം വരയ്ക്കുക. ഇത് നിങ്ങളുടെ ബ്ലൂപ്രിന്റ് (blueprint) ആയി പ്രവർത്തിക്കുന്നു. ഒടുവിൽ, ആ ബ്ലൂപ്രിന്റിനെ ക്ലീൻ കോഡിലേക്ക് മാറ്റുക.

Summary Flow:

  • ആവശ്യകതകൾ (Requirements)
  • നാമങ്ങളിൽ നിന്ന് ക്ലാസുകളിലേക്ക് (Nouns to Classes)
  • IS-A ഉപയോഗിച്ച് ഇൻഹെറിറ്റൻസ് (IS-A to Inheritance)
  • HAS-A ഉപയോഗിച്ച് കോമ്പോസിഷൻ (HAS-A to Composition)
  • ക്രിയകളിൽ നിന്ന് മെത്തേഡുകളിലേക്ക് (Verbs to Methods)
  • മാറ്റങ്ങൾക്കായി ഇന്റർഫേസുകൾ (Variations to Interfaces)
  • UML ഡയഗ്രം (UML Diagram)
  • അവസാന കോഡ് (Final Code)

Source: https://dev.to/roshan_singh_dd54d52bbaa7/lld-design-process-from-requirements-to-code-594m