Dependency Injection (DI) এর ধারণা

Dependency Injection এবং EJB - ইজেবি (EJB) - Java Technologies

289

Dependency Injection (DI) একটি ডিজাইন প্যাটার্ন যা কোডের মধ্যে ডিপেন্ডেন্সি বা নির্ভরশীলতা ম্যানেজ করতে সাহায্য করে। এটি মূলত Inversion of Control (IoC) এর একটি অংশ এবং প্রোগ্রামিং এর একটি গুরুত্বপূর্ণ কৌশল, বিশেষত বড় এবং জটিল সিস্টেমে। DI এর মাধ্যমে, ক্লাসগুলো তাদের নির্ভরশীলতাগুলি বাইরের উৎস (যেমন, কনফিগারেশন ফাইল বা ইন্সট্যান্স) থেকে ইনজেক্ট (সরবরাহ) করে নেয়, তার পরিবর্তে নিজে নিজে সেই নির্ভরশীলতাগুলোর ইনস্ট্যান্স তৈরি করার পরিবর্তে।

Dependency Injection (DI) এর ধারণা

Dependency Injection এর মাধ্যমে, একটি ক্লাস তার নির্ভরশীলতা (dependencies) বাইরের কোন সোর্স থেকে পায়, বদলে ক্লাস নিজে তা তৈরি করে না। এটি মূলত কোডের লুজ কপ্লিং (loose coupling) বৃদ্ধি করে, যাতে কোডটি আরো মডুলার, রিইউজেবল এবং টেস্টেবল হয়।

DI এর মূল উপাদান

DI সাধারণত তিনটি প্রধান উপাদান বা কম্পোনেন্ট ব্যবহার করে কাজ করে:

  1. Client: যে ক্লাসটি নির্ভরশীলতা পায়।
  2. Service: যে ক্লাসটি নির্ভরশীলতাগুলি সরবরাহ করে (অথবা যেটি বাইরের ডিপেন্ডেন্সি সরবরাহ করে)।
  3. Injector: যে উপাদানটি নির্ভরশীলতা ইনজেক্ট করে। এটি নির্ধারণ করে কোন ক্লাস কোন ডিপেন্ডেন্সি নিবে।

DI এর প্রধান সুবিধা:

  1. লুজ কপ্লিং: কোডের মধ্যে নির্ভরশীলতা কমাতে সাহায্য করে, ফলে কোডটি আরও নমনীয় এবং পরিবর্তনযোগ্য হয়।
  2. টেস্টিং সহজ করা: যেহেতু নির্ভরশীলতাগুলি বাইরের উৎস থেকে ইনজেক্ট করা হয়, তাই ইউনিট টেস্টিং সহজ হয়। আপনি সহজেই মক (mock) বা স্টাব (stub) ব্যবহার করে পরীক্ষণ করতে পারেন।
  3. রিইউজেবিলিটি: একাধিক ক্লাস একই ডিপেন্ডেন্সি শেয়ার করতে পারে, ফলে কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি পায়।
  4. ফ্লেক্সিবিলিটি: ডিপেন্ডেন্সির পরিবর্তন বা কনফিগারেশন সহজভাবে করা যায়।

DI এর ৩টি পদ্ধতি

DI সাধারণত তিনটি প্রধান পদ্ধতিতে বাস্তবায়িত করা যায়:

  1. Constructor Injection: ডিপেন্ডেন্সি ইনজেক্ট করা হয় ক্লাসের কনস্ট্রাক্টরের মাধ্যমে।
  2. Setter Injection: ডিপেন্ডেন্সি ইনজেক্ট করা হয় ক্লাসের সিটার মেথডের মাধ্যমে।
  3. Interface Injection: ডিপেন্ডেন্সি ইনজেক্ট করা হয় ইন্টারফেসের মাধ্যমে, যেখানে ক্লাসটি ওই ইন্টারফেসের মেথডে ডিপেন্ড করে।

উদাহরণ:

১. Constructor Injection (কনস্ট্রাক্টর ইনজেকশন)

// Service Class
public class Service {
    public void execute() {
        System.out.println("Service Executed");
    }
}

// Client Class that depends on Service
public class Client {
    private Service service;

    // Constructor Injection
    public Client(Service service) {
        this.service = service;
    }

    public void start() {
        service.execute();
    }
}

// Main class to inject dependency
public class Main {
    public static void main(String[] args) {
        Service service = new Service();
        Client client = new Client(service);  // Dependency is injected here
        client.start();
    }
}

এখানে Client ক্লাসটি Service ক্লাসের উপর নির্ভরশীল। Service ক্লাসটি কনস্ট্রাক্টরের মাধ্যমে ইনজেক্ট করা হয়েছে।

২. Setter Injection (সিটার ইনজেকশন)

public class Service {
    public void execute() {
        System.out.println("Service Executed");
    }
}

public class Client {
    private Service service;

    // Setter Injection
    public void setService(Service service) {
        this.service = service;
    }

    public void start() {
        service.execute();
    }
}

public class Main {
    public static void main(String[] args) {
        Service service = new Service();
        Client client = new Client();
        client.setService(service);  // Dependency is injected through setter
        client.start();
    }
}

এখানে Service ক্লাসটি Client ক্লাসের setService মেথডের মাধ্যমে ইনজেক্ট করা হয়েছে।

DI Frameworks:

বিভিন্ন DI frameworks আছে যা DI প্যাটার্নের সাহায্যে ডিপেন্ডেন্সি ইনজেকশন সহজ করে তোলে। কিছু জনপ্রিয় DI frameworks হল:

  • Spring Framework: Spring একটি জনপ্রিয় DI ফ্রেমওয়ার্ক যা DI প্যাটার্নের উপর ভিত্তি করে কাজ করে। এটি ক্লাসগুলোর ডিপেন্ডেন্সি অটোমেটিকভাবে ইনজেক্ট করতে সক্ষম।
  • Google Guice: একটি ওপেন সোর্স DI ফ্রেমওয়ার্ক যা সহজ এবং কমপ্যাক্ট।
  • CDI (Contexts and Dependency Injection): Java EE প্ল্যাটফর্মের অংশ যা DI প্যাটার্ন প্রয়োগ করে।

সংক্ষেপে:

Dependency Injection (DI) হল একটি প্রোগ্রামিং কৌশল যা ক্লাসের নির্ভরশীলতাগুলি বাইরের উৎস থেকে ইনজেক্ট করে, যাতে কোডের লোজ কপ্লিং হয়, টেস্টিং সহজ হয় এবং রিইউজেবিলিটি বৃদ্ধি পায়। এটি ক্লাসগুলির মধ্যে সম্পর্ককে কমিয়ে দেয় এবং কোডের মান উন্নত করে।

Content added By
Promotion

Are you sure to start over?

Loading...