Dependency Injection (DI) হল একটি ডিজাইন প্যাটার্ন যা Inversion of Control (IoC) এর ধারণার উপর ভিত্তি করে তৈরি। Tapestry ফ্রেমওয়ার্কে Dependency Injection ব্যবহারের মাধ্যমে আপনি কম্পোনেন্ট এবং সার্ভিসগুলির মধ্যে নির্ভরতা সহজে ম্যানেজ করতে পারেন। DI ব্যবহারের ফলে কোডের পুনঃব্যবহারযোগ্যতা, পরীক্ষাযোগ্যতা এবং মডুলারিটি বৃদ্ধি পায়।
Tapestry-তে DI মূলত Service Layer-এর মধ্যে ব্যবহৃত হয়, যেখানে সার্ভিসগুলো সরাসরি কম্পোনেন্টে ইনজেক্ট করা হয় এবং আপনি এগুলিকে সরাসরি ব্যবহার করতে পারেন।
Tapestry-তে Dependency Injection সাধারণত IoC (Inversion of Control) Container এর মাধ্যমে পরিচালিত হয়, যা @Inject
এনোটেশন অথবা @Property
এনোটেশন ব্যবহার করে ইনজেক্ট করা যায়।
@Inject
এনোটেশন: এটি একটি সার্ভিস বা ডিপেনডেন্সি ইনজেক্ট করার জন্য ব্যবহৃত হয়।@Property
এনোটেশন: এটি Tapestry কম্পোনেন্টের প্রপার্টি ইনজেক্ট করার জন্য ব্যবহৃত হয়।প্রথমে, একটি কাস্টম সার্ভিস তৈরি করি। এই সার্ভিসটি একটি সাধারণ কাজ করবে যেমন, একটি বার্তা ফেরত দেওয়া।
package com.example.services;
public interface MessageService {
String getMessage();
}
এখন, এই সার্ভিসটির একটি কনক্রিট ইমপ্লিমেন্টেশন তৈরি করা যাক:
package com.example.services;
public class MessageServiceImpl implements MessageService {
@Override
public String getMessage() {
return "Hello, this is a message from the service!";
}
}
এটি একটি সাধারণ সার্ভিস যা একটি বার্তা প্রদান করবে।
এখন আমরা AppModule ক্লাসে সার্ভিসটি রেজিস্টার করব যাতে Tapestry এই সার্ভিসটিকে পরিচালনা করতে পারে। AppModule
হল Tapestry ফ্রেমওয়ার্কে সার্ভিস কনফিগারেশন এবং ইনজেকশন পয়েন্ট।
package com.example.services;
import org.apache.tapestry5.ioc.annotations.ProvideService;
import org.apache.tapestry5.ioc.ServiceBinder;
public class AppModule {
public static void bind(ServiceBinder binder) {
binder.bind(MessageService.class, MessageServiceImpl.class);
}
}
এখানে:
binder.bind()
ব্যবহৃত হয়েছে MessageService
ইন্টারফেসকে তার কনক্রিট ইমপ্লিমেন্টেশন MessageServiceImpl
এর সাথে সংযুক্ত করার জন্য।এখন, Tapestry এর কম্পোনেন্টে MessageService
ইনজেক্ট করবো এবং এটি ব্যবহার করবো।
package com.example.pages;
import com.example.services.MessageService;
import org.apache.tapestry5.annotations.Inject;
public class Home {
@Inject
private MessageService messageService;
public String getMessage() {
return messageService.getMessage(); // ব্যবহার করা হচ্ছে MessageService
}
}
এখানে:
@Inject
এনোটেশনটি Tapestry কে নির্দেশ দেয় যে MessageService
সার্ভিসটি এই কম্পোনেন্টে ইনজেক্ট করতে হবে।messageService.getMessage()
মেথড কল করে আমরা সার্ভিস থেকে বার্তাটি গ্রহণ করছি।এখন, আমরা Home পেজের HTML টেমপ্লেটে এই বার্তা প্রদর্শন করব।
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
<head>
<title>Home Page</title>
</head>
<body>
<h2>Message from Service:</h2>
<p>${messageService.getMessage()}</p>
</body>
</html>
এখানে:
${messageService.getMessage()}
এর মাধ্যমে আমরা Home পেজে সার্ভিস থেকে প্রাপ্ত বার্তা প্রদর্শন করছি।Tapestry-তে Dependency Injection ব্যবহার করা অত্যন্ত সহজ এবং সুবিধাজনক। সার্ভিস রেজিস্ট্রি কনফিগারেশন, ইনজেকশন পয়েন্ট তৈরি এবং সেই সার্ভিস ব্যবহার করে আপনার অ্যাপ্লিকেশনকে আরও মডুলার, পরীক্ষাযোগ্য এবং নমনীয় করা সম্ভব। Tapestry এর IoC (Inversion of Control) এবং Service Registry ব্যবহার করে কোডের পুনঃব্যবহারযোগ্যতা এবং সিস্টেমের নমনীয়তা বৃদ্ধি করা যায়, যা একটি কার্যকরী এবং নিরাপদ ওয়েব অ্যাপ্লিকেশন তৈরি করতে সাহায্য করে।