جستجو برای:
سبد خرید 0
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
ورود
گذرواژه خود را فراموش کرده اید؟
عضویت

اطلاعات شخصی شما برای پردازش سفارش شما استفاده می‌شود، و پشتیبانی از تجربه شما در این وبسایت، و برای اهداف دیگری که در سیاست حفظ حریم خصوصی توضیح داده شده است.

ارسال مجدد کد یکبار مصرف (00:60)
  • 02188945907
  • info@amooznegar.com
  • لیست علاقه مندی ها
آکادمی آموزنگار
  • خانه
  • دوره های آموزشی
    • دوره های حضوری و آنلاین
      • دوره جامع برنامه نویسی اندروید
      • دوره جامع برنامه نویسی فلاتر
      • دوره برنامه نویسی React Native
      • دوره آموزشی برنامه نویسی iOS
    • دوره های متخصص و حرفه ای
      • دوره متخصص اندروید (پروژه محور)
      • دوره متخصص فلاتر (پروژه محور)
      • دوره آموزش امنیت در اندروید
      • دوره درآمدزایی دلاری از گوگل پلی در ایران
  • آموزش رایگان
    • دوره رایگان اندروید
    • دوره رایگان فلاتر
  • مشاورهجدید
  • دوره VIP
  • وبلاگ
شروع کنید
آخرین اطلاعیه ها
لطفا برای نمایش اطلاعیه ها وارد شوید
0

وبلاگ

آکادمی آموزنگار > اخبار > برنامه نویسی > اندروید > آموزش معماری MVVM در اندروید

آموزش معماری MVVM در اندروید

1399-08-25
ارسال شده توسط آموزنگار
اندروید
آموزش معماری MVVM در اندروید

امروزه استفاده و پیاده سازی معماری های برنامه نویسی جزو اولویت های برنامه نویسان حرفه ای میباشد از همین رو در چندین سال گذشته معماری هایی مانند MVC , MVP , معماری MVVM و Clean architecture  وارد توسعه اپلیکیشن های اندروید شده اند.از همین رو برای اینکه اپلیکیشنی قوی , گسترش پذیر و قابل تست داشته باشیم میبایستی معماری مناسبی برای اپلیکیشن پیاده سازی کنیم.

انواع معماری های برنامه نویسی در اندروید

