Android Architecture Components (ViewModel, LiveData, Room) এর সাথে Kotlin

Kotlin এবং Android Development - কটলিন (Kotlin) - Mobile App Development

381

Android Architecture Components (ViewModel, LiveData, Room) এর সাথে Kotlin

Android Architecture Components হলো একটি গ্রুপ ক্লাস এবং উপাদান যা Android অ্যাপ্লিকেশনের উন্নত এবং কার্যকরী আর্কিটেকচার গঠন করতে সাহায্য করে। এগুলি ব্যবহারে কোডের মেইনটেনেবিলিটি, টেস্টেবলিটি এবং জীবনচক্র পরিচালনা সহজ হয়। এখানে আমরা Kotlin ব্যবহার করে ViewModel, LiveData, এবং Room এর সাথে কাজ করার পদ্ধতি দেখাব।


১. ViewModel

ViewModel হলো একটি ক্লাস যা UI সম্পর্কিত ডেটা ধারণ করে এবং UI উপাদানগুলির জীবনচক্রের সাথে সম্পর্কিত থাকে। এটি UI কনটেক্সটের বাইরেও কাজ করে এবং ডেটা বজায় রাখতে সাহায্য করে।

i) ViewModel তৈরি করা

উদাহরণ:

import androidx.lifecycle.ViewModel

class MainViewModel : ViewModel() {
    var count: Int = 0

    fun increment() {
        count++
    }
}

ব্যাখ্যা:

  • এখানে MainViewModel ক্লাস তৈরি করা হয়েছে যা একটি count ভ্যারিয়েবল ধারণ করে এবং তাকে বাড়ানোর জন্য একটি মেথড increment প্রদান করা হয়েছে।

ii) ViewModel ব্যবহার করা

Activity তে ViewModel ব্যবহার:

import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.TextView

class MainActivity : AppCompatActivity() {
    private val viewModel: MainViewModel by viewModels()

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

        val textView: TextView = findViewById(R.id.textView)
        val button: Button = findViewById(R.id.button)

        button.setOnClickListener {
            viewModel.increment()
            textView.text = viewModel.count.toString()
        }
    }
}

ব্যাখ্যা:

  • এখানে MainActivity তে viewModel কে by viewModels() ব্যবহার করে ইনিশিয়ালাইজ করা হয়েছে। UI উপাদানগুলির সাথে ViewModel এর ডেটা ব্যবহৃত হচ্ছে।

২. LiveData

LiveData হলো একটি লাইফসাইকেল-সচেতন ডেটা ধারণকারী ক্লাস, যা UI উপাদানের জীবনচক্র অনুযায়ী কাজ করে। এটি পরিবর্তনশীল ডেটা কে পর্যবেক্ষণ করার সুযোগ দেয়।

i) LiveData ব্যবহার করা

উদাহরণ:

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel

class MainViewModel : ViewModel() {
    private val _count = MutableLiveData<Int>()
    val count: LiveData<Int> get() = _count

    init {
        _count.value = 0
    }

    fun increment() {
        _count.value = (_count.value ?: 0) + 1
    }
}

ব্যাখ্যা:

  • এখানে MutableLiveData ব্যবহার করা হয়েছে _count নামের একটি প্রপার্টি তৈরি করতে, যা UI-তে পরিবর্তনগুলি স্বয়ংক্রিয়ভাবে আপডেট করে।

ii) LiveData পর্যবেক্ষণ করা

Activity তে LiveData ব্যবহার:

class MainActivity : AppCompatActivity() {
    private val viewModel: MainViewModel by viewModels()

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

        val textView: TextView = findViewById(R.id.textView)
        val button: Button = findViewById(R.id.button)

        viewModel.count.observe(this) { count ->
            textView.text = count.toString()
        }

        button.setOnClickListener {
            viewModel.increment()
        }
    }
}

ব্যাখ্যা:

  • এখানে observe ফাংশন ব্যবহার করে LiveData এর পরিবর্তনগুলি পর্যবেক্ষণ করা হয়েছে এবং UI আপডেট করা হয়েছে।

৩. Room

Room হলো একটি SQLite ডেটাবেস লাইব্রেরি যা ডেটাবেসের সাথে কাজ করার জন্য একটি আবরণ প্রদান করে। এটি টাইপ নিরাপত্তা এবং মেটাডেটা ব্যবহার করে।

i) Room Entity তৈরি করা

উদাহরণ:

import androidx.room.Entity
import androidx.room.PrimaryKey

@Entity(tableName = "user_table")
data class User(
    @PrimaryKey(autoGenerate = true) val id: Long = 0,
    val name: String,
    val age: Int
)

ব্যাখ্যা:

  • এখানে User ডেটা ক্লাস তৈরি করা হয়েছে, যা Room এ একটি Entity হিসেবে কাজ করবে।

ii) Room DAO তৈরি করা

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query

@Dao
interface UserDao {
    @Insert
    suspend fun insert(user: User)

    @Query("SELECT * FROM user_table")
    suspend fun getAllUsers(): List<User>
}

ব্যাখ্যা:

  • এখানে UserDao ইন্টারফেস তৈরি করা হয়েছে, যা ডেটাবেসে ইউজারদের জন্য CRUD অপারেশন সম্পাদন করে।

iii) Room Database তৈরি করা

import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import android.content.Context

@Database(entities = [User::class], version = 1)
abstract class UserDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao

    companion object {
        @Volatile
        private var INSTANCE: UserDatabase? = null

        fun getDatabase(context: Context): UserDatabase {
            return INSTANCE ?: synchronized(this) {
                val instance = Room.databaseBuilder(
                    context.applicationContext,
                    UserDatabase::class.java,
                    "user_database"
                ).build()
                INSTANCE = instance
                instance
            }
        }
    }
}

ব্যাখ্যা:

  • এখানে UserDatabase ক্লাস তৈরি করা হয়েছে যা RoomDatabase এর সাথে সংযুক্ত। getDatabase ফাংশনটি Singleton Pattern অনুসরণ করে।

iv) Room ব্যবহার করা

class MainViewModel(application: Application) : AndroidViewModel(application) {
    private val userDao: UserDao = UserDatabase.getDatabase(application).userDao()

    fun insertUser(user: User) {
        viewModelScope.launch {
            userDao.insert(user)
        }
    }

    // Other methods to get users
}

ব্যাখ্যা:

  • এখানে insertUser ফাংশনটি একটি নতুন ইউজার যোগ করার জন্য DAO ব্যবহার করছে।

উপসংহার

Kotlin এবং Android Architecture Components (ViewModel, LiveData, Room) এর সমন্বয় ব্যবহার করে Android অ্যাপ্লিকেশন তৈরি করা সহজ এবং কার্যকরী। ViewModel UI সম্পর্কিত ডেটা ধারণ করে, LiveData UI পরিবর্তনের সাথে সামঞ্জস্য বজায় রাখে, এবং Room ডেটাবেস পরিচালনার জন্য একটি শক্তিশালী উপায় প্রদান করে।

Content added By
Promotion

Are you sure to start over?

Loading...