ডিজাইন প্যাটার্ন — সফটওয়্যার ডেভলপমেন্টের সমস্যা সমাধানের ভাষা

যারা আর্কিটেকচার নিয়ে পড়াশোনা করেন তারা খুব ভালো করেই জানেন ডিজাইন প্যাটার্ন জিনিসটা কি। প্রায় ৬ বছরের মত থ্রিডি কম্পিউটার গ্রাফিক্স, এনিমেশন ও ভিএফএক্স এ কাজ করার সুবাদে মোটামুটি ভালোই আর্কিটেকচার নিয়ে কাজ করার সুযোগ হয়েছে আমার। সেই অভিজ্ঞতা থেকেই কিছু শেয়ার করি। ভয় নেই, এটা বাড়ি ঘরের আর্কিটেকচারের কোন পোস্ট নয়, এটা সফটওয়্যার আর্কিটেকচার নিয়ে পোস্ট।

ডিজাইন প্যাটার্নের ইতিহাস

১৯৭০ এর দশকে অসাধারণ সব বাড়ি ঘর তৈরি হচ্ছিলো আর্কিটেক্টদের হাত ধরে। কিন্ত সমস্যা হলো একেকজন আর্কিটেক্ট একেকরকম ডিজাইন এ বাড়ি করছিলেন। যদিও এতে নতুনত্ব আসছিলো, কিন্ত একটা কমন স্ট্যান্ডার্ড বলে কিছু ছিল না। তাই একজন আর্কিটেক্ট, আরেকজন আর্কিটেক্ট এর ডিজাইন দেখলে বুঝতে পারতো না যে কিভাবে করে ডিজাইনটি করা হয়েছে। আর তাছাড়া বাড়ি-ঘরের ডিজাইন করতে গেলে যত সমস্যা উদ্ভব হতো সেগুলির সমাধান এতটা প্রচলিত ছিলো না বিধায় প্রতিটা সমস্যারই নতুন করে সমাধান করতে হতো। যার ফলে ডিজাইন এর স্ট্যান্ডার্ড একটা মান বজায় থাকতো না। আমরা বৃটিশ বাড়ি ঘর দেখলেই বুঝে যাই যে এটা বৃটিশ স্টাইলের, কারণ বাড়িটি হয়তো বৃটিশ আর্কিটেকচার ডিজাইন প্যাটার্ন ব্যবহার করেছে। এটাই স্ট্যান্ডার্ড মান তৈরি করে।

এই সমস্যা থেকে মুক্তি দেবার জন্য ১৯৭৭ সালে বিখ্যাত আর্কিটেক্ট Christopher Alexander “ডিজাইন প্যাটার্ন” নামে একটি তত্বের সুত্রপাত ঘটান। তার একটা বইও আছে এই নিয়ে “A Pattern: Towns, Buildings, Construction (1977)”

ডিজাইন প্যাটার্ন হলোঃ ডিজাইনের মাঝে উদ্ভব হওয়া কোন সাধারণ ধরনের সমস্যার জন্য এমন কিছু সমাধান যেগুলি বারবার ব্যবহারযোগ্য এবং সকল ডিজাইনারদের মাঝে স্ট্যান্ডার্ড

আপনি কি খেয়াল করেছেন, কোন নির্দিষ্ট একটা ঘর-বাড়ি প্রাসাদের সবগুলি কলাম বা পিলার দেখতে একই রকম? আপনি কি আরো খেয়াল করেছেন, একটা নির্দিষ্ট ডিজাইনের প্রাসাদে একই রকম দরজা-জানালা ব্যবহার করা হয়েছে?

নিশ্চয় খেয়াল করেছেন এগুলি। কারণ এগুলির কারণে প্রাসাদ বা বাড়ি-ঘরের ডিজাইনে একটা স্ট্যান্ডার্ড মান আসে এবং দেখতেও সুন্দর দেখায়। কিন্ত আর্কিটেক্টরা শুধুই সুন্দর দেখার জন্য এভাবে করে ডিজাইন করেন না। তারা এগুলি এমনভাবে ডিজাইন করেন যাতে করে আর্কিটেকচারের বিভিন্ন সমস্যার সমাধান করা যায়। বিষয়টা কমপ্লেক্স হলেও সহজ।

