এমভিসি (মডেল-ভিউ-কন্ট্রোলার) প্যাটার্ণ

এমভিসি বা মডেল-ভিউ-কন্ট্রোলার খুবই জনপ্রিয় একটি প্যাটার্ন । বিশেষ করে যদি আপনি ওয়েব নিয়ে কাজ করেন তাহলে হয়তো ইতোমধ্যে এমভিসি শব্দটির সাথে পরিচিত হয়েছেন । Trygve Reenskaug নামের এক ভদ্রলোক এই প্যাটার্নটির জনক। ভদ্রলোকের নামের বানানটি যতটা না জটিল, তার আইডিয়াটা ঠিক ততটাই সহজবোধ্য । এমভিসি প্যাটার্নের মূল বক্তব্য হলো এই প্যাটার্নে তিনটি কম্পোনেন্ট থাকবে – একটি মডেল যেটি ডাটা নিয়ে কাজ করবে, একটি ভিউ যেটার কাজ হবে মডেলকে ভিজ্যুয়ালাইজ করা এবং একটি কন্ট্রোলার যেটি ব্যবহারকারী এবং সিস্টেমের মধ্য সমন্বয়কারী হিসেবে কাজ করে । Reenskaug এমভিসি প্যাটার্নের উপর একটি ওয়েব পেইজ মেইনটেইন করেন যেখানে এমভিসি এর উপরে বিশদ বর্ননা পাওয়া যাবে – http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html

আমরা যদি এমভিসি কম্পোনেন্টগুলোর দিকে নজর দেই তাহলে দেখবো –

মডেল: মডেলের কাজই হলো ডাটা নিয়ে কাজ করা । মডেল হতে পারে একটি অবজেক্ট কিংবা অনেকগুলো অবজেক্ট এর একটি স্ট্রাকচার । একটি সিস্টেমের সব ধরণের নলেজ বা ডাটা মডেল দিয়ে রিপ্রেজেন্ট করা যায় । ক্ষেত্রবিশেষে মডেল তার অবস্থা পরিবর্তন হলে (যেমন: কোন ভ্যালুর মান পাল্টে গেলে) কন্ট্রোলার বা ভিউকে নোটিফাই করে যাতে প্রয়োজনীয় প্রসেসিং করা সম্ভব হয় । ওয়েবে সাধারণত এ ধরণের নোটিফিকেশন এর সুযোগ থাকে না ।

ভিউ: ভিউ এর কাজ হচ্ছে মডেলকে ব্যবহারকারীর সামনে তুলে ধরা । সাধারণত ভিউ মডেল থেকে ডাটা নিয়ে সেটাকে ব্যবহারকারীর কাছে সহজবোধ্য রূপে তুলে ধরে ।

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

এই প্যাটার্নটি অনেক ধরণের সফটওয়্যার ডিজাইন করার ক্ষেত্রেই ব্যবহারযোগ্য । ডেস্কটপ, মোবাইল কিংবা ওয়েব এ্যাপ্লিকেশন – সব জায়গাতেই এই প্যাটার্নটি কমবেশী প্রচলিত । তবে অন্যান্য প্ল্যাটফর্মের চাইতে ওয়েবে বোধহয় একটু বেশীই পরিচিত ।

উদাহরণ হিসেবে আমরা যদি একটি সাদামাটা স্ট্যাটিক ওয়েব পেইজের কথা চিন্তা করি তাহলে দেখবো –

# মডেল: এইচটিএমএল এখানে মডেল হিসেবে কাজ করছে । ওয়েব পেইজের সকল তথ্য কিন্তু এইচটিএমএল হিসেবেই থাকছে ।
# ভিউ: এই এইচটিএমএল ট্যাগগুলোকে কিভাবে ব্যবহারকারীর সামনে তুলে ধরতে হবে সেটা নির্দেশ করার জন্য আমরা সিএসএস ব্যবহার করি ।
# কন্ট্রোলার: জাভাস্ক্রীপ্ট ব্যবহার করে আমরা নতুন নতুন এইচটিএমএল যেমন যোগ করতে পারি তেমনি পারি সিএসএস পরিবর্তন করতে ।

তাহলে এখানেও সেই এমভিসি প্যাটার্নের দেখা মিলছে । এবার দেখা যাক একটি ডাইনামিক ওয়েব এ্যাপ্লিকেশন এর ক্ষেত্রে কি হতে পারে । মনে করি একটি ওয়েব এ্যাপ্লিকেশন যেটির কাজ হচ্ছে একটি ক্লাসের স্টুডেন্টদের তালিকা প্রদশর্ন করা । তাহলে –

