آموزش معماری MVVM در اندروید
معماری MVVM (Model–View–ViewModel) یکی از مهمترین و پرکاربردترین الگوهای طراحی در توسعه اپلیکیشنهای اندروید است که توسط Google بهطور رسمی در قالب Android Architecture Components پشتیبانی میشود. اگر میخواهید اپلیکیشنهایی تمیز، قابل تست و مقیاسپذیر بسازید، یادگیری معماری MVVM در اندروید تقریباً ضروری است.
در این مقاله، بهصورت کامل و قدمبهقدم معماری MVVM در اندروید را یاد میگیریم و در انتها یک مثال عملی هم پیادهسازی میکنیم.
معماری MVVM در اندروید چیست؟
معماری MVVM (Model-View-ViewModel) یکی از محبوبترین الگوهای طراحی نرمافزار در توسعه اپلیکیشنهای اندرویدی است که با هدف جداسازی منطق برنامه از رابط کاربری ایجاد شده است. این معماری باعث میشود کدها ساختاریافتهتر، قابل نگهداریتر و تستپذیرتر باشند.
در معماری MVVM، برنامه به سه بخش اصلی تقسیم میشود:
- Model: مسئول مدیریت دادهها و منطق کسبوکار است. این بخش میتواند شامل APIها، پایگاه داده و Repositoryها باشد.
- View: شامل رابط کاربری برنامه مانند Activity، Fragment یا Composableها در Jetpack Compose است. View تنها وظیفه نمایش اطلاعات به کاربر و دریافت تعاملات او را بر عهده دارد.
- ViewModel: به عنوان واسط بین Model و View عمل میکند. ViewModel دادهها را از Model دریافت کرده و به شکلی مناسب برای نمایش در View آماده میکند. همچنین تغییرات داده را مدیریت کرده و از بین رفتن اطلاعات هنگام تغییر وضعیت صفحه (مانند چرخش دستگاه) جلوگیری میکند.
یکی از مهمترین مزایای MVVM در اندروید، استفاده از کامپوننتهای Jetpack مانند ViewModel، LiveData و StateFlow است که مدیریت دادهها و بروزرسانی رابط کاربری را بسیار سادهتر میکنند.
انواع معماری های برنامه نویسی در اندروید
(MVVM (Model, View, View Model
(MVP (Model, View, Presenter
(MVC (Model, View, Controller

معماری MVVM در برابر MVP
آشنایی با معماری MVVM در اندروید
معماری MVVM یک الگوی معماری سه لایه بر پایه Model – View – ViewModel هست . شرکت گوگل به این معماری دل ( عشق ) ورزیده و کامپوننت هایی تحت عنوان android.arch برای آن منتشر کرده است .
مزایای معماری MVVM در اندروید
- جداسازی کامل منطق برنامه از رابط کاربری
- افزایش خوانایی و نگهداری کدها
- تستپذیری بهتر بخشهای مختلف برنامه
- مدیریت آسان دادهها و وضعیت صفحه
- سازگاری کامل با معماریهای مدرن اندروید
- مناسب برای پروژههای کوچک و بزرگ
مزیت های دیگر استفاده از معماری معماری MVVM در اندروید
- اجزای UI بطور کامل از منطق برنامه جدا هستند.
- منطق برنامه از عملیات دیتابیسی جدا هستند.
- خوانایی و فهم کد بسیار ساده تر می شود.
- مدیریت life cycle events کمتر برعهده برنامه نویس است. مثلا وقتی کاربر در حالت (state) مشخصی از برنامه خارج می شود و چند ساعت بعد دوباره برمی گردد، برنامه در همان حالتی است که کاربر آنرا ترک نموده است. به عبارت بهتر راه حل جایگزین استفاده از onSaveInstanceState است.

پیادهسازی MVVM و Clean Architecture در اندروید
اجزای معماری معماری 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 در اندروید

آشنایی با Design Pattern 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 و معماری Clean Architecture
در پروژههای حرفهای، معماری MVVM معمولاً به تنهایی استفاده نمیشود و با Clean Architecture ترکیب میشود. این ترکیب باعث میشود کدها ساختارمندتر، مقیاسپذیرتر و نگهداری آنها در پروژههای بزرگ بسیار آسانتر باشد.
در معماری MVVM ساده، ViewModel ممکن است مستقیماً با Repository ارتباط برقرار کند. اما با بزرگتر شدن پروژه، وابستگیها افزایش یافته و مدیریت منطق کسبوکار دشوار میشود. Clean Architecture این مشکل را با تقسیم پروژه به لایههای مستقل حل میکند.
Presentation (ViewModel)
Domain (UseCase)
Data (Repository)
ساختار پوشهها در یک پروژه حرفهای

ساختار پوشهها در یک پروژه حرفهای
جمعبندی
معماری MVVM در اندروید یکی از بهترین انتخابها برای توسعه اندروید مدرن است. با استفاده از این معماری:
- کد تمیزتر میشود
- تست راحتتر میشود
- توسعه تیمی بهتر انجام میشود
اگر در حال یادگیری اندروید هستی، MVVM را حتماً بهصورت عملی تمرین کن، چون تقریباً در تمام پروژههای واقعی استفاده میشود.