ধরুন একজন আর্কিটেক্ট চাইলেন একটা মধ্যযুগীয় ধরনের প্রাসাদ বানাতে। প্রাসাদটা দেখতে মধ্যযুগীয় করতে চাইলে তাকে অবশ্যই মধ্যযুগীয় ডিজাইন প্যাটার্ন ব্যবহার করে ডিজাইন করতে হবে। কারণ এই ডিজাইন প্যাটার্নগুলি এতটাই স্ট্যান্ডার্ড যে তা মানুষ দেখেই বুঝবে যে এটা নির্ঘাত মধ্যযুগীয় ডিজাইনের প্রাসাদ।

বিভিন্ন আর্কিটেক্টরা বিভিন্ন ধরনের ডিজাইন প্যাটার্ন বানিয়ে গেছেন। যেমনঃ কলাম বা পিলারের জন্য আছে বিভিন্ন ডিজাইন প্যাটার্ন।

সফটওয়্যার ডেভলপমেন্টে ডিজাইন প্যাটার্ন

এ তো গেলো বাড়ি ঘর রাজ প্রাসাদের ডিজাইন প্যাটার্ন। এগুলি নিয়ে কথা বলার উদ্দেশ্য একটাই, ডিজাইন প্যাটার্ন জিনিসটা সফটওয়্যার ইঞ্জিনিয়ারদের মাঝে তৈরি হওয়া কিছু নয়, এটি এসেছে বাড়ি-ঘরের আর্কিটেক্টদের কাছ থেকে। তাই আমি বাড়ি-ঘরের আর্কিটেকচার এর উদাহরণ দিয়েই ডিজাইন প্যাটার্ন বুঝালাম, এখন এই কনসেপ্টগুলিকে ডেভলপমেন্টের ভাষায় বলি আসুন।

যেকোন কিছু ইঞ্জিনিয়ারিং করার মানে হলো সায়েন্টিফিক মেথডের মাধ্যমে আস্তে আস্তে ডেভলপমেন্ট করা। তাই বলা হয়ে থাকে, ইঞ্জিনিয়াররা কোন কিছু তৈরি করেন না, তারা ডেভলপ করেন।

কথাটা সত্যি। সফটওয়্যার ইঞ্জিনিয়াররাও বাড়ি ঘরের আর্কিটেক্ট আর ইঞ্জিনিয়ারদের মতোই ডেভলপ করেন। সফটওয়্যার ডেভলপ করতে গিয়ে দেখা গেলো অনেক অনেক ধরনের সমস্যা তৈরি হয়, যেই সমস্যা গুলি হয়তো অনেক আগেই কেউ সমাধান করে গেছেন। তাই কি দরকার সমস্যা গুলির আবার নতুন সমাধান করা? Why reinventing the wheel?

সফটওয়্যার ডিজাইন ও ডেভলপমেন্ট করতে গিয়ে যেসকল সমস্যা তৈরি হয় সেগুলির একটা স্ট্যান্ডার্ড সমাধান করা আছে হয়তো আগেই, এগুলিকে ব্যবহার করাই উত্তম। এতে করে সফটওয়্যার ডিজাইনে একটা স্ট্যান্ডার্ড মান বজায় থাকে।

ডিজাইন প্যাটার্ন সফটওয়্যার ডেভলপমেন্ট এর সমস্যা সমাধানের ভাষা। একটা স্ট্যান্ডার্ড ভাষা। কোডিং এর খুব বড় একটা সমস্যা হলো, একজন ডেভলপারের কোড আরেকজন সহজে বুঝতে পারে না। কারণ একেকজন একেকরকম ভাবে সমস্যা সমাধান করতে চায়। এ থেকে মুক্তি পাবার জন্য সফটওয়্যার ডিজাইন প্যাটার্ন এর সুত্রপাত। আপনার কোডে কোথায় কি ব্যবহার করেছেন কিভাবে করেছেন তা লাইন বাই লাইন অন্য ডেভলপারকে বুঝানোর চেয়ে আপনি যদি তাকে বলেন যে “আমি এখানে MVC ডিজাইন প্যাটার্ন ব্যবহার করেছি” অথবা “আমি এখানে ফ্যাক্টরি ডিজাইন প্যাটার্ন ব্যবহার করেছি” তাহলে তা ডেভলপারদের বুঝতে সহজ হবে। অনেকটা ঐ বাড়ি ঘরের আর্কিটেক্টদের মতই “আমি এখানে মিশরীয় কলাম ডিজাইন প্যাটার্ন ব্যবহার করেছি”। এর ফলে অন্য ডেভলপাররা সহজেই বুঝে যাবে আপনি কিভাবে কি ব্যবহার করেছেন, যদি সে ডিজাইন প্যাটার্ন সম্পর্কে অবগত থাকেন। এতে করে সফটওয়্যার কোডের সৌন্দর্য্যও বৃদ্ধি পায়, একটা স্ট্যান্ডার্ড মান থাকে।

