Model-View-Controller (MVC) একটি সফটওয়্যার আর্কিটেকচারাল প্যাটার্ন যা একটি অ্যাপ্লিকেশনের ডেটা, ইউজার ইন্টারফেস এবং ইউজারের ইনপুট লজিককে পৃথক করে। এটি একটি জনপ্রিয় ডিজাইন প্যাটার্ন, যা অ্যাপ্লিকেশনগুলিকে মডুলার, স্কেলেবল এবং রক্ষণাবেক্ষণযোগ্য করতে সাহায্য করে। Spring MVC ফ্রেমওয়ার্ক MVC প্যাটার্ন অনুসরণ করে, যার ফলে অ্যাপ্লিকেশনটি পরিষ্কারভাবে আলাদা আলাদা লেয়ারে বিভক্ত হয়।
MVC প্যাটার্নের তিনটি প্রধান উপাদান:
- Model (মডেল):
- Model হলো অ্যাপ্লিকেশনের ডেটা এবং লজিকের প্রতিনিধিত্ব। এটি অ্যাপ্লিকেশন ডেটা ধারণ এবং প্রক্রিয়া করার জন্য দায়ী।
- মডেল সাধারণত POJOs (Plain Old Java Objects), Entities বা DTOs (Data Transfer Objects) হিসেবে থাকে।
- মডেলটি Business Logic এবং Data Access Logic যেমন ডাটাবেস থেকে ডেটা পড়া, নতুন ডেটা সংরক্ষণ করা ইত্যাদি পরিচালনা করে।
- এটি ভিউ বা কন্ট্রোলারের সাথে যোগাযোগ না করে শুধুমাত্র নিজের কাজ করে।
- View (ভিউ):
- View হলো ইউজারের ইন্টারফেস। এটি ব্যবহারকারীর সামনে তথ্য উপস্থাপন করে এবং ইউজারের কাছে ডেটা দেখানোর কাজ করে।
- ভিউয়ের কাজ হল মডেল থেকে ডেটা গ্রহণ করা এবং তা ইউজারকে উপস্থাপন করা, তবে এটি মডেল বা কন্ট্রোলারের কোনো প্রক্রিয়া পরিচালনা করে না।
- Spring MVC তে JSP, Thymeleaf, FreeMarker বা অন্য টেমপ্লেট ইঞ্জিনের মাধ্যমে ভিউ তৈরি করা হয়।
- Controller (কন্ট্রোলার):
- Controller ইউজারের ইনপুট (যেমন HTTP রিকোয়েস্ট) গ্রহণ করে এবং সেই ইনপুট অনুযায়ী মডেল এবং ভিউ নির্বাচন করে।
- এটি ইউজার রিকোয়েস্ট অনুযায়ী কাজ সম্পন্ন করে, মডেলকে আপডেট বা ম্যানিপুলেট করে এবং ভিউ নির্বাচন করে যাতে ইউজারের জন্য সঠিক আউটপুট প্রদর্শন করা যায়।
- কন্ট্রোলার HTTP রিকোয়েস্ট এবং রেসপন্স পরিচালনা করে এবং মডেল এবং ভিউকে সংযুক্ত করে।
Spring MVC এবং MVC প্যাটার্ন:
Spring MVC ফ্রেমওয়ার্ক Model-View-Controller (MVC) আর্কিটেকচারকে অনুসরণ করে এবং Spring Framework এর অংশ হিসেবে এটি ওয়েব অ্যাপ্লিকেশন তৈরি করতে ব্যবহৃত হয়। এটি ডেটা (Model), ভিউ (View) এবং ইউজার ইনপুট (Controller) এর মধ্যে সম্পর্ক নির্ধারণ করে।
Spring MVC তে, কন্ট্রোলার HTTP রিকোয়েস্ট গ্রহণ করে এবং প্রয়োজনীয় লজিক অনুযায়ী মডেল আপডেট করে বা ডেটা ফেরত দেয়, তারপর ভিউ নির্বাচন করে। Spring MVC কনফিগারেশন সাধারণত DispatcherServlet দ্বারা পরিচালিত হয়, যা সমস্ত রিকোয়েস্টকে সঠিক কন্ট্রোলারে রিডাইরেক্ট করে।
Spring MVC এর কাজ করার প্রক্রিয়া:
- HTTP Request Handling:
- ব্যবহারকারী যখন HTTP রিকোয়েস্ট পাঠান, তখন Spring MVC এর DispatcherServlet সেই রিকোয়েস্টটি গ্রহণ করে।
- Request Mapping:
- DispatcherServlet কন্ট্রোলারের কাছে রিকোয়েস্ট পাঠায় যা মেথডের মাধ্যমে HTTP রিকোয়েস্ট মেপ করে। এই মেথডটি @RequestMapping বা @GetMapping, @PostMapping অ্যানোটেশন দ্বারা চিহ্নিত থাকে।
- Model Binding:
- কন্ট্রোলার ইউজারের ইনপুট ডেটাকে মডেল অবজেক্টে ম্যাপ করে। Spring MVC @ModelAttribute বা @RequestParam অ্যানোটেশন ব্যবহার করে ডেটা বাইন্ডিং পরিচালনা করে।
- View Rendering:
- কন্ট্রোলার তার প্রক্রিয়া শেষ করার পর একটি ভিউ রিটার্ন করে, যা সাধারণত একটি HTML বা JSP পেজ। এই ভিউ ব্যবহারকারীকে ডেটা উপস্থাপন করে।
Spring MVC: Request-Response Cycle (রিকোয়েস্ট-রেসপন্স সাইকেল)
Spring MVC এ কন্ট্রোলারের কাজের ধাপগুলো:
- Request Received by DispatcherServlet:
- ইউজার HTTP রিকোয়েস্ট পাঠানোর পর,
DispatcherServletসেটি গ্রহণ করে এবং কন্ট্রোলারের কাছে পাঠিয়ে দেয়।
- ইউজার HTTP রিকোয়েস্ট পাঠানোর পর,
- Controller Handles the Request:
- কন্ট্রোলার ইউজারের ইনপুট অনুযায়ী ডেটা গ্রহণ করে, মডেল আপডেট করে এবং ভিউ নির্বাচন করে।
- View Rendering:
- কন্ট্রোলারের মডেল অবজেক্টটি ভিউতে পাঠানো হয় এবং ভিউ ইউজারের কাছে রেসপন্স হিসেবে প্রেরণ করা হয়।
Spring MVC এর উদাহরণ:
Controller Example:
@Controller
public class HomeController {
@RequestMapping("/home")
public String home(Model model) {
model.addAttribute("message", "Welcome to Spring MVC!");
return "home"; // home.jsp বা home.html ভিউ রিটার্ন করবে
}
}
View Example (home.jsp):
<!DOCTYPE html>
<html>
<head>
<title>Home Page</title>
</head>
<body>
<h1>${message}</h1>
</body>
</html>
এই উদাহরণে, /home রিকোয়েস্ট কন্ট্রোলার দ্বারা হ্যান্ডল করা হয়, যেখানে মডেলটি একটি message অ্যাট্রিবিউট সহ ভিউতে প্রেরণ করা হয়। ভিউ (home.jsp) সেই তথ্য ইউজারের সামনে প্রদর্শন করে।
Spring MVC এর সুবিধা:
- Separation of Concerns (SoC):
MVC প্যাটার্ন ডেটা, ভিউ এবং কন্ট্রোলার আলাদা রাখে, যা কোডের পুনঃব্যবহারযোগ্যতা এবং রক্ষণাবেক্ষণযোগ্যতা বৃদ্ধি করে। - Modular Development:
মডেল, ভিউ এবং কন্ট্রোলার পৃথক করার মাধ্যমে, প্রতিটি অংশ সহজে পরিবর্তন বা উন্নত করা যেতে পারে। - Ease of Testing:
আলাদা আলাদা কম্পোনেন্টের কারণে প্রতিটি অংশ আলাদাভাবে পরীক্ষা করা যায়। মডেল এবং কন্ট্রোলারগুলির জন্য ইউনিট টেস্ট করা সহজ। - Flexible View Technologies:
Spring MVC বিভিন্ন ভিউ টেকনোলজির সাথে কাজ করতে পারে যেমন JSP, Thymeleaf, FreeMarker ইত্যাদি।
উপসংহার:
Model-View-Controller (MVC) প্যাটার্ন একটি কার্যকরী আর্কিটেকচার যা Spring MVC তে ওয়েব অ্যাপ্লিকেশন তৈরি করতে সাহায্য করে। এটি অ্যাপ্লিকেশনের বিভিন্ন অংশের মধ্যে আলাদা আলাদা দায়িত্ব ভাগ করে দেয়, যার ফলে সিস্টেমের কোড সহজে রক্ষণাবেক্ষণযোগ্য এবং পরিবর্তনযোগ্য হয়। Spring MVC প্রোগ্রামে Model, View, এবং Controller কম্পোনেন্টের মধ্যে সম্পর্ক খুবই পরিষ্কার এবং মডুলার যা সফটওয়্যার ডেভেলপমেন্টে একটি ভাল অভ্যাস।
Read more