مقالات

آموزش معماری MVP در اندروید – ترولرن

معماری MVP در اندروید (Model-View-Presenter) یک الگوی طراحی است که در توسعه برنامه‌های اندروید استفاده می‌شود. این الگو با تقسیم کد به سه بخش اصلی، یعنی Model، View و Presenter، امکان جداگانه‌سازی منطق کسب و کار، نمایش و مدیریت داده را فراهم می‌کند. این جداسازی منجر به کد بهتر سازماندهی شده، قابلیت تست بهتر و انعطاف‌پذیری بیشتر می‌شود.

 

 

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

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

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

توی دوره ژنرال صفر تا صد معماری MVP در اندروید رو در فصل معماری‌ها کامل توضیح دادیم و همچنین توی پروژه های دیجی کالا و اسنپ فود به صورت عملی و پروژه محور از معماری MVP  استفاده کردیم و بطور کامل اون رو آموزش دادیم.

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

معماری MVP در اندروید (Model-View-Presenter) یک الگوی طراحی معماری است که برای توسعه برنامه‌های اندروید استفاده می‌شود. این معماری به ما کمک می‌کند تا کد را به بخش‌های مجزا تقسیم کنیم و از اصول جداگانه‌سازی منطق کسب و کار، نمایش و مدیریت داده پیروی کنیم.

در معماری MVP، برنامه به سه بخش اصلی تقسیم می‌شود:

  • Model

این بخش مسئولیت‌های مربوط به داده‌ها و منطق کسب و کار را بر عهده دارد. این شامل کلاس‌ها و رابط‌ها برای دسترسی به داده‌ها (مانند پایگاه داده، وب سرویس و غیره) و پردازش منطق کسب و کار است.

  • View

این بخش مسئولیت نمایش داده‌ها و دریافت ورودی کاربر را بر عهده دارد. نمایش اطلاعات به کاربر و برقراری ارتباط با کاربر از طریق واسط‌های کاربری (مانند Activity و Fragment در اندروید) در این بخش انجام می‌شود.

  • Presenter

این بخش واسط بین Model و View است و مسئولیت هندل کردن واسط‌های کاربری و ارتباط با Model را دارد. Presenter وظیفه برقراری ارتباط با Model را برای دریافت داده‌ها و انجام عملیات کسب و کار، و همچنین ارتباط با View را برای به‌روزرسانی و نمایش داده‌ها دارد.

در معماری MVP، داده‌ها از Model به Presenter منتقل می‌شوند، سپس Presenter داده‌ها را به View ارسال می‌کند تا نمایش داده شوند. همچنین، وقتی کاربر با View تعامل می‌کند (مانند کلیک کردن بر روی یک دکمه)، View اطلاعات را به Presenter ارسال می‌کند و Presenter متناسب با این ورودی، عملیات مناسب را روی Model انجام می‌دهد.

استفاده از معماری MVP در برنامه‌های اندروید مزایایی مانند جداکردن منطق کسب و کار از نمایش (Separation of Concerns) و افزایش قابلیت تست و قابلیت انعطاف‌پذیری را به همراه دارد.

مثال برای معماری MVP در اندروید

بهترین روش برای درک بهتر معماری MVP، ارائه یک مثال ساده است. در این مثال، فرض کنید شما یک برنامه‌ی ساده‌ی لیست وظایف (To-Do List) در اندروید می‌سازید.

  • Model

ساختار داده برای نگهداری وظایف را پیاده‌سازی می‌کنید، مانند یک کلاس Task که شامل عنوان و وضعیت وظیفه است.
یک منبع داده (مانند پایگاه داده SQLite) را برای ذخیره و بازیابی وظایف پیاده‌سازی می‌کنید. این قسمت به عنوان Model عمل می‌کند.

  • View

یک Activity به نام TaskListActivity ایجاد می‌کنید که لیست وظایف را به کاربر نمایش می‌دهد.
در این Activity، یک ListView یا RecyclerView برای نمایش وظایف استفاده می‌کنید.
یک رابط (Interface) به نام TaskListView تعریف می‌کنید که متد‌هایی مثل showTasks و showErrorMessage را دارد. این رابط وظیفه برقراری ارتباط با Presenter را دارد.

  • Presenter

