Dependency Injection এর মৌলিক ধারণা

Microsoft Technologies - এএসপি ডট নেট কোর (ASP.Net Core) Dependency Injection (DI) |
233
233

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


Dependency Injection এর মূল ধারণাগুলো

Dependency কী?

Dependency হলো একটি ক্লাসের এমন কোনো অবজেক্ট বা সার্ভিস, যা সেই ক্লাসের কার্য সম্পাদনে প্রয়োজন হয়। উদাহরণস্বরূপ, একটি ক্লাস যদি ডেটা রিটার্ন করার জন্য অন্য একটি ক্লাসের ওপর নির্ভরশীল হয়, তবে সেই ক্লাসটি তার Dependency

public class DataProcessor
{
    private DatabaseService _dbService;

    public DataProcessor()
    {
        _dbService = new DatabaseService(); // Dependency
    }
}

উপরের কোডে DataProcessor ক্লাস সরাসরি DatabaseService তৈরি করছে, যা সরাসরি ডিপেনডেন্সি তৈরি করার উদাহরণ।

Injection কী?

Injection হলো ডিপেনডেন্সি সরাসরি ক্লাসের মধ্যে তৈরি না করে, এটি বাইরে থেকে সরবরাহ করার প্রক্রিয়া।

public class DataProcessor
{
    private readonly DatabaseService _dbService;

    public DataProcessor(DatabaseService dbService) // Dependency Injected
    {
        _dbService = dbService;
    }
}

উপরের উদাহরণে, DatabaseService অবজেক্টটি কনস্ট্রাক্টরের মাধ্যমে সরবরাহ করা হয়েছে। এটি DI এর একটি উদাহরণ।

Inversion of Control (IoC)

DI মূলত Inversion of Control (IoC) এর বাস্তবায়ন। IoC মানে ক্লাস নিজে তার নির্ভরশীলতা নিয়ন্ত্রণ না করে তা বাইরে থেকে সরবরাহ করা হয়। IoC Container বা Service Container এই দায়িত্ব পালন করে।


Dependency Injection এর প্রকারভেদ

Constructor Injection

Dependency সরবরাহ করার জন্য কনস্ট্রাক্টর ব্যবহার করা হয়। এটি সবচেয়ে সাধারণ এবং জনপ্রিয় পদ্ধতি।

public class DataProcessor
{
    private readonly IDataService _dataService;

    public DataProcessor(IDataService dataService)
    {
        _dataService = dataService;
    }
}

Property Injection

Dependency সরবরাহ করার জন্য একটি Public Property ব্যবহার করা হয়।

public class DataProcessor
{
    public IDataService DataService { get; set; }
}

Method Injection

Dependency সরবরাহ করার জন্য একটি মেথড ব্যবহার করা হয়।

public class DataProcessor
{
    public void ProcessData(IDataService dataService)
    {
        dataService.GetData();
    }
}

DI ব্যবহারের প্রয়োজনীয়তা

  • Coupling হ্রাস করা: DI কোডের Tight Coupling কমায়, যা কোডের মডুলারিটি বাড়ায়।
  • Unit Testing সহজ করা: DI ব্যবহার করলে Mock Objects ব্যবহার করে সহজে টেস্ট করা যায়।
  • Reusable এবং Maintainable কোড: DI ব্যবহার করলে কোড পুনর্ব্যবহারযোগ্য এবং সহজে রক্ষণাবেক্ষণযোগ্য হয়।

DI এর উদাহরণ

সরাসরি Dependency ব্যবহার (Poor Design)

public class DataProcessor
{
    private DatabaseService _dbService = new DatabaseService();

    public void ProcessData()
    {
        _dbService.SaveData();
    }
}

এখানে DataProcessor সরাসরি DatabaseService তৈরি করছে, যা Tightly Coupled ডিজাইন।

Dependency Injection ব্যবহার (Good Design)

public class DataProcessor
{
    private readonly IDatabaseService _dbService;

    public DataProcessor(IDatabaseService dbService)
    {
        _dbService = dbService;
    }

    public void ProcessData()
    {
        _dbService.SaveData();
    }
}

এখানে IDatabaseService ইন্টারফেস ব্যবহার করে Dependency Inject করা হয়েছে, যা Loosely Coupled ডিজাইন।


DI ব্যবহারের সুবিধা

  • Modular Design: বিভিন্ন কম্পোনেন্ট আলাদাভাবে ব্যবস্থাপনা করা যায়।
  • Testability: DI ব্যবহার করে কোড সহজেই টেস্ট করা যায়।
  • Maintainability: Dependency পরিবর্তন করা সহজ হয়।
  • Reusability: DI এর মাধ্যমে একবার তৈরি করা সার্ভিস বা অবজেক্ট অন্যত্র সহজেই ব্যবহার করা যায়।

Dependency Injection একটি শক্তিশালী ডিজাইন প্যাটার্ন, যা ASP.NET Core এর কোডিং স্ট্যান্ডার্ড এবং আর্কিটেকচারে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। এটি অ্যাপ্লিকেশনকে মডুলার, স্কেলেবল এবং টেস্টযোগ্য করে তোলে।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion