LLD ডিজাইন প্রক্রিয়া (প্রয়োজনীয়তা থেকে কোড পর্যন্ত)
Low Level Design মানেই সাথে সাথে কোড লেখা নয়। এটি একটি সুসংগঠিত প্রক্রিয়া অনুসরণ করার বিষয়।
একটি সমস্যা (problem statement) থেকে কার্যকরী কোডে পৌঁছানোর জন্য এই ধাপগুলো অনুসরণ করুন।
১. প্রয়োজনীয়তা (Requirements) বুঝুন সরাসরি ক্লাসে চলে যাবেন না। প্রথমে খুঁজে বের করুন সিস্টেমটিকে কী করতে হবে।
- এর কী কী ফিচার প্রয়োজন?
- এটি কোন কোন অ্যাকশন সাপোর্ট করতে হবে?
- পরবর্তীতে কী কী পরিবর্তন আসতে পারে?
২. ক্লাস খুঁজে পেতে বিশেষ্য (Nouns) চিহ্নিত করুন আপনার প্রয়োজনীয়তার মধ্যে বিশেষ্যগুলো খুঁজুন। এই বিশেষ্যগুলোই হবে আপনার ক্লাস। উদাহরণ: একটি ডকুমেন্ট এডিটর (Document Editor)
- বিশেষ্য (Nouns): Document, Text, Image, Storage, Editor।
- ক্লাস (Classes): Document, TextElement, ImageElement, Storage, DocumentEditor।
উদাহরণ: একটি পার্কিং লট (Parking Lot)
- বিশেষ্য (Nouns): ParkingLot, Floor, Slot, Vehicle, Ticket।
- ক্লাস (Classes): ParkingLot, Floor, Slot, Vehicle, Ticket।
৩. ইনহেরিট্যান্সের (Inheritance) জন্য IS-A ব্যবহার করুন নিজেকে প্রশ্ন করুন: "চাইল্ড কি প্যারেন্টের একটি ধরন?"
- TextElement IS-A DocumentElement।
- Car IS-A Vehicle।
- Dog IS-A Animal। উত্তর যদি 'হ্যাঁ' হয়, তবে ইনহেরিট্যান্স ব্যবহার করুন।
৪. কম্পোজিশনের (Composition) জন্য HAS-A ব্যবহার করুন নিজেকে প্রশ্ন করুন: "একটি অবজেক্ট কি অন্য একটিকে ধারণ করে?"
- একটি Document-এর অনেকগুলো element থাকে (HAS-A collection of elements)।
- একটি ParkingLot-এ অনেকগুলো floor থাকে (HAS-A set of floors)।
- একটি Car-এর একটি engine থাকে (HAS-A engine)। এই অবজেক্টগুলোকে যুক্ত করতে কম্পোজিশন ব্যবহার করুন।
৫. মেথড (Methods) খুঁজে পেতে ক্রিয়া (Verbs) চিহ্নিত করুন প্রয়োজনীয়তার মধ্যে কাজ বা অ্যাকশনগুলো খুঁজুন। এই ক্রিয়াগুলোই হবে আপনার মেথড।
- Add text হয়ে যাবে addText()।
- Save document হয়ে যাবে save()।
- Park vehicle হয়ে যাবে parkVehicle()।
৬. ইন্টারফেসের (Interfaces) মাধ্যমে পরিবর্তনের পরিকল্পনা করুন ভবিষ্যতের আপডেটের কথা ভাবুন। আপনি যদি একটি ডকুমেন্ট সেভ করেন, তবে আপনি File, Database অথবা Cloud ব্যবহার করতে পারেন।
- Persistence নামে একটি ইন্টারফেস তৈরি করুন।
- FileStorage বা DBStorage-এর মতো ইমপ্লিমেন্টেশন তৈরি করুন। এটি আপনাকে বিদ্যমান কোড পরিবর্তন না করেই পরবর্তীতে CloudStorage যোগ করার সুবিধা দেবে।
৭. UML আঁকুন এবং কোড লিখুন যখন আপনার কাছে ক্লাস, ইনহেরিট্যান্স, কম্পোজিশন এবং মেথড থাকবে, তখন একটি UML ডায়াগ্রাম আঁকুন। এটি আপনার ব্লুপ্রিন্ট হিসেবে কাজ করবে। সবশেষে, সেই ব্লুপ্রিন্টটিকে ক্লিন কোডে রূপান্তর করুন।
সারসংক্ষেপ প্রবাহ (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