یک Presenter به نام TaskListPresenter ایجاد می‌کنید که وظیفه‌ی دریافت وظایف از Model و ارسال آنها به View را دارد.
این Presenter TaskListView را به عنوان واسط دریافت می‌کند و با استفاده از آن می‌تواند داده‌ها را به View ارسال کند.
Presenter همچنین به View امکاناتی مانند اضافه کردن و حذف کردن وظایف را ارائه می‌دهد. وقتی کاربر اقدام به اضافه کردن یا حذف کردن وظیفه می‌کند، View این اعمال را به Presenter اطلاع می‌دهد و Presenter متناسب با آنها تغییرات را در Model اعمال می‌کند.

با استفاده از معماری MVP، وظایف مربوط به مدیریت داده و منطق کسب و کار در Model قرار می‌گیرند، نمایش وظایف در View انجام می‌شود و Presenter به عنوان واسط بین آنها عمل می‌کند. این تفکیک منابع و مسئولیت‌ها منجر به کد بهتر سازماندهی شده، قابلیت تست بهتر و قابلیت انعطاف‌پذیری بیشتر می‌شود.

 

 

در زیر کد مثال بالا را با استفاده از زبان Kotlin نوشته‌ام:

// Model
data class Task(val title: String, val status: Boolean)

class TaskDataSource {
    // Implementation of data retrieval and persistence methods
}

// View
interface TaskListView {
    fun showTasks(tasks: List<Task>)
    fun showErrorMessage(message: String)
}

class TaskListActivity : AppCompatActivity(), TaskListView {
    private lateinit var taskPresenter: TaskListPresenter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // Set up the UI and initialize other components

        taskPresenter = TaskListPresenter(this)
        taskPresenter.loadTasks()
    }

    override fun showTasks(tasks: List<Task>) {
        // Update the UI to display the tasks
    }

    override fun showErrorMessage(message: String) {
        // Display an error message to the user
    }
}

// Presenter
class TaskListPresenter(private val view: TaskListView) {
    private val taskDataSource = TaskDataSource()

    fun loadTasks() {
        try {
            val tasks = taskDataSource.getTasks()
            view.showTasks(tasks)
        } catch (e: Exception) {
            view.showErrorMessage("Failed to load tasks.")
        }
    }

    fun addTask(task: Task) {
        try {
            taskDataSource.addTask(task)
            // Update the UI or perform any additional actions
        } catch (e: Exception) {
            view.showErrorMessage("Failed to add task.")
        }
    }

    fun deleteTask(task: Task) {
        try {
            taskDataSource.deleteTask(task)
            // Update the UI or perform any additional actions
        } catch (e: Exception) {
            view.showErrorMessage("Failed to delete task.")
        }
    }
}

لطفاً توجه داشته باشید که کد بالا فقط یک مثال ساده از استفاده از معماری MVP در اندروید است و برای استفاده در پروژه‌های واقعی ممکن است نیاز به سفارشی‌سازی و بهبودهای دیگر داشته باشد.

حرف آخر

در این مقاله، معماری MVP در اندروید (Model-View-Presenter) در توسعه برنامه‌های اندروید معرفی شد. MVP یک الگوی طراحی است که به تقسیم کد به بخش‌های مجزا و اصول جداگانه‌سازی منطق کسب و کار، نمایش و مدیریت داده کمک می‌کند.

با استفاده از MVP، برنامه‌ها به سه بخش اصلی تقسیم می‌شوند: Model که شامل داده‌ها و منطق کسب و کار است، View که مسئول نمایش داده‌ها و دریافت ورودی کاربر است، و Presenter که به عنوان واسط بین Model و View عمل می‌کند و مسئولیت‌های ارتباط و هماهنگی را بر عهده دارد.

استفاده از MVP در برنامه‌های اندروید مزایایی از جمله جداکردن منطق کسب و کار از نمایش، افزایش قابلیت تست و قابلیت انعطاف‌پذیری را به همراه دارد. این الگو باعث می‌شود که کد سازمان‌دهی شده‌تر و قابلیت نگهداری و گسترش آن بیشتر شود.

با توجه به اینکه MVP یک الگوی معماری است، برای استفاده موثر از آن، باید اصول و روش‌های مربوطه را رعایت کرده و به نیازهای پروژه خود از جمله اندازه و پیچیدگی برنامه توجه کنید. با توجه به مزایا و قابلیت‌های MVP، استفاده از این معماری می‌تواند به توسعه‌دهندگان کمک کند تا برنامه‌هایی با کیفیت، قابل تست و قابلیت توسعه بالا ایجاد کنند.

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

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

Recent Posts

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

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

4 ماه ago

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

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

5 ماه ago

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

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

10 ماه ago

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

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

11 ماه ago

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

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

11 ماه ago

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

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

11 ماه ago