MVC Pattern (Model-View-Controller) একটি জনপ্রিয় Architectural Design Pattern যা সফটওয়্যার অ্যাপ্লিকেশনগুলির মধ্যে separation of concerns বজায় রাখতে ব্যবহৃত হয়। এটি অ্যাপ্লিকেশনকে তিনটি মূল অংশে ভাগ করে, যা তাদের দায়িত্ব পরিষ্কারভাবে নির্ধারণ করে, ফলে অ্যাপ্লিকেশন উন্নয়ন এবং রক্ষণাবেক্ষণ সহজ হয়। এই প্যাটার্নটি সাধারণত User Interface (UI) ডেভেলপমেন্টের জন্য ব্যবহৃত হয়, যেমন ওয়েব অ্যাপ্লিকেশন এবং ডেক্সটপ অ্যাপ্লিকেশন।
MVC Pattern এর প্রধান তিনটি উপাদান:
- Model:
- Model অ্যাপ্লিকেশনের ডেটা এবং ব্যবসায়িক লজিক (business logic) সংরক্ষণ করে। এটি অ্যাপ্লিকেশনের সাথে সম্পর্কিত সমস্ত তথ্য ধারণ করে এবং সেই তথ্যের সাথে বিভিন্ন অপারেশন বা প্রক্রিয়া সম্পাদন করে। Model সাধারণত View বা Controller এর সাথে সরাসরি যোগাযোগ করে না। এটি শুধু ডেটা পরিচালনা এবং প্রক্রিয়াকরণের জন্য দায়ী।
- View:
- View হলো ইউজার ইন্টারফেস অংশ, যা Model থেকে ডেটা গ্রহণ করে এবং ব্যবহারকারীকে দেখায়। এটি কেবল ডেটার উপস্থাপন বা প্রদর্শন নিয়ে কাজ করে, এবং কখনোই ডেটা পরিবর্তন বা প্রক্রিয়াকরণ করে না।
- Controller:
- Controller হল অ্যাপ্লিকেশনের ইন্টারফেস, যা Model এবং View এর মধ্যে মধ্যস্থতাকারী হিসেবে কাজ করে। Controller ব্যবহারকারীর ইনপুট গ্রহণ করে এবং সেগুলিকে Model এ প্রক্রিয়া করতে পাঠায়, এরপর View কে আপডেট করার নির্দেশ দেয়।
MVC Pattern এর উদ্দেশ্য:
- Separation of Concerns: প্রতিটি অংশের নিজস্ব দায়িত্ব থাকে, যা কোডের রক্ষণাবেক্ষণ এবং উন্নয়নকে সহজ করে।
- Maintainability: অ্যাপ্লিকেশনের UI (View), ডেটা (Model), এবং ব্যবসায়িক লজিক (Controller) আলাদা করে রাখা হয়, যাতে পরবর্তীতে কোডের অংশগুলো সহজে পরিবর্তন করা যায়।
- Reusability: এক্সিস্টিং কম্পোনেন্টগুলিকে পুনরায় ব্যবহার করা সহজ হয়।
MVC Pattern এর উদাহরণ: Java Swing অ্যাপ্লিকেশন
এখানে একটি সিম্পল উদাহরণ দেয়া হচ্ছে যেখানে Model ডেটা পরিচালনা করে, View সেই ডেটা প্রদর্শন করে এবং Controller ইউজারের ইনপুট গ্রহণ করে।
১. Model Class
public class CalculatorModel {
private int result;
public void add(int a, int b) {
result = a + b;
}
public void subtract(int a, int b) {
result = a - b;
}
public int getResult() {
return result;
}
}
২. View Class
import javax.swing.*;
import java.awt.*;
public class CalculatorView {
private JTextField number1Field;
private JTextField number2Field;
private JButton addButton;
private JButton subtractButton;
private JTextField resultField;
private JFrame frame;
public CalculatorView() {
frame = new JFrame("Calculator");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
frame.setLayout(new FlowLayout());
number1Field = new JTextField(10);
number2Field = new JTextField(10);
addButton = new JButton("Add");
subtractButton = new JButton("Subtract");
resultField = new JTextField(10);
resultField.setEditable(false);
frame.add(number1Field);
frame.add(number2Field);
frame.add(addButton);
frame.add(subtractButton);
frame.add(resultField);
frame.setVisible(true);
}
public String getNumber1() {
return number1Field.getText();
}
public String getNumber2() {
return number2Field.getText();
}
public void setResult(String result) {
resultField.setText(result);
}
public void addActionListenerToAddButton(java.awt.event.ActionListener listener) {
addButton.addActionListener(listener);
}
public void addActionListenerToSubtractButton(java.awt.event.ActionListener listener) {
subtractButton.addActionListener(listener);
}
}
৩. Controller Class
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CalculatorController {
private CalculatorModel model;
private CalculatorView view;
public CalculatorController(CalculatorModel model, CalculatorView view) {
this.model = model;
this.view = view;
// Add listeners to the buttons
this.view.addActionListenerToAddButton(new AddButtonListener());
this.view.addActionListenerToSubtractButton(new SubtractButtonListener());
}
class AddButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
int num1 = Integer.parseInt(view.getNumber1());
int num2 = Integer.parseInt(view.getNumber2());
model.add(num1, num2);
view.setResult(String.valueOf(model.getResult()));
}
}
class SubtractButtonListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
int num1 = Integer.parseInt(view.getNumber1());
int num2 = Integer.parseInt(view.getNumber2());
model.subtract(num1, num2);
view.setResult(String.valueOf(model.getResult()));
}
}
}
৪. Main Class
public class MVCExample {
public static void main(String[] args) {
CalculatorModel model = new CalculatorModel();
CalculatorView view = new CalculatorView();
CalculatorController controller = new CalculatorController(model, view);
}
}
ব্যাখ্যা:
- Model (CalculatorModel): এটি অ্যাপ্লিকেশনের ব্যবসায়িক লজিক পরিচালনা করে, যেমন গাণিতিক অপারেশন (যোগ এবং বিয়োগ)।
- View (CalculatorView): এটি ইউজারের ইন্টারফেস উপস্থাপন করে, যেখানে ব্যবহারকারী ইনপুট দেয় এবং আউটপুট দেখানো হয়।
- Controller (CalculatorController): এটি Model এবং View এর মধ্যে ইন্টারঅ্যাকশন পরিচালনা করে। Controller ব্যবহারকারীর ইনপুট গ্রহণ করে এবং Model কে প্রয়োজনীয় কার্য সম্পাদন করতে বলে, পরে View কে আপডেট করার নির্দেশ দেয়।
আউটপুট:
- একটি সাধারণ ক্যালকুলেটর GUI যেখানে ব্যবহারকারী দুটি সংখ্যা ইনপুট করতে পারে এবং যোগ বা বিয়োগ করতে পারে, ফলাফল নিচে প্রদর্শিত হয়।
MVC Pattern এর সুবিধা:
- Separation of Concerns: MVC Pattern ডেটা, ইউজার ইন্টারফেস, এবং ব্যবসায়িক লজিকের মধ্যে স্পষ্ট পার্থক্য তৈরি করে, যা কোডের রক্ষণাবেক্ষণ এবং উন্নয়নে সহায়ক।
- Maintainability: অ্যাপ্লিকেশনের বিভিন্ন অংশ আলাদা থাকে, ফলে পরবর্তীতে কোনো অংশে পরিবর্তন করলে অন্য অংশে কোনো প্রভাব পড়ে না।
- Testability: Model, View, এবং Controller আলাদা থাকায়, প্রতিটি অংশের জন্য আলাদাভাবে টেস্ট করা সহজ হয়।
- Reusability: View বা Model ক্লাসের কোড পুনঃব্যবহারযোগ্য হয়। উদাহরণস্বরূপ, আপনি একাধিক ভিউ (GUI বা ওয়েব ইন্টারফেস) তৈরি করতে পারেন, তবে একই Model এবং Controller ব্যবহার করতে পারেন।
- Flexibility: MVC অ্যাপ্লিকেশন খুব সহজেই নতুন ফিচার যোগ বা পরিবর্তন করা যায়। নতুন View বা Controller তৈরি করতে পারলে পুরনো কোডে কোনো সমস্যা হয় না।
সারাংশ
MVC Pattern একটি শক্তিশালী ডিজাইন প্যাটার্ন যা separation of concerns নিশ্চিত করতে সাহায্য করে। এটি সফটওয়্যার ডিজাইন এবং উন্নয়নে কোডের গঠন ও রক্ষণাবেক্ষণ সহজ করে এবং আপনাকে Model, View, এবং Controller এর মধ্যে কার্যকরীভাবে যোগাযোগ এবং একে অপরকে পরিচালনা করতে সাহায্য করে। এটি বিশেষভাবে User Interface (UI) অ্যাপ্লিকেশনে ব্যবহৃত হয়, যেমন ওয়েব অ্যাপ্লিকেশন বা ডেস্কটপ অ্যাপ্লিকেশন।
- Model: ডেটা এবং ব্যবসায়িক লজিক সংরক্ষণ করে।
- View: ইউজার ইন্টারফেস উপস্থাপন করে।
- Controller: Model এবং View এর মধ্যে মধ্যস্থতাকারী হিসেবে কাজ করে।
এটি Maintainability, Reusability, এবং Testability উন্নত করতে সহায়ক।