শুধু কিছু if … else conditional statement দিয়ে লাইনের পর লাইন কোড লিখতে পারার মানে এই নয় যে। আপনি ভাল প্রোগ্রামার। ভাল প্রোগামার হতে হলে কোড কোয়ালিটি মেইনটেইন করাও অনেক গুরুত্বপূর্ণ বিষয়। ভাল ডিজাইন প্যাটার্নে করা প্রোগ্রামিং কোডের কোয়ালিটিই আলাদা।
.
Wikipedia এর মতে “In software engineering, a design pattern is a general reusable solution to a commonly occurring problem within a given context in software design”
.
ভাল Design Pattern-এর অন্যতম বৈশিষ্ট্য, এটি হবে language independent. অর্থাৎ আপনি কোন Pattern Design করলেন তবে আপনি PHP প্রোগ্রামার হন, বা C++ বা C# বা Java যে ল্যাঙ্গুয়েজেই কোড লিখেন না কেন। কিছু ক্ষেত্র বাদে আপনার ডিজাইন করা প্যাটার্ন সবার সাথেই ইমপ্লিমেন্ট করা যাবে।
.
সহজ ভাষায়, Software Design Pattern হল আপনার প্রোগ্রামিং এর সমস্যার reusable অংশ গুলো চিহ্নিত করে ছোট ছোট ব্লকে ভাগ করে নেয়া, যখন যেটা প্রয়োজন তখন সেটা ব্যবহার করা।
.
আপনি প্রতিদিন ঘুমান, রান্না-বান্না করেন, খাওয়া-দাওয়া করেন আর টয়লেট করেন। এটা আপনার প্রতিদিনের reusable কাজ।
.
এখন আপনি যদি আপনার বাড়িকে সুবিশাল একটা হল রুম বানিয়ে সেখানেই থাকা শুরু করেন, মানে এক রুমেই রান্না-বান্না করেন, এক রুমেই ঘুমান, খাওয়া-দাওয়াও সেই রুমেই ... আবার টয়লেটও সেখানেই করেন। তাহলে কোন সমস্যা নেই।
.
অথবা যদি বাড়িটা ছোট ছোট ব্লকে ভাগ করে নেন। মানে এক ব্লক আপনার কিচেন, এক ব্লক আপনার বেড রুম। অন্য একটা ব্লকে ডাইনি। আর একটা ব্লক বাথরুম বা টয়লেট। তাহলে সেটা ভাল হবে না প্রথমটা?
.
আমি যদি আপনাকে নির্দেশ দেই, যাও ভাত রান্না কর। তবে বড় হল রুমের ক্ষেত্রে কি হবে? আপনি পুরো রুম জুড়ে আতিপাতি করে খুঁজবেন চুলা কই, রান্নার হাড়িটা বা কই, চাল কোথায় রাখা আছে? চামচ রাখা কোথায়? পানি কই পাব ইত্যাদি ইত্যাদি।
.
আর যদি দ্বিতীয় ক্ষেত্রে একই নির্দেশ দেই। তবে আপনি সোজা রান্না ঘরে চলে যাবেন। কারণ আপনি জানেন ভাত রান্নার প্রয়োজনীয় সব উপকরণ আপনি সেখানেই সাজানো-গোছানো পাবেন।
.
ভাত হয়তো দুই ক্ষেত্রেই রান্না হবে। কিনতু পারফরমেন্স কোন ক্ষেত্রে ফাস্ট এন্ড বেস্ট হবে সেটাতো বুঝাই যাচ্ছে, তাই না ? এটাই হল Pattern Design এর মহাত্ম। একটা বাড়ির কোথায় কি হবে তা যেমন নির্ধারণ করেন একজন Building Architect, ঠিক তেমনি Pattern Design হল Software Architect দের হাতিয়ার।
.
আবার বড় হলের ক্ষেত্রে যদি এমন হয় আপনার গোসল করার শাওয়ার লিক করেছে। তবে দেখা যাবে পানি পুরো হলে ছড়িয়ে পড়েছে। আপনাকে শাওয়ার মেরামত করলেই শুধু হবে না সেই সাথে পুরো রুমে ছড়িয়ে পড়া পানি ড্রেনেজও করা লাগবে। আর দ্বিতীয় ক্ষেত্রে আপনাকে শুধু বাথরুমে গিয়ে শাওয়ার মেইন্টেইন করাই এনাফ। কারণ পানি ড্রেনেজের সিস্টেম সেখানে আগে থেকেই করা আছে।
.
আবার যদি এমন হয় আমি আপনাকে নির্দেশ দিলাম। যাও চা রান্না কর। আপনি নিয়ে আসলেন ভাত। আমি বললাম যাও পোলাও রান্না কর। আপনি নিয়ে আসলেন ডিম ভাজি। তখন আমি কি বুঝব? আমি এটাই বুঝব যে, রান্না ঘরে কোন গোলমাল আছে। তাই আমি সমস্যা সমাধানে কিচেনে যাব নাকি বাথরুম বা ডায়নিং রুমে যাব? অবশ্যই কিচেনে তাই না?
.
কিনতু একই সমস্যা যদি সেই বড় হল রুমে ক্ষেত্রে হোত তবে? তখন পুরো হল রুমে আমার স্পাই গিরি করা লাগত তাই নয় কি? যা সময় সাপেক্ষ হোত বেশি কেননা আমি জানতাম না ঠিক কোন জায়গায় সমস্যা।
.
ঠিক সেই রকম Software Pattern Design এর ক্ষেত্রে কোন কোড ব্লকে সমস্যা বা Bug দেখা দিলে শুধু সেই ব্লকে Fix করলেই কাজ শেষ। পুরো সিস্টেম নিয়ে ভাবতে হবে না।
.
আমি কোন কোড ব্লকের কোন ক্লাশ বা ফাংশনে প্রয়োজনীয় আরগুমেন্ট দিলাম কিনতু আউটপুট আসল আনেক্সেপ্টেড। তখন আমি সহজেই বুঝতে পারব যে, কোড ব্লকের সেই জায়গায় সমস্যা আছে। পুরো কোড স্ক্রিপ্টের হাজার হাজার লাইন আমাকে ইনভেস্টিগেট করে সময় নষ্ট করতে হবে না। এভাবে বাগ ফিক্সিং এর কাজও সহজ করে দেয় SDP
.
এভাবেই Software Pattern Design আপনার জটিল কাজ গুলোকে সহজ করে দেয়। সেই সাথে encapsulation ও ভাল SDP এর বৈশিষ্ট্য। আমি আপনাকে নির্দেশ দেব যাও ভাত রান্না কর। আপনি রান্না ঘরে গিয়ে রান্না করে নিয়ে আসবেন। আপনি কিভাবে রান্না করে আনলেন সেটা আমার ভাবনার বিষয় নয়। কারণ আমি আগেই ভাত রান্নার সব উপকরণ রান্না ঘরে সিস্টেম করে সাজিয়ে রেখেছি। এখন আমি শুধু নির্দেশ দেব আর আপনি কাজ করবেন। এটাই encapsulation 😀 ...
.
1994 সালে Erich, Richard, Ralph ও John মিলে একটি বই লিখেন যার নাম ছিল ... Design Patterns - Elements of Reusable Object-Oriented Software. এই চারজনকে একসাথে বলা হয় Gang of Four বা সংক্ষেপে GoF ... GoF pattern এর শ্রেণী ভাগ গুলো হল, Creational, Structural ও Behavioral. রয়েছে বিভিন্ন রকমের SPD যেমনঃ Facade, Bridge, Adapter ইত্যাদি।
.
থীমফরেস্টে Kriesi এর থীমগুলো খুব বেশি সেল হয় তাই না। অথবা Total, Impreza, Brroklyn, Kleo থীম গুলোর সেল অনেক বেশি। এক একটার ইনকাম কোটি টাকারও উপরে তাই না? শুধুই কি ডিজাইন আর মার্কেটিংই সব? না আসলে এদের কোড কোয়ালিটিও এ প্লাস গ্রেড।
.
থীমফরেস্টের WPExplorer থীমগুলো দেখেন ডিজাইনের দিক দিয়ে খুবই সাদামাটা। কিনতু সেল ভলিউমও কি সাদামাটা? WPExplorer এর AJ এর যে ওয়ার্ল্ড ক্লাস কোড কোয়ালিটি কিনতু একজন অথর হিসেবে তার সাফল্যের অনেক বড় কারণ, AJ এর থীম গুলোর পারফরম্যান্সই আলাদা। এজন্যই সিরিয়াস বায়াররা যাদের ওয়েব ডেভেলপিং জ্ঞান খুব ভাল, থীম কেনার ক্ষেত্রে এদের গুরুত্ব দেয় বেশি।
.
তাই আপনি যদি ভাল আইটেম ডেভেলপ করতে চান, WP Plugin Developer বা Theme Developer হোন বা হোন Android বা iOS Apps Developer. আপনার প্রোগ্রামিং জ্ঞানকে নেক্সট লেভেলে নিয়ে যেতে ডিজাইন প্যাটার্ন নিয়ে পড়াশোনা করুন। দেখবেন আপনার কাজ গুলো কত সোজা হয়ে যাচ্ছে। সেই সাথে বেড়ে যাচ্ছে কোড কোয়ালিটি ও সফটওয়্যার পারফরমেন্স।
.
আরেকটি কথা না বললেই নয় ডিজাইন প্যাটার্ন একটু এডভান্সড টার্ম। তাই শুরুতে বেশ কঠিন লাগতে পারে। সেই সাথে এটা এক বা দু'রাতে শিখে ফেলার জিনিস নয়। সময় সাপেক্ষ। বড় ধরণের প্রজেক্টে ডিজাইন প্যাটার্ন যে কত ফল প্রসূ তা বলার অপেক্ষা রাখে না। কাজ অনেক অনেক সহজ হয়ে যায়। কাজের জটিলতা অনেক কমে যায়।
ডিজাইন প্যাটার্ন নিয়ে যাদের কোন পড়াশোনা নেই। PHP এর বেসিক লেভেল পার হয়ে Advanced লেভেলে আছেন। থীমফরেস্টে আরও ভাল করতে চান তারা চাইলে ঢু মেরে আসতে পারেন নিচের লিঙ্কে।
.
TutsPlus এর এই টিউটোরিয়ালে PHP তে ব্যবহৃত ৭ ধরণের Design Pattern নিয়ে খুবই সুন্দর ভাবে আলোচনা করা হয়েছে। আপনার প্রোগ্রামিং জ্ঞানকে আরও ধারাল করুন। নিয়ে যান নেক্সট লেভেলে ...
টিউটোরিয়াল লিঙ্কঃ http://tiny.cc/qjk5zx
পূর্বে প্রকাশিতঃ http://tiny.cc/ovk5zx
আমি সুমন। বিশ্বের সর্ববৃহৎ বিজ্ঞান ও প্রযুক্তির সৌশল নেটওয়ার্ক - টেকটিউনস এ আমি 14 বছর 9 মাস যাবৎ যুক্ত আছি। টেকটিউনস আমি এ পর্যন্ত 2 টি টিউন ও 89 টি টিউমেন্ট করেছি। টেকটিউনসে আমার 0 ফলোয়ার আছে এবং আমি টেকটিউনসে 0 টিউনারকে ফলো করি।
সুন্দর টিউন। ধন্যবাদ আপনাকে।