সফটওয়্যার ডিজাইন প্যাটার্ন-১

সফটওয়্যার ডিজাইন প্যাটার্ন হচ্ছে এক ধরনের সমাধান যা বারবার বিভিন্ন সফটওয়্যার ডিজাইনের ক্ষেত্রে ব্যবহার করা যায়। যদিও এটা কোন সোর্সকোড/কম্পাইল্ড বাইনারি না। এটা মূলত কিভাবে কোন সমস্যার সমাধান কিভাবে করা যায় তার একটা বর্ননা , যা অনেক যায়গায় ব্যবহার করা যায়। ডিজাইন প্যাটার্নগুলো মূলত সফটওয়্যার/সিস্টেম ডিজাইনে প্রচলিত সমস্যাগুলো সমাধানের এক ধরনের স্বীকৃতি পদ্ধতি এবং এদেরকে ‘বেস্ট প্যাকটিস‘ বলা হয়।

এই পোস্টে মূলত পিএইচপি তে বহুল ব্যবহৃত ডিজাইন প্যাটার্ন গুলো নিয়ে আলোচনা করা হয়েচে।

ফ্যাক্টরি প্যাটার্ন

ফ্যাক্টরি প্যাটার্ন একটি বহুল ব্যবহৃত ডিজাইন প্যাটার্ন। এই প্যাটার্নে মূলত একটি ক্লাস ব্যবহারকারীর প্রয়োজনীয় অবজেক্ট তৈরি করে দেয়। নিচের ফ্যাক্টরি প্যাটার্নের একটি উদাহরণ দেওয়া হলঃ

উপরের কোডে একটি ফ্যাক্টরি (ক্লাস) ব্যবহার করা হয়েছে ল্যাপটপ অবজেক্ট তৈরি করার জন্য। ফ্যাক্টরি প্যাটার্ন ব্যবহার করলে বেশ কিছু সুবিদা পাওয়া যায়। মনে করা যায় আপনি আপনার Laptop ক্লাসের নাম পরিবর্তন করে Computer করলেন, এক্ষেত্রে পুরো এপ্লিকেশনে যেসকল যায়গায় আপনি সারাসরি Laptop ক্লাস ব্যবহার করেছেন সবগুলো ক্লাসের নাম পরিবর্তন করতে হবে, কিন্তু যদি আপনি যদি ফ্যাক্টরি প্যাটার্ন ব্যবহার করেন সেক্ষেত্রে শুধুমাত্র ফ্যাক্টরি ক্লাসের ভেতরে Laptop ক্লাসের নাম পরিবর্তন করলেই হবে। ফ্যাক্টরি প্যাটার্ন সর্বদা ব্যবহার করার প্রয়োজন পড়ে না।

factory_method_uml_class_diagram

ফ্যাক্টরি প্যাটার্ন এর আরেকটি পরিমার্জিত রুপ হচ্ছে ফাস্যাড প্যাটার্ন।

সিঙ্গেলটোন প্যাটার্ন

সফটওয়্যার ইঞ্জিনিয়ারিং এ সিঙ্গেলটোন প্যাটার্ন হচ্ছে এমন এক ডিজাইন প্যাটার্ন যা কোন ক্লাস থেকে একাধিক ইন্সট্যান্স তৈরি করতে বাধা দেয়, অর্থাৎ একটি ক্লাসের কেবলমাত্র একটি ইন্সট্যান্স-ই থাকবে।

Singleton Pattern
Fig: Singleton Pattern

সাধারণত ওয়েব অপ্লিকেশন ডিজাইন করার সময় এই ডিজাইন প্যাটার্ন ব্যবহার যুকিযুক্ত মনে হয়। নিচের সিঙ্গেলটোন প্যাটার্নের একটি উদাহরণ দেওয়া হলঃ