সফটওয়্যার ডেভলপমেন্টে ডিজাইন প্যাটার্ন শুধুই কোডের সৌন্দর্য্য বৃদ্ধির কাজই করে না।

ডিজাইন প্যাটার্ন কেন ব্যবহার করবেন?

১. এটি কোন স্ট্যাপ বাই স্ট্যাপ সল্যুশন না, বরং সমাধানের একটা বর্ণনা বা প্র্যাক্টিস।

২. এটি ডেভলপমেন্ট প্রসেসকে ত্বরাণ্বিত করে, বিভিন্ন সমস্যা সমাধানের জন্য প্রমাণিত সমাধান দেয়।

৩. ডিজাইন প্যাটার্ন ব্যবহার করাটা অন্য অপ্রমাণিত সমাধানের চেয়ে উত্তম, কারণ এতে করে ডেভলপমেন্টে কোনো অদৃশ্য ছিদ্র তৈরি হবে না। যে ছিদ্রগুলি পরে ডেভলপমেন্টকে স্লো করে দিবে হয়তো বাগ খুজতে খুজতেই

৪. ডিজাইন প্যাটার্ন হলো প্রোগ্রামারদের মাঝে কথা বলার ভাষা। লাইন বাই লাইন কোড বুঝার চাইতে ডিজাইন প্যাটার্নের মাধ্যমে কোড বুঝা অনেক সহজ।

ডিজাইন প্যাটার্নের বিভিন্ন ভাষা আছেঃ Creational, Structural, Behavioral, SQL, UI, Distributed ইত্যাদি।

তাহলে আমরা বলতে পারি “ডিজাইন প্যাটার্ন হলো ডিজাইনের মাঝে উদ্ভব হওয়া কোন সাধারণ ধরনের সমস্যার জন্য এমন কিছু সমাধান যেগুলি বারবার ব্যবহারযোগ্য এবং স্ট্যান্ডার্ড”

আজকে খুব সংক্ষেপে ডিজাইন প্যাটার্ন বর্ণনা করলাম। এগুলির জন্য অনেক বিস্তারিত পড়াশোনার দরকার আছে প্রতিটি সফটওয়্যার ডেভলপারের। একজন সফটওয়্যার ডেভলপার মানে অবশ্যই সে ডিজাইন প্যাটার্ন খুব ভালোভাবে জানবে।

পড়তে পারেন এই বইটি (যদিও ট্যাকনিক্যাল কিন্ত খুব জনপ্রিয়) —Design Patterns: Elements of Reusable Object-Oriented Software (1994)

এছাড়াও আপনার পছন্দের ল্যাংগুয়েজের জন্য ডিজাইন প্যাটার্ন নিয়ে বই পাবেন। যেমনঃ আমার পছন্দের ল্যাংগুয়েজ পাইথনের জন্য আছে “Learning Python Design Patterns, Django Design Patterns and Best Practices” ইত্যাদির মত বইগুলি। এছাড়া অনলাইনে বিভিন্ন ফ্রি কোর্স আছে ডিজাইন প্যাটার্ন নিয়ে।

ডিজাইন প্যাটার্ন নিয়ে পড়াশোনা করাটা হবে একজন ভালো সফটওয়্যার ডেভলপার হবার জন্য গুরুত্বপূর্ন স্টেপ।

ভালো থাকবেন। আল্লাহ হাফেজ। জাযাক আল্লাহ।