MVC (Model-View-Controller) এবং MVVM (Model-View-ViewModel) হল জনপ্রিয় ডিজাইন প্যাটার্ন যা JavaFX সহ GUI অ্যাপ্লিকেশনে ব্যবহৃত হয়। এগুলি অ্যাপ্লিকেশনগুলির মধ্যে ইউজার ইন্টারফেস এবং ব্যাকএন্ড লজিক পৃথক করার জন্য ব্যবহৃত হয়, যাতে কোডের পুনঃব্যবহারযোগ্যতা, রক্ষণাবেক্ষণ এবং টেস্টিং সহজ হয়।
এখানে MVC এবং MVVM ডিজাইন প্যাটার্নগুলি JavaFX-এ কিভাবে ব্যবহার করা যায়, তা বিস্তারিতভাবে দেখানো হয়েছে।
1. MVC Design Pattern (Model-View-Controller)
MVC প্যাটার্নটি তিনটি প্রধান উপাদানে বিভক্ত:
- Model: ডেটা এবং বিজনেস লজিকের প্রতিনিধিত্ব।
- View: ইউজার ইন্টারফেস (UI) যা ইউজারের সাথে ইন্টারঅ্যাক্ট করে।
- Controller: ইউজারের অ্যাকশন এবং UI পরিবর্তনগুলিকে মডেল এবং ভিউ এর সাথে সিঙ্ক্রোনাইজ করে।
JavaFX MVC উদাহরণ:
এখানে একটি সাধারণ MVC প্যাটার্ন ব্যবহার করে JavaFX অ্যাপ্লিকেশনের উদাহরণ দেওয়া হল, যেখানে একটি বাটন ক্লিক করলে টেক্সট পরিবর্তিত হবে।
Model (ব্যাকএন্ড লজিক):
public class Model {
private String message;
public Model() {
this.message = "Hello, JavaFX!";
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
View (UI):
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class View {
private Stage stage;
private Button button;
private Text messageText;
public View() {
button = new Button("Click Me!");
messageText = new Text("Hello, JavaFX!");
StackPane root = new StackPane();
root.getChildren().addAll(button, messageText);
Scene scene = new Scene(root, 300, 250);
stage = new Stage();
stage.setTitle("MVC Example");
stage.setScene(scene);
}
public Stage getStage() {
return stage;
}
public Button getButton() {
return button;
}
public Text getMessageText() {
return messageText;
}
}
Controller (এলার্ভারের লজিক):
public class Controller {
private Model model;
private View view;
public Controller(Model model, View view) {
this.model = model;
this.view = view;
// বাটনে ক্লিক করলে মেসেজ পরিবর্তন হবে
view.getButton().setOnAction(e -> updateMessage());
}
private void updateMessage() {
model.setMessage("Button Clicked!");
view.getMessageText().setText(model.getMessage());
}
}
Main Application:
import javafx.application.Application;
public class MainApp extends Application {
@Override
public void start(Stage primaryStage) {
// Model এবং View তৈরি করা
Model model = new Model();
View view = new View();
// Controller তৈরি করা
new Controller(model, view);
// অ্যাপ্লিকেশন স্টেজে ভিউ সেট করা
view.getStage().show();
}
public static void main(String[] args) {
launch(args);
}
}
এখানে কী হচ্ছে?
- Model:
Modelক্লাসে ডেটা এবং বিজনেস লজিক রাখা হয়েছে। - View:
Viewক্লাসে UI উপাদান যেমন বাটন এবং টেক্সট রাখা হয়েছে। - Controller:
Controllerক্লাস ইউজারের অ্যাকশন গ্রহণ করে এবং মডেল এবং ভিউ এর মধ্যে যোগাযোগ স্থাপন করে।
2. MVVM Design Pattern (Model-View-ViewModel)
MVVM প্যাটার্নটি মূলত View, ViewModel, এবং Model এর মধ্যে যোগাযোগের এক নতুন পদ্ধতি প্রদান করে। এর মধ্যে:
- Model: ডেটা বা বিজনেস লজিকের প্রতিনিধিত্ব।
- View: ইউজার ইন্টারফেস যা ইউজারের সাথে ইন্টারঅ্যাক্ট করে।
- ViewModel: ভিউ এবং মডেলের মধ্যে লজিকাল লেয়ার, যেখানে ভিউ এবং মডেলের মধ্যে তথ্য বাইন্ডিং করা হয়। এটি ইউজারের অ্যাকশনগুলির মধ্যে সিঙ্ক্রোনাইজেশন রাখে।
MVVM প্যাটার্নের সবচেয়ে বড় সুবিধা হল data binding, যা ইউজারের পরিবর্তন এবং UI উপাদানের মধ্যে অটোমেটিক সিঙ্ক্রোনাইজেশন নিশ্চিত করে।
JavaFX MVVM উদাহরণ:
Model (ব্যাকএন্ড লজিক):
public class Model {
private StringProperty message = new SimpleStringProperty("Hello, JavaFX!");
public StringProperty messageProperty() {
return message;
}
public String getMessage() {
return message.get();
}
public void setMessage(String message) {
this.message.set(message);
}
}
ViewModel (লজিকাল লেয়ার):
import javafx.beans.property.StringProperty;
public class ViewModel {
private Model model;
public ViewModel(Model model) {
this.model = model;
}
public StringProperty messageProperty() {
return model.messageProperty();
}
public void changeMessage() {
model.setMessage("Button Clicked!");
}
}
View (UI):
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class View extends Application {
@Override
public void start(Stage primaryStage) {
// Model এবং ViewModel তৈরি করা
Model model = new Model();
ViewModel viewModel = new ViewModel(model);
// UI উপাদান তৈরি করা
Text messageText = new Text();
Button button = new Button("Click Me!");
// Data binding (UI ও ViewModel এর মধ্যে ডেটা সিঙ্ক্রোনাইজ করা)
messageText.textProperty().bind(viewModel.messageProperty());
// বাটনে ইভেন্ট হ্যান্ডলার
button.setOnAction(e -> viewModel.changeMessage());
// StackPane লেআউট তৈরি করা
StackPane root = new StackPane();
root.getChildren().addAll(button, messageText);
// Scene তৈরি এবং সেট করা
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("MVVM Example");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
এখানে কী হচ্ছে?
- Model:
Model-এ একটিStringProperty(JavaFX Property) ব্যবহার করা হয়েছে, যা ডেটা সিঙ্ক্রোনাইজেশন এবং বাইন্ডিং এর জন্য ব্যবহৃত হয়। - ViewModel:
ViewModelইউজারের অ্যাকশন (যেমন বাটন ক্লিক) নিয়ন্ত্রণ করে এবংModelএর ডেটা পরিবর্তন করে। - View:
ViewএTextকম্পোনেন্টে data binding ব্যবহার করা হয়েছে যাতে মডেলের পরিবর্তন স্বয়ংক্রিয়ভাবে UI-তে প্রতিফলিত হয়।
MVVM এর সুবিধা:
- Data Binding: UI এবং মডেল এর মধ্যে স্বয়ংক্রিয় সিঙ্ক্রোনাইজেশন নিশ্চিত হয়।
- Testability: ViewModel ব্যাবহার করার ফলে ব্যাকএন্ড লজিককে সহজে আলাদা এবং টেস্ট করা যায়।
- Loose Coupling: View এবং Model এর মধ্যে অল্পই সম্পর্ক থাকে, যার ফলে কোড রক্ষণাবেক্ষণ সহজ হয়।
সারাংশ:
- MVC (Model-View-Controller) প্যাটার্নে, Controller ইউজারের অ্যাকশনগুলো পরিচালনা করে এবং তা Model এবং View এর মধ্যে সিঙ্ক্রোনাইজ করে।
- MVVM (Model-View-ViewModel) প্যাটার্নে, ViewModel একটি মধ্যবর্তী লেয়ার হিসেবে কাজ করে যা View এবং Model এর মধ্যে ডেটা বাইন্ডিং এবং সিঙ্ক্রোনাইজেশন সহজ করে তোলে।
MVC সাধারণত পুরানো UI প্যাটার্নের জন্য ব্যবহৃত হলেও, MVVM আধুনিক GUI অ্যাপ্লিকেশন ডিজাইন প্যাটার্ন, যেখানে ডেটা বাইন্ডিং ব্যবহৃত হয়, সেরা ফলাফল দেয়। JavaFX অ্যাপ্লিকেশনগুলিতে এই প্যাটার্নগুলির ব্যবহার UI এবং ব্যাকএন্ড লজিকের মধ্যে শক্তিশালী আলাদা-এবং-সংযোগ ব্যবস্থা নিশ্চিত করে।
Read more