(MVVM (Model, View, View Model

(MVP (Model, View, Presenter

(MVC (Model, View, Controller

آشنایی با معماری MVVM در اندروید

معماری MVVM یک الگوی معماری سه لایه بر پایه Model – View – ViewModel هست . شرکت گوگل به این معماری دل ( عشق ) ورزیده و کامپوننت هایی تحت عنوان android.arch برای آن منتشر کرده است .

معماری MVVM در اندروید

مزیت های استفاده از معماری MVVM

  • اجزای UI بطور کامل از منطق برنامه جدا هستند.
  • منطق برنامه از عملیات دیتابیسی جدا هستند.
  • خوانایی و فهم کد بسیار ساده تر می شود.
  • مدیریت life cycle events کمتر برعهده برنامه نویس است. مثلا وقتی کاربر در حالت (state) مشخصی از برنامه خارج می شود و چند ساعت بعد دوباره برمی گردد، برنامه در همان حالتی است که کاربر آنرا ترک نموده است. به عبارت بهتر راه حل جایگزین استفاده از onSaveInstanceState است.

معماری MVVM چیست ؟

MVVM مخفف Model، View، ViewModel می‌باشد.

Model، View، ViewModel  یک الگوی معماری برنامه است که توسط جان گاسمن که  به عنوان جایگزینی برای الگوهای MVC و MVP هنگام استفاده از  Data Binding پیشنهاد شده است. MVVM یک الگوی طراحی معماری نرم افزار است که جداسازی رابط کاربری از business logic و مدل داده (Data model) برنامه را بهبود می دهد.

مدل (Model)

لایه مدل می تواند شامل دسترسی به داده ها , دیتابیس , مدل ها و Repository ها باشد .مدل یه لایه ارائه دهنده  و بروز رسانی اطلاعات است .

داده‌ها را می‌توان از منابع مختلف بازیابی کرد، به عنوان مثال:

  • RestFull API
  • SQLite db
  • Handles broadcast
  • Shared Preferences
  • Firebase

Model از View یا ViewModel اطلاعی ندارد و به طور مستقل کار میکند. اگر یک برنامه‌ی  که قبلاً بر اساس الگوی MVC یا MVP ساخته شده است، به MVVM منتقل کنید ، لایه‌ی Model به احتمال زیاد نیازی به تغییر نخواهد داشت چون وابسته به لایه های دیگر نبوده و براحتی قابل انتقال می باشد.

ویو (View)

ویو همان صفحه ای است که کاربر آن را می بیند(UI) که در اپلیکیشن های اندروید XML میباشد که در اکتیویتی و فرگمنت قابل استفاده می باشند.در معماری MVVM لایه View  و مدل ارتباطی با هم ندارند و View با ViewModel در ارتباط است.

چگونه memory Leak را در برنامه اندروید خود برطرف کنیم؟
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند

در  View میتوان کارهای زیر را انجام داد:

  • نمایش منو ها Menu
  • مجوز ها Permissions
  • رویداد ها Event Listener
  • نمایش دیالوگ ها
  • نمایش Toast و SnackBar
  • Working with Android View and Widget
  • Start Activities
  • و تمام کارهای مرتبط با Context

ویو مدل (ViewModel)

ViewModel شما اطلاعاتی است که View به آنها نیاز دارد.همانطور که از نام آن مشخص است ٰViewModel پل ارتباطی ما بین View و Model است. روال کار به این صورت است که مدل دیتا ها را واکشی میکند و در اختیار  ViewModel قرار می دهد و سپس ViewModel آن را در View نمایش می دهد. کلاس های ViewModel بصورت POJO هستند که میتوانند بطور مستقل نیز اجرا شوند و قابل تست هستند

از جمله مزایای ViewModel می توان به موارد زیر اشاره کرد :

  • استفاده مجدد از کد (Code reuse)
  • تست نویسی آسان
  • Bind کردن دیتاها به UI
  • قابلیت نگه داری آسان

وظایف ViewModel :

  • نمایش اطلاعات
  • منتشر کردن وضعیت دیتاها مانند  ProgressBar  , نمایش خطاها و  …
  •  مدیریت نمایش/مخفی نمودن کنترل ها
  • مدیریت Validation کنترل ها
  • اجرای متدهای Model
  • نمایش اطلاعات خروحی Model در View

ViewModel ها فقط باید درباره‌ی Context  اطلاعات داشته باشد. Context  می‌تواند شامل موارد زیر باشند :

  • اجرای اکتیویتی جدید start Activity
  • ‌Bind کردن سرویس ها
  • ارسال سرویس های Broadcast
  • Register  کردن سرویس های Broadcast
  • استفاده از منابع Resource

کارهایی که نباید در ViewModel انجام داد شامل موارد زیر است :

  • نمایش دیالوگ ها Dialog
  • Start کردن اکتیویتی ها
  • inflate کردن لایوت ها برای View ها

تفاوت  MVVM با MVP:

  • لایه ViewModel بجای لایه Presenter در لایه میانی است.
  • Presenter متصل به View  است اما ViewModel متصل به View  نیست.
  • Presenter و View رابطه 1 به 1 دارند.
  • ViewModel  اطلاعی ندارد که View در حال گوش دادن به آن است.

دو مدل پیاده سازی معماری MVVM در اندروید :

  • DataBinding
  • RxJava

Data Binding در اندروید از جمله کتابخانه های مشهور در JetPack اندروید میباشد که به منظور اتصال دادن داده ها بطور مستقیم در Xml Layout است. حتما پیشنهاد میشود قبل از اینکه معماری MVVM را شروع کنید با کتابخانه DataBinding آشنا شوید.

مثال : ما در این مثال قصد داریم یک صفحه ورود کاربران را پیاده سازی کنیم و در صورتی که کاربر اطلاعات را وارد نکرد و یا اینکه ایمیل معتبر را وارد نکرد با پیغام ها مواجه شود و در صورت درست بودن اطلاعات پیغام خوش آمد گویی نمایش داده می شود

پروسس ها و چرخه حیاط اپلیکیشن
خواندن این مقاله
قدرت گرفته از افزونه نوشته‌های مرتبط هوشمند

چگونه ممکن است به برخی از کلاس ها بدون داشتن مرجع از آن اطلاع داده شود؟

  • با استفاده از Two Way Data Binding
  • با استفاده از LiveData
  • با استفاده از RxJava

از جمله موارد مهم قابل اشاره این است که دیگر نیازی به استفاده از interface و یا کتابخانه هایی مانند  EventBus نیست و LiveData اینکار را برعهده می گیرد.

پیاده‌سازی یک مثال عملی MVVM با کاتلین :

در این مثال، یک اپلیکیشن ساده برای نمایش لیست کاربران از طریق MVVM پیاده‌سازی می‌کنیم.

1. اضافه کردن وابستگی‌ها

در فایل build.gradle (Module: app), موارد زیر را اضافه کنید:

dependencies {
    implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.2"
    implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.6.2"
    implementation "androidx.recyclerview:recyclerview:1.3.2"
}

2. ایجاد کلاس Model

یک کلاس داده‌ای برای کاربران ایجاد می‌کنیم:

data class User(val id: Int, val name: String)

3. ایجاد Repository برای مدیریت داده‌ها

class UserRepository {
    fun getUsers(): List<User> {
        return listOf(
            User(1, "علی"),
            User(2, "زهرا"),
            User(3, "محمد")
        )
    }
}

4. ایجاد ViewModel

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

class UserViewModel : ViewModel() {
    private val repository = UserRepository()
    private val _users = MutableLiveData<List<User>>()
    val users: LiveData<List<User>> get() = _users

    fun fetchUsers() {
        _users.value = repository.getUsers()
    }
}

5. ایجاد فایل XML Layout برای نمایش لیست کاربران

در res/layout/activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

6. ایجاد Adapter برای RecyclerView

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView

class UserAdapter(private val users: List<User>) : RecyclerView.Adapter<UserAdapter.UserViewHolder>() {

    class UserViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val nameTextView: TextView = view.findViewById(android.R.id.text1)
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): UserViewHolder {
        val view = LayoutInflater.from(parent.context)
            .inflate(android.R.layout.simple_list_item_1, parent, false)
        return UserViewHolder(view)
    }

    override fun onBindViewHolder(holder: UserViewHolder, position: Int) {
        holder.nameTextView.text = users[position].name
    }

    override fun getItemCount(): Int = users.size
}

7. مقداردهی اولیه در Activity

import android.os.Bundle
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView

class MainActivity : AppCompatActivity() {
    private val userViewModel: UserViewModel by viewModels()
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        val recyclerView: RecyclerView = findViewById(R.id.recyclerView)
        recyclerView.layoutManager = LinearLayoutManager(this)
        
        userViewModel.users.observe(this) { users ->
            recyclerView.adapter = UserAdapter(users)
        }
        
        userViewModel.fetchUsers()
    }
}

نتیجه‌گیری

در این مقاله، معماری MVVM را در اندروید با کاتلین بررسی کردیم و یک مثال عملی برای نمایش لیست کاربران پیاده‌سازی نمودیم. این معماری باعث بهبود ساختار کد، افزایش خوانایی و کاهش وابستگی بین اجزا می‌شود. استفاده از LiveData و ViewModel به بهبود عملکرد و مدیریت بهتر چرخه حیات کمک می‌کند.

قبلی 5 پلاگین ضروری اندروید استودیو که باید هر برنامه نویسی آنها را داشته باشد
بعدی آیا یادگیری برنامه نویسی اندروید سخت است؟

دیدگاهتان را بنویسید لغو پاسخ

جستجو برای:
دسته‌ها
  • GoLang
  • jetpack compose
  • PHP
  • اپلیکیشن
  • امنیت
  • اندروید
  • اوپن سورس
  • برنامه نویسی
  • برنامه نویسی iOS
  • برنامه نویسی react native
  • پادکست صوتی
  • تکنولوژی
  • جاوا
  • طراح رابط کاربری
  • طراحی رابط کاربری
  • طراحی وب
  • عمومی
  • فریلنسر
  • فلاتر
  • فناوری
  • کاتلین
  • کتاب های آموزشی
  • کسب و کار
  • هوش مصنوعی
  • وردپرس
برچسب‌ها
admob coroutine dagger dagger-hilt jetpack nft rxandroid rxjava spring swift ارز دیجیتال امنیت در اندروید دارت فایربیس فوشیا مصاحبه کاری معماری mvi نقشه راه برنامه نویسی کاتلین گوگل

آکادمی آموزنگار، جایی برای آغاز یک سفر شگفت‌انگیز در دنیای برنامه‌نویسی است. آموزنگار تلاش می‌کند تا هر فردی را از هر سطحی از زندگی و تجربه به دنیای جذاب برنامه‌نویسی وارد کند.

دسترسی سریع
  • درباره ما
  • تماس با ما
  • حریم خصوصی
  • سوالات متداول
نمادها
شبکه های اجتماعی
Facebook Twitter Youtube icon--white Whatsapp

تهران، میدان ولی عصر،خیابان شهیدان سازش،کوچه سوم پلاک 5 طبقه سوم واحد 31

021-88945907

تمامی حقوق برای آکادمی آموزنگار محفوظ می باشد

اشتراک گذاری در شبکه های اجتماعی
ارسال به ایمیل
https://amooznegar.com/?p=11031
ورود
استفاده از شماره تلفن
استفاده از آدرس ایمیل
آیا هنوز عضو نشده اید؟ ثبت نام کنید
بازیابی رمز عبور
استفاده از شماره تلفن
استفاده از آدرس ایمیل
ثبت نام
استفاده از شماره تلفن
استفاده از ایمیل
قبلا عضو شده اید؟ ورود به سیستم
محافظت توسط   
مرورگر شما از HTML5 پشتیبانی نمی کند.

سوالی دارید؟ از ما بپرسید، کارشناسان ما در اسرع وقت با شما تماس می گیرند.

آموزنگار

آکادمی آموزنگار

  • 021-88945907
  • شنبه تا چهارشنبه از ساعت 8 تا 17
  • info@amooznegar.com