# মডেল: সকল স্টুডেন্টদের তথ্য । সম্ভবত এই তথ্য একত্রে একটি ডাটাবেইজে সংরক্ষিত থাকবে এবং মডেল ব্যবহার করে আমরা এই তথ্য এ্যাক্সেস করতে পারবো ।
# ভিউ: স্টুডেন্টদের তালিকা যেটি কিনা এইচটিএমএল হিসেবে একটি সুন্দর টেবিলে রোল নম্বরের ক্রমানুযায়ী প্রদর্শিত হবে ।
# কন্ট্রোলার: কন্ট্রোলার জানবে কোন মডেল থেকে স্টুডেন্টদের ডাটা সংগ্রহ করতে হবে, রোল নম্বর অনুযায়ী কিভাবে সাজাতে হবে অতপর কিভাবে এই ডাটা থেকে ব্রাউজারে প্রদর্শনযোগ্য এইচটিএমএল কোড আউটপুট করা যাবে ।

আমরা যদি হালের জনপ্রিয় পিএইচপি ফ্রেমওয়ার্ক লারাভেলের মত করে চিন্তা করি তাহলে দেখবো –

# মডেল অবজেক্টগুলো সরাসরি ডাটাবেইজের টেবিলকে রিপ্রেজেন্ট করে । একেকটি মডেল ব্যবহার করে আমরা একেক টেবিল থেকে ডাটা এ্যাক্সেস করতে পারি ।
# ভিউ থাকে এইচটিএমএল এর মত বিশেষ টেম্প্লেট যেটা জানে কিভাবে এইচটিএমএল কোড আউটপুট করতে হবে ।
# কন্ট্রোলার অবজেক্টগুলো ব্যবহারকারীর ইচ্ছামত প্রয়োজনীয় মডেল থেকে ডাটা এনে ভিউ তৈরি করে দেয় ।

যেমন: যখন একজন ব্যবহারকারী /students/all – এই ঠিকানা ভিজিট করবেন তখন সব স্টুডেন্টদের তালিকা দেখাতে হবে । যখনই ওয়েব এ্যাপ্লিকশেন এই রিকোয়েস্টটি পায় তখন সে কন্ট্রোলারকে জানায় যে ব্যবহারকারী সব স্টুডেন্টদের তালিকা দেখতে চাচ্ছে । কন্ট্রোলার তখন ঝটপট Student মডেল এর কাছ থেকে সব স্টুডেন্ট এর তথ্য সংগ্রহ করে নেয় । এরপর সেগুলোকে রোল অনুযায়ী সাজিয়ে পাঠিয়ে দেয় ভিউ এর কাছে । ভিউ তখন মডেল হতে পাওয়া ডাটা সুন্দর করে এইচটিএমএল হিসেবে আউটপুট দিয়ে দেয় ।

কি করে বুঝবেন যে আপনার এ্যাপ্লিকেশনটি সঠিকভাবে এমভিসি প্যাটার্ন অনুসরণ করছে? নিজেকে জিজ্ঞাসা করুন এই এ্যাপ্লিকেশনটি থীমেবল কিনা । অর্থাৎ চাইলেই আপনি এটির জন্য অনেকগুলো থীম তৈরি করে ডাইনামিকালি থীম পরিবর্তন করতে পারছেন কিনা । যদি সেটা সম্ভব হয় তবে সম্ভবত আপনি সঠিকভাবেই এমভিসি ফলো করেছেন আর যদি সম্ভব না হয় তবে আপনি এমভিসি কম্পোনেন্টগুলোকে আলাদা করতে পারেননি ঠিকমতো ।


5 Comments এমভিসি (মডেল-ভিউ-কন্ট্রোলার) প্যাটার্ণ

  1. ArRolin

    ধন্যবাদ “মাসনুন” ভাই।
    সুন্দর ভাবে বোঝানোর জন্যে।
    আশাকরি আরো অনেকের কাজে লাগবে।

    বিঃদ্রঃ আপনি যে এত দ্রুত জিনিসটা প্রকাশ করবেন চিন্তা করিনাই।

    Reply
  2. JEWEL AHMMED

    আমি যখন একটা মেইল পাঠাবো সেন্ডার ফাইল টা কি হবে? Model নাকি Controller ? শুধু মেইল টা সেন্ড করবো। ডাটাবেজ এর কোনো কাজ নেই।

    Reply
  3. Pingback: সহজ কথায়, MVC এমভিসি (মডেল-ভিউ-কন্ট্রোলার) প্যাটার্ণ | সবার জন্য প্রোগ্রামিং

Leave a Reply

Your email address will not be published. Required fields are marked *