Dependency Injection (Dagger2, Hilt) ব্যবহার

Mobile App Development - অ্যান্ড্রয়েড ডেভেলপমেন্ট (Android) - Android App Development Best Practices
247

Dependency Injection (DI) একটি সফটওয়্যার ডিজাইন প্যাটার্ন, যা কোডের ডিপেন্ডেন্সিগুলো ইঞ্জেক্ট করতে ব্যবহৃত হয়। এটি কোডকে আরও মডুলার, মেইনটেনেবল, এবং টেস্টেবল করে তোলে। Android ডেভেলপমেন্টে Dagger2 এবং এর সহজ সংস্করণ Hilt সবচেয়ে জনপ্রিয় DI ফ্রেমওয়ার্ক।

Dependency Injection (Dagger2, Hilt) ব্যবহার

নিচে Dagger2 এবং Hilt ব্যবহার করে Dependency Injection ইমপ্লিমেন্ট করার ধাপে ধাপে বিশ্লেষণ এবং উদাহরণ দেওয়া হলো:


Dagger2 ব্যবহার করা

Dagger2 একটি স্ট্যাটিক DI ফ্রেমওয়ার্ক, যা কম্পাইল টাইমে ডিপেন্ডেন্সি ইনজেকশন কোড জেনারেট করে। এটি পারফরম্যান্স এবং স্থিতিশীলতার দিক থেকে অত্যন্ত কার্যকর।

১. Dagger2 সেটআপ করা

প্রথমে, আপনার প্রজেক্টে Dagger2 যোগ করার জন্য Gradle ডিপেনডেন্সি যুক্ত করুন:

dependencies {
    implementation 'com.google.dagger:dagger:2.x'
    kapt 'com.google.dagger:dagger-compiler:2.x'
}

২. Dagger2 Component এবং Module তৈরি করা

Dagger2 ব্যবহার করে DI ইমপ্লিমেন্ট করতে হলে, আপনাকে Component এবং Module তৈরি করতে হবে।

উদাহরণ: Dagger2 Module তৈরি করা

kotlin

Copy code

@Module
class NetworkModule {

    @Provides
    fun provideRetrofit(): Retrofit {
        return Retrofit.Builder()
            .baseUrl("https://api.example.com")
            .addConverterFactory(GsonConverterFactory.create())
            .build()
    }
}

এখানে NetworkModule একটি Dagger2 Module হিসেবে কাজ করছে, যা Retrofit অবজেক্ট প্রদান করে।

উদাহরণ: Dagger2 Component তৈরি করা

@Component(modules = [NetworkModule::class])
interface AppComponent {
    fun inject(activity: MainActivity)
}

AppComponent হল একটি Dagger Component, যা NetworkModule ব্যবহার করে MainActivity তে ডিপেন্ডেন্সি ইঞ্জেক্ট করে।

৩. Activity এবং Class এ ডিপেন্ডেন্সি ইঞ্জেক্ট করা

উদাহরণ: ডিপেন্ডেন্সি ইঞ্জেক্ট করা

class MainActivity : AppCompatActivity() {

    @Inject
    lateinit var retrofit: Retrofit

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        DaggerAppComponent.create().inject(this)

        // এখন Retrofit ব্যবহার করা যাবে
        retrofit.create(ApiService::class.java)
    }
}

ব্যাখ্যা:

  • @Inject অ্যানোটেশন ব্যবহার করে Retrofit ইঞ্জেক্ট করা হয়েছে।
  • DaggerAppComponent থেকে inject() মেথড ব্যবহার করে ডিপেন্ডেন্সি ইঞ্জেক্ট করা হয়েছে।

Hilt ব্যবহার করা

Hilt হল Dagger2 এর একটি সহজ সংস্করণ, যা Android এর জন্য DI ইমপ্লিমেন্ট করার প্রক্রিয়াকে আরও সহজ করে। এটি সরাসরি Android লাইফসাইকেল কম্পোনেন্ট (যেমন Activity, Fragment, ViewModel) এর সাথে ইন্টিগ্রেট করা যায়।

১. Hilt সেটআপ করা

প্রজেক্টে Hilt যুক্ত করতে Gradle ডিপেনডেন্সি যোগ করুন:

