مقالات

مقایسه معماری‌های MVVM، MVP، و MVC در اندروید– ترولرن

مقایسه معماری‌های MVVM، MVP، و MVC: به عنوان الگوهای معماری متداول در توسعه اپلیکیشن‌های اندرویدی استفاده می‌شوند. این الگوها به برنامه‌نویسان کمک می‌کنند تا کد را به نحوی سازماندهی کنند که جدا بودن بخش‌های مختلف برنامه و نگهداری آنها تا حد امکان ساده و کارآمد باشد. در ادامه، تفاوت‌ها و ویژگی‌های هر یک از این معماری‌ها در زمینه توسعه اندروید بیان خواهد شد.

 

 

“ما را در اینستاگرام دنبال کنید”

در این مقاله از سری مقالات برنامه نویسی اندروید اومدیم در مورد مقایسه معماری‌های MVVM، MVP، و MVC، صحبت کنیم. پس با سایت ترولرن همراه باش.

“قبل از شروع مقاله، بگم که بعد از مطالعه این مطلب، از آموزش پروژه محور برنامه نویسی اندروید سایتمون یعنی دوره ژنرال اندروید غافل نشید.”

مقایسه معماری‌های MVVM، MVP، و MVC

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

MVC (Model-View-Controller)

  • Model (مدل):

حاوی داده‌ها و منطق کسب و کار برنامه است.
به واسطه‌های دیگر اجزا اطلاعات خود را ارائه نمی‌دهد.

  • View (نما):

مسئول نمایش داده‌ها و تعامل با کاربر است.
به Model و Controller وابسته نیست و فقط نمایش داده‌ها را دریافت می‌کند.

  • Controller (کنترل‌کننده):

بر عهده دارد که اطلاعات از Model را دریافت کرده و به View منتقل کند.
وظیفه دارد تعامل بین Model و View را مدیریت کند.

MVP (Model-View-Presenter)

  • Model (مدل):

همانند MVC وظیفه کسب و کار برنامه را دارد.

  • View (نما):

مسئول نمایش داده‌ها و تعامل با کاربر است.
به Presenter وابسته است و مستقیماً با Model ارتباط برقرار نمی‌کند.

  • Presenter (پرزنتر):

مسئول دریافت درخواست‌های کاربر از View و مدیریت ارتباط با Model است.
Presenter مستقیماً با Model ارتباط برقرار کرده و داده‌ها را از Model دریافت می‌کند و سپس آن‌ها را به View منتقل می‌کند.

MVVM (Model-View-ViewModel)

  • Model (مدل):

مانند دو معماری قبلی، وظیفه دارد که داده‌ها و منطق کسب و کار را مدیریت کند.

  • View (نما):

مسئول نمایش داده‌ها و تعامل با کاربر است.
به ViewModel وابسته است و مستقیماً با Model ارتباط برقرار نمی‌کند.

  • ViewModel (مدل-نما):

وظیفه دارد تفاوت بین Model و View را مدیریت کند.
اطلاعات را از Model دریافت کرده و به شکل مناسبی برای نما آماده می‌کند.
به View وابسته نیست و از Data Binding برای ارتباط با View استفاده می‌کند.

تفاوت‌ها و مزایا

  • MVC:

بسیار ساده و قابل فهم است.
اما با گذر زمان و افزایش اندازه برنامه، پیچیدگی افزایش می‌یابد.

  • MVP:

جداکردن مسائل مربوط به UI از منطق برنامه.
Presenter به عنوان واسطه بین View و Model عمل می‌کند.

  • MVVM:

استفاده از Data Binding می‌تواند کد را ساده‌تر و خواناتر کند.
ViewModel مستقل از View است و قابلیت تست را بهبود می‌بخشد.
افزایش انعطاف‌پذیری در ارتباط با UI.

هرکدام از این معماری‌ها مزایا و معایب خود را دارند و انتخاب بین آنها بستگی به نیازها و اولویت‌های پروژه دارد.

 

 

مثال برای معماری‌های MVVM، MVP، و MVC با کاتلین

MVC (Model-View-Controller):

مثال:

