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 ডেটাবেস পরিচালনার জন্য একটি শক্তিশালী উপায় প্রদান করে।
Read more