উপরের কোডে সিঙ্গেলটোন প্যাটার্ন ইমপ্লিমেন্ট করে দেখানো হয়েছে। স্টাটিক getInstance() মেথড দিয়ে Singleton ক্লাসের ইন্সট্যান্স তৈরি করা হয়েছে। Singleton ক্লাসে setName(), showName() নামের দুইটি মেথড আছে। উপরের কোডের শেষের অংশে SingletonChild নামে একটি ক্লাস লেখা হয়েছে যা Singleton ক্লাসকে এক্সটেন্ড করে। উদাহরণের কোডে দেখতে পাবেন $singleton এ Singleton এর ইন্সট্যান্স রাখা হয়েছে। এরপর setName() মেথড দিয়ে name অবজেক্টে 'Saiful' সেট করা হয়েছে এবং showName() মেথড দিয়ে name অবজেক্টের ভ্যালু দেখানো হয়েছে। এরপর $child এ SingletonChild  ইন্সট্যান্স কল করা হয়েছে, যা মূলত পূর্বে তৈরিকৃত Singleton ক্লাসের ইন্সট্যান্স রিটার্ন করেছে, যে কারনে ( $child->showName();setName() মেথড কল করায় পুর্বে সংরক্ষিত name অবজেক্টের ভ্যালু দেখিয়েছে, অর্থাৎ নতুন ইন্সট্যান্স তৈরি হয়ন

…চলবে

 

 

MySQL JOIN

MySQL এ দুই বা ততোধিক টেবিলের রো একসাথে যুক্ত করতে JOIN ব্যবহার করা হয়। MySQL এ JOIN মোট ৪ প্রকারের।

INNER JOIN

INNER JOIN কীওয়ার্ড দিয়ে দুই বা ততোধিক টেবিলের রো একসাথে যুক্ত করতে হলে বাম ও ডান কলামের মান সমান হতে হয়।

SQL INNER JOIN সিনট্যাক্স

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;

অথবা,

SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;

উদাহরনঃ

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;

LEFT JOIN

LEFT JOIN কীওয়ার্ড দিয়ে দুই বা ততোধিক টেবিলের রো একসাথে যুক্ত করতে হলে বাম কলামের রো এর ডাটার সাথে ডান কলামের রো এর ডাটা তুলনা করা হয় । যেসব স্থানে উভয় কলামের রো এর ডাটা সমান নয় সেসকল ক্ষেত্রে শুধুমাত্র বাম কলামের ডাটা সিলেক্ট করা হয় , আর যেসব স্থানে উভয় কলামের রো এর ডাটা সমান সে ক্ষেত্রে উভয় কলামের রো এর ডাটা সিলেক্ট করা হয়।

SQL LEFT JOIN সিনট্যাক্স


SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;

অথবা,

SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;

উদাহরনঃ

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;

RIGHT JOIN

RIGHT JOIN কীওয়ার্ড দিয়ে দুই বা ততোধিক টেবিলের রো একসাথে যুক্ত করতে হলে বাম কলামের রো এর ডাটার সাথে ডান কলামের রো এর ডাটা তুলনা করা হয় । যেসব স্থানে উভয় কলামের রো এর ডাটা সমান নয় সেসকল ক্ষেত্রে শুধুমাত্র ডান কলামের ডাটা সিলেক্ট করা হয় , আর যেসব স্থানে উভয় কলামের রো এর ডাটা সমান সে ক্ষেত্রে উভয় কলামের রো এর ডাটা সিলেক্ট করা হয়। এটিLEFT JOIN এর বিপরীত।

SQL RIGHT JOIN সিনট্যাক্স

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name;

অথবা,

SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;

উদাহরনঃ

SELECT Orders.OrderID, Employees.FirstName
FROM Orders
RIGHT JOIN Employees
ON Orders.EmployeeID=Employees.EmployeeID
ORDER BY Orders.OrderID;

FULL JOIN

FULL JOIN মুলত LEFT JOIN এবং RIGHT JOIN এর ফলাফল একসাথে যুক্ত করে প্রকাশ করে।

SQL FULL OUTER JOIN সিনট্যাক্স

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;

উদাহরনঃ

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;