آموزش معماری MVVM در اندروید
معماری MVVM (Model–View–ViewModel) یکی از مهمترین و پرکاربردترین الگوهای طراحی در توسعه اپلیکیشنهای اندروید است که توسط Google بهطور رسمی در قالب Android Architecture Components پشتیبانی میشود. اگر میخواهید اپلیکیشنهایی تمیز، قابل تست و مقیاسپذیر بسازید، یادگیری MVVM تقریباً ضروری است.
در این مقاله، بهصورت کامل و قدمبهقدم MVVM را یاد میگیریم و در انتها یک مثال عملی هم پیادهسازی میکنیم.

انواع معماری های برنامه نویسی در اندروید
(MVVM (Model, View, View Model
(MVP (Model, View, Presenter
(MVC (Model, View, Controller
معماری MVVM چیست؟
MVVM مخفف سه بخش است:
- Model → مدیریت دادهها (API، دیتابیس، …)
- View → رابط کاربری (Activity / Fragment / Compose)
- ViewModel → واسط بین View و Model
هدف اصلی این معماری:
👉 جدا کردن منطق برنامه از UI
آشنایی با معماری MVVM در اندروید
معماری MVVM یک الگوی معماری سه لایه بر پایه Model – View – ViewModel هست . شرکت گوگل به این معماری دل ( عشق ) ورزیده و کامپوننت هایی تحت عنوان android.arch برای آن منتشر کرده است .
مزیت های استفاده از معماری MVVM
- اجزای UI بطور کامل از منطق برنامه جدا هستند.
- منطق برنامه از عملیات دیتابیسی جدا هستند.
- خوانایی و فهم کد بسیار ساده تر می شود.
- مدیریت life cycle events کمتر برعهده برنامه نویس است. مثلا وقتی کاربر در حالت (state) مشخصی از برنامه خارج می شود و چند ساعت بعد دوباره برمی گردد، برنامه در همان حالتی است که کاربر آنرا ترک نموده است. به عبارت بهتر راه حل جایگزین استفاده از onSaveInstanceState است.

اجزای معماری MVVM
1. Model
مدل مسئول دادههاست. این دادهها میتوانند از منابع مختلف بیایند:
- API (مثل Retrofit)
- دیتابیس (Room)
- فایل محلی
📌 مثال:
data class User(
val id: Int,
val name: String
)
2. View
View همان UI است که کاربر میبیند:
- Activity
- Fragment
- یا Jetpack Compose
وظیفه View:
- نمایش دادهها
- ارسال event به ViewModel
📌 نکته مهم:
❌ View نباید منطق بیزینسی داشته باشد
3. ViewModel
ViewModel مغز اصلی اپلیکیشن است.
وظایف:
- گرفتن داده از Model
- آمادهسازی داده برای UI
- مدیریت state
📌 ویژگی مهم:
ViewModel به lifecycle وابسته نیست → از بین نمیرود هنگام rotation
جریان داده در MVVM
View → ViewModel → Model
↓
View ← ViewModel ← Model
ابزارهای مهم MVVM در اندروید
1. ViewModel
از کتابخانه:
androidx.lifecycle.ViewModel
2. LiveData
برای مدیریت دادههای reactive
LiveData<T>
3. StateFlow (مدرنتر)
جایگزین LiveData در پروژههای جدید
4. Retrofit
برای API
5. Room
برای دیتابیس
🛠 مثال عملی MVVM (نمایش لیست کاربران)
هدف:
دریافت لیست کاربران از API و نمایش در UI
1. اضافه کردن dependencyها
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.6.1"
implementation "com.squareup.retrofit2:retrofit:2.9.0"
2. Model (API + Data)
API Interface:
interface ApiService {
@GET("users")
suspend fun getUsers(): List<User>
}
3. Repository (بین Model و ViewModel)
class UserRepository(private val api: ApiService) {
suspend fun getUsers(): List<User> {
return api.getUsers()
}
}
4. ViewModel
class UserViewModel(private val repository: UserRepository) : ViewModel() {
private val _users = MutableLiveData<List<User>>()
val users: LiveData<List<User>> = _users
fun fetchUsers() {
viewModelScope.launch {
try {
val result = repository.getUsers()
_users.value = result
} catch (e: Exception) {
// handle error
}
}
}
}
5. View (Activity)
class MainActivity : AppCompatActivity() {
private lateinit var viewModel: UserViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val api = Retrofit.Builder()
.baseUrl("https://example.com/")
.build()
.create(ApiService::class.java)
val repository = UserRepository(api)
viewModel = ViewModelProvider(
this,
ViewModelFactory(repository)
)[UserViewModel::class.java]
viewModel.users.observe(this) { users ->
// update UI
println(users)
}
viewModel.fetchUsers()
}
}
6. ViewModelFactory
class ViewModelFactory(
private val repository: UserRepository
) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
return UserViewModel(repository) as T
}
}
نسخه مدرن با StateFlow
class UserViewModel(private val repository: UserRepository) : ViewModel() {
private val _users = MutableStateFlow<List<User>>(emptyList())
val users = _users.asStateFlow()
fun fetchUsers() {
viewModelScope.launch {
_users.value = repository.getUsers()
}
}
}
مزایای MVVM
✔ جدا شدن UI از logic
✔ تستپذیری بالا
✔ نگهداری آسان
✔ مناسب برای پروژههای بزرگ
✔ سازگار با Jetpack Compose
⚠️ معایب MVVM
❌ پیچیدگی بیشتر نسبت به MVC
❌ نیاز به boilerplate code
❌ یادگیری اولیه سختتر
نکات حرفهای
✔ از Repository Pattern همیشه استفاده کن
✔ از StateFlow به جای LiveData در پروژههای جدید استفاده کن
✔ از Hilt (DI) برای تزریق وابستگیها استفاده کن
✔ UI را کاملاً dumb نگه دار
MVVM + Clean Architecture
در پروژههای حرفهای، MVVM با Clean ترکیب میشود:
Presentation (ViewModel)
Domain (UseCase)
Data (Repository)
جمعبندی
معماری MVVM یکی از بهترین انتخابها برای توسعه اندروید مدرن است. با استفاده از این معماری:
- کد تمیزتر میشود
- تست راحتتر میشود
- توسعه تیمی بهتر انجام میشود
اگر در حال یادگیری اندروید هستی، MVVM را حتماً بهصورت عملی تمرین کن، چون تقریباً در تمام پروژههای واقعی استفاده میشود.