Java Technologies Complex Object Creation এর জন্য Assisted Injection গাইড ও নোট

280

Guice (গুইস) ফ্রেমওয়ার্কে Assisted Injection একটি শক্তিশালী পদ্ধতি যা আপনাকে জটিল বা প্যারামিটারাইজড অবজেক্ট তৈরি করতে সহায়তা করে, যেখানে কিছু ডিপেন্ডেন্সি অটোমেটিকভাবে ইনজেক্ট করা যায় এবং কিছু প্যারামিটার হাতে ইনজেক্ট করা প্রয়োজন।

Assisted Injection এর প্রয়োজনীয়তা:

ধরা যাক, আপনার একটি ক্লাস আছে যার জন্য কিছু ডিপেন্ডেন্সি গুইস দ্বারা ইনজেক্ট করা হবে, কিন্তু কিছু প্যারামিটার সরাসরি কন্সট্রাকটর থেকে পাস করতে হবে। গুইসে Assisted Injection এই পরিস্থিতি সমাধান করে, যেখানে Guice স্বয়ংক্রিয়ভাবে কিছু ডিপেন্ডেন্সি ইনজেক্ট করবে এবং বাকিগুলি আপনি নিজে সরবরাহ করবেন।

Assisted Injection কিভাবে কাজ করে?

Assisted Injection ব্যবহার করার জন্য Guice একটি @Assisted অ্যানোটেশন প্রদান করে যা আপনাকে এটি জানাতে সহায়তা করে যে কোন প্যারামিটারগুলি Guice এর মাধ্যমে ইনজেক্ট করা হবে এবং কোনগুলি হাতে সরবরাহ করা হবে।

Guice-এর AssistedInject এবং @Assisted অ্যানোটেশন ব্যবহারের মাধ্যমে আপনি এমন অবজেক্ট তৈরি করতে পারবেন যেগুলির জন্য কিছু প্যারামিটার গুইস ইনজেক্ট করতে পারবে এবং বাকি প্যারামিটারগুলো ম্যানুয়ালি পাস করা যাবে।


Assisted Injection এর জন্য কিভাবে কোড লিখবেন?

এখানে একটি উদাহরণ দেওয়া হলো, যেখানে Assisted Injection ব্যবহার করে জটিল অবজেক্ট তৈরি করা হয়েছে।


ধাপ ১: Guice AssistedInject Setup

প্রথমে, আপনাকে Guice এর AssistedInject প্যাকেজ এবং @Assisted অ্যানোটেশন ব্যবহার করতে হবে।

1.1: AssistedInject Interface এবং ক্লাস তৈরি করা

import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
import com.google.inject.assistedinject.AssistedInject;

public interface PaymentService {
    void processPayment(String amount);
}

public class CreditCardPaymentService implements PaymentService {
    private final String gateway;
    private final String amount;

    // Constructor with Assisted Injection
    @AssistedInject
    public CreditCardPaymentService(@Assisted String amount, String gateway) {
        this.amount = amount;
        this.gateway = gateway;
    }

    @Override
    public void processPayment(String amount) {
        System.out.println("Processing " + amount + " via Credit Card at gateway: " + gateway);
    }
}

এখানে CreditCardPaymentService ক্লাসের কন্সট্রাক্টরটি AssistedInject অ্যানোটেশন দ্বারা চিহ্নিত করা হয়েছে এবং @Assisted দিয়ে প্যারামিটার নির্ধারণ করা হয়েছে যা ম্যানুয়ালি ইনজেক্ট করতে হবে (এক্ষেত্রে String amount)।


ধাপ ২: Guice Module এ Assisted Injection কনফিগার করা

এখন আপনাকে Guice মডিউলে AssistedInject ব্যবহার করতে হবে, যাতে Guice জানে কিভাবে Assisted Injection করতে হবে।

2.1: Guice Module তৈরি করা

import com.google.inject.AbstractModule;
import com.google.inject.assistedinject.FactoryModuleBuilder;

public class PaymentModule extends AbstractModule {
    @Override
    protected void configure() {
        install(new FactoryModuleBuilder().build(PaymentServiceFactory.class));
    }
}