plugins {
    id 'kotlin-kapt'
    id 'dagger.hilt.android.plugin'
}

dependencies {
    implementation 'com.google.dagger:hilt-android:2.x'
    kapt 'com.google.dagger:hilt-compiler:2.x'
}

২. Application Class এ Hilt অ্যানোটেশন যোগ করা

@HiltAndroidApp
class MyApp : Application()

@HiltAndroidApp অ্যানোটেশন ব্যবহার করে Application Class কে Hilt দিয়ে প্রসেস করা হয়, যা সমস্ত কম্পোনেন্টে DI সাপোর্ট দেয়।

৩. Module তৈরি করা

Hilt এর মাধ্যমে ডিপেন্ডেন্সি ইঞ্জেক্ট করতে, @Module এবং @InstallIn অ্যানোটেশন ব্যবহার করে Module তৈরি করতে হবে।

@Module
@InstallIn(SingletonComponent::class)
object NetworkModule {

    @Provides
    @Singleton
    fun provideRetrofit(): Retrofit {
        return Retrofit.Builder()
            .baseUrl("https://api.example.com")
            .addConverterFactory(GsonConverterFactory.create())
            .build()
    }
}

৪. Activity বা Fragment এ ডিপেন্ডেন্সি ইঞ্জেক্ট করা

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

    @Inject
    lateinit var retrofit: Retrofit

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // এখন Retrofit ব্যবহার করা যাবে
    }
}

@AndroidEntryPoint অ্যানোটেশন ব্যবহার করে MainActivity কে Hilt দিয়ে প্রসেস করা হয়েছে, এবং @Inject এর মাধ্যমে Retrofit ইঞ্জেক্ট করা হয়েছে।

৫. ViewModel এ ডিপেন্ডেন্সি ইঞ্জেক্ট করা

@HiltViewModel
class MyViewModel @Inject constructor(
    private val retrofit: Retrofit
) : ViewModel() {

    fun fetchData() {
        // Retrofit ব্যবহার করে ডেটা ফেচ করা
    }
}

৬. Fragment এ Hilt ইন্টিগ্রেশন করা

@AndroidEntryPoint
class MyFragment : Fragment() {

    private val viewModel: MyViewModel by viewModels()

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        viewModel.fetchData()
    }
}

Dagger2 এবং Hilt ব্যবহার করার সুবিধা

১. Code Reusability এবং Modularity বৃদ্ধি করা

  • ডিপেন্ডেন্সি গুলো সেন্ট্রালাইজড ভাবে পরিচালনা করা যায়।
  • কোড সহজে রিইউজ এবং মডুলার করা যায়, যা মেইনটেনেন্স সহজ করে।

২. Testability এবং Maintainability বাড়ানো

  • ডিপেন্ডেন্সি ইনজেকশন ব্যবহার করে কোডে মক অবজেক্ট ইঞ্জেক্ট করা যায়, যা ইউনিট টেস্টিং সহজ করে।
  • কোডের স্ট্রাকচার পরিষ্কার থাকে এবং সহজে টেস্ট করা যায়।

৩. Lifecycle Management এবং Performance উন্নত করা

  • Hilt সরাসরি Android এর Lifecycle Component গুলোর সাথে ইন্টিগ্রেট হয়, যা পারফরম্যান্স এবং স্ট্যাবিলিটি বৃদ্ধি করে।
  • Dagger2 এর মাধ্যমে কম্পাইল টাইমে DI কোড জেনারেট হওয়ায় রuntime পারফরম্যান্স বৃদ্ধি পায়।

উপসংহার

Dagger2 এবং Hilt ব্যবহার করে Dependency Injection ইমপ্লিমেন্ট করলে Android অ্যাপের কোড আরও মডুলার, মেইনটেনেবল, এবং টেস্টেবল হয়। Dagger2 ডিপেন্ডেন্সি ইঞ্জেকশন প্রক্রিয়াকে স্ট্যাটিক এবং পারফরম্যান্ট করে তোলে, যেখানে Hilt একটি সরলীকৃত DI ফ্রেমওয়ার্ক হিসেবে কাজ করে, যা Android লাইফসাইকেল কম্পোনেন্টের সাথে সরাসরি ইন্টিগ্রেট হয়।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...