// Model
data class Product(val name: String, val price: Double, val quantity: Int)

// View
class ShoppingCartView {
    fun displayProducts(products: List<Product>) {
        // نمایش محصولات به کاربر
    }
}

// Controller
class ShoppingCartController(private val model: List<Product>, private val view: ShoppingCartView) {
    fun updateCart() {
        // پردازش اضافه کردن و حذف محصولات از سبد خرید
        view.displayProducts(model)
    }
}

MVP (Model-View-Presenter):

مثال:

// Model
data class News(val title: String, val content: String, val publishDate: String)

// View
interface NewsView {
    fun displayNews(newsList: List<News>)
}

// Presenter
class NewsPresenter(private val model: List<News>, private val view: NewsView) {
    fun loadNews() {
        // ارتباط با Model برای دریافت اخبار
        view.displayNews(model)
    }
}

MVVM (Model-View-ViewModel):

مثال:

// Model
data class Event(val title: String, val date: String, val location: String)

// ViewModel
class EventViewModel(private val model: List<Event>) {
    val formattedEvents: List<String>
        get() {
            // تبدیل داده‌های Model به یک فرمت مناسب برای نما
            return model.map { "${it.title} - ${it.date}" }
        }
}

// View
class CalendarView(private val viewModel: EventViewModel) {
    fun displayEvents() {
        // نمایش رویدادها به کاربر
        viewModel.formattedEvents.forEach { println(it) }
    }
}

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

حرف آخر

در نتیجه، انتخاب معماری مناسب برای توسعه اپلیکیشن‌های اندروید یکی از تصمیمات حیاتی برنامه‌نویسان است. هر یک از معماری‌های MVVM، MVP، و MVC دارای مزایا و معایب خود هستند. MVC سازماندهی ساده‌تری دارد، MVP به جدا کردن منطق کسب و کار از لایه‌های UI می‌پردازد و MVVM با استفاده از Data Binding انعطاف‌پذیری بیشتری در ارتباط با UI ارائه می‌دهد. انتخاب معماری باید به نیازها، اندازه و پیچیدگی پروژه بستگی داشته باشد. همچنین، نگهداری کد و امکان تست آسانی نیز در فرآیند انتخاب معماری باید در نظر گرفته شود.

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

 

‫5/5 ‫(1 نظر)
عاطفه امیری

Recent Posts

چگونه دوره آموزشی کاتلین پیشرفته می‌تواند مهارت‌های شما را ارتقاء دهد؟

دوره آموزشی کاتلین پیشرفته می‌تواند مهارت‌های شما را با بهره‌گیری از ابزارها و فناوری‌های مدرن…

4 ماه ago

مزیت‌های کاتلین نسبت به سایر زبان‌های برنامه نویسی اندروید

مزیت‌های کاتلین نسبت به سایر زبان‌های برنامه نویسی اندروید این است که سایر زبان‌ها، از…

4 ماه ago

بهینه‌سازی عملکرد اپلیکیشن‌های اندروید: راهنمای جامع و کاربردی

بهینه‌سازی عملکرد اپلیکیشن‌های اندروید یکی از مهم‌ترین فاکتورهایی است که برای کاربران در دنیای امروز…

10 ماه ago

سوالات مصاحبه‌ی استخدامی کاتلین همراه با جواب(قسمت چهارم)

مصاحبه‌ی استخدامی کاتلین یک فرصت برای ارزیابی مهارت‌ها و توانایی‌های یک برنامه‌نویس در توسعه اپلیکیشن‌های…

10 ماه ago

سوالات مصاحبه استخدام زبان کاتلین همراه با جواب(قسمت سوم)

مصاحبه استخدام زبان کاتلین یک فرصت برای ارزیابی مهارت‌ها و توانایی‌های یک برنامه‌نویس در توسعه…

10 ماه ago

سوالات مصاحبه استخدام کاتلین همراه با جواب(قسمت دوم)

مصاحبه استخدام کاتلین یک فرصت برای ارزیابی مهارت‌ها و توانایی‌های یک برنامه‌نویس در توسعه اپلیکیشن‌های…

11 ماه ago