এখানে FactoryModuleBuilder ব্যবহার করা হয়েছে যাতে PaymentServiceFactory ফ্যাক্টরি ক্লাস তৈরি করা যায়।

2.2: Factory Interface তৈরি করা

এখন, আপনাকে একটি Factory Interface তৈরি করতে হবে যা AssistedInject এ ব্যবহৃত ক্লাসের ইনস্ট্যান্স তৈরি করবে।

import com.google.inject.assistedinject.Assisted;

public interface PaymentServiceFactory {
    PaymentService create(@Assisted String amount);
}

এখানে, PaymentServiceFactory একটি create মেথড প্রদান করে যা amount প্যারামিটার গ্রহণ করবে এবং PaymentService ইনস্ট্যান্স তৈরি করবে।


ধাপ ৩: Application Class এ Assisted Injection ব্যবহার করা

এখন, আপনাকে অ্যাপ্লিকেশন ক্লাসে Assisted Injection ব্যবহার করতে হবে এবং PaymentServiceFactory এর মাধ্যমে একটি ইনস্ট্যান্স তৈরি করতে হবে।

3.1: Main Application Class

import com.google.inject.Guice;
import com.google.inject.Injector;

public class Application {
    public static void main(String[] args) {
        // Create Injector with PaymentModule configuration
        Injector injector = Guice.createInjector(new PaymentModule());

        // Get the factory instance
        PaymentServiceFactory factory = injector.getInstance(PaymentServiceFactory.class);

        // Create a PaymentService instance by providing the required 'amount' parameter
        PaymentService paymentService = factory.create("100 USD");

        // Process the payment
        paymentService.processPayment("100 USD");
    }
}

এখানে, PaymentServiceFactory ফ্যাক্টরি ব্যবহার করে PaymentService ইন্সট্যান্স তৈরি করা হয়েছে এবং amount প্যারামিটার ম্যানুয়ালি পাস করা হয়েছে।


Assisted Injection এর সুবিধা:

  1. Flexible Object Creation: Assisted Injection দিয়ে আপনি এমন অবজেক্ট তৈরি করতে পারবেন যেগুলির কিছু ডিপেন্ডেন্সি Guice ইনজেক্ট করবে এবং কিছু প্যারামিটার ম্যানুয়ালি প্রদান করতে হবে।
  2. Factory Pattern: এটি Factory Pattern এর মতো কাজ করে, যেখানে আপনার জন্য একটি ফ্যাক্টরি তৈরি করা হয় যেটি আপনার পছন্দের ইনস্ট্যান্স তৈরি করতে সহায়তা করে।
  3. কমপ্লেক্স ডিপেন্ডেন্সি ম্যানেজমেন্ট: যদি আপনার কোনো অবজেক্টের কিছু অংশ স্বয়ংক্রিয়ভাবে ইনজেক্ট করার প্রয়োজন হয় এবং কিছু অংশ হাতে ইনজেক্ট করতে হয়, তাহলে Assisted Injection খুব কার্যকরী হবে।
  4. Testability: এটি আপনার কোডকে আরও টেস্টযোগ্য এবং মডুলার করে তোলে। কারণ আপনি ফ্যাক্টরি ব্যবহার করে যে কোনো কনফিগারেশন তৈরি করতে পারেন এবং ইনজেক্ট করতে পারেন।

Guice এর Assisted Injection একটি শক্তিশালী টেকনিক যা জটিল বা প্যারামিটারাইজড অবজেক্ট তৈরি করতে সহায়তা করে। এটি আপনাকে নির্দিষ্ট প্যারামিটারগুলি ম্যানুয়ালি ইনজেক্ট করার সুযোগ দেয়, এবং বাকি ডিপেন্ডেন্সিগুলো Guice স্বয়ংক্রিয়ভাবে ইনজেক্ট করে দেয়। এর মাধ্যমে আপনার কোড আরও মডুলার, টেস্টযোগ্য এবং রক্ষণাবেক্ষণযোগ্য হয়ে ওঠে।

Content added By
Promotion

Are you sure to start over?

Loading...