آموزش معماری MVC در اندروید – ترولرن
معماری MVC در اندروید (Model-View-Controller) یک الگوی طراحی است که با استفاده از آن میتوان برنامههای اندرویدی را به صورت سازماندهی شده و منظم پیادهسازی کرد. این الگو با تقسیم برنامه به سه بخش اصلی، یعنی مدل (Model)، نمایش (View) و کنترلکننده (Controller)، به برنامهنویسان کمک میکند تا کدهای خود را به صورت منظم و قابل توسعه ساختاردهی کنند.
“ما را در اینستاگرام دنبال کنید”
در این مقاله از سری مقالات برنامه نویسی اندروید اومدیم در مورد معماری MVC در اندروید، صحبت کنیم. پس با سایت ترولرن همراه باش.
“قبل از شروع مقاله، بگم که بعد از مطالعه این مطلب، از آموزش پروژه محور برنامه نویسی اندروید سایتمون یعنی دوره ژنرال اندروید غافل نشید.”
توی دوره ژنرال صفر تا صد معماری MVC در اندروید رو در فصل معماریها کامل توضیح دادیم و همچنین توی پروژه های دیجی کالا و اسنپ فود به صورت عملی و پروژه محور از معماری MVC استفاده کردیم و بطور کامل اون رو آموزش دادیم.
معماری MVC در اندروید
معماری MVC در اندروید (Model-View-Controller) یک الگوی طراحی است که در توسعه نرمافزارها مورد استفاده قرار میگیرد. در این الگو، برنامه به سه بخش اصلی تقسیم میشود: مدل (Model)، نمایش (View) و کنترلکننده (Controller).
-
مدل (Model):
مدل مسئولیت مربوط به دادهها و منطق کسب و کار را بر عهده دارد. این بخش شامل کلاسها و ساختارهای داده است که اطلاعات را نگهداری میکنند و عملیات مربوط به داده را انجام میدهند. مدل به صورت مستقل از نمایش و کنترلکننده وجود دارد و هیچ ارتباط مستقیمی با نمایش کاربری ندارد.
-
نمایش (View):
نمایش مسئولیت نمایش دادهها به کاربر است. این بخش شامل تمامی عناصر گرافیکی مانند صفحات، دکمهها، لیستها و… است که به کاربر نشان داده میشوند. نمایش وابسته به مدل نیست و فقط اطلاعات مورد نیاز را از مدل دریافت میکند تا آنها را نشان دهد و اقدامات کاربر را به کنترلکننده ارسال میکند.
-
کنترلکننده (Controller):
کنترلکننده مسئولیت کنترل جریان اطلاعات بین مدل و نمایش را دارد. وظیفه اصلی آن استفاده از رویدادها (مانند کلیک دکمه، انتخاب گزینه و غیره) که توسط نمایش ایجاد میشوند، استخراج دادههای مورد نیاز از مدل و به روزرسانی نمایش است. همچنین، کنترلکننده مسئولیت انجام عملیات مورد نیاز روی دادهها را دارد، مانند ذخیره، بارگیری و بهروزرسانی دادهها در مدل.
توجه کنید که در اندروید، معماری MVC به صورت معمول استفاده نمیشود و به جای آن، معماری MVVM (Model-View-ViewModel) و یا معماری MVP (Model-View-Presenter) استفاده میشود که بهبودهایی بر معماری MVC ارائه میدهند.
بطور خلاصه، معماری MVC در اندروید، این سه بخش از یکدیگر مجزا هستند و با استفاده از الگوی MVC، ارتباط بین آنها به صورت زیر برقرار میشود:
- وقتی که کاربر اقدامی را در نمایش انجام میدهد، مانند کلیک دکمه، رویداد مربوطه از طریق کنترلکننده دریافت میشود.کنترلکننده، دادههای مورد نیاز خود را از مدل دریافت میکند و آنها را به نمایش منتقل میکند.
- نمایش، دادههای دریافتی را نمایش میدهد و همچنین اقدامات کاربر را به کنترلکننده ارسال میکند.
- کنترلکننده، عملیات مربوطه را برروی دادهها در مدل انجام میدهد، مانند ذخیره، بارگیری و بهروزرسانی دادهها.
- اگر تغییری در دادهها رخ دهد، مدل اعلاناتی را به کنترلکننده ارسال میکند تا نمایش بهروزرسانی شود.
این الگوی طراحی به تقسیم مسئولیتها و جداسازی لایهها کمک میکند، که این امر میتواند قابلیت خوانایی، قابلیت نگهداری و قابلیت تست برنامه را بهبود بخشد. همچنین، با استفاده از MVC میتوان به راحتی تغییرات در نمایش یا منطق کسب و کار را اعمال کرد بدون تغییرات زیاد در سایر بخشها.
به هر حال، بهتر است قبل از انتخاب معماری، با توجه به نیازها و مشکلات خاص پروژه خود، معماریهای دیگری مانند MVVM و MVP را نیز مورد بررسی قرار دهید تا بتوانید انتخاب بهتری داشته باشید.
مثال برای معماری MVC در اندروید
بهترین روش برای درک بهتر معماری MVC در اندروید، ممکن است مثالی ساده را در نظر بگیرید. در اینجا یک مثال ساده از استفاده از معماری MVC در یک برنامه اندروید را برای شما توضیح میدهم:
فرض کنید شما یک برنامهی ساده برای یادآوری تولید میکنید. در این برنامه، کاربر میتواند یادآورها را ایجاد کند، آنها را مشاهده کند و آنها را حذف کند. حالا بیایید این سه بخش اصلی MVC را در این مثال بررسی کنیم:
-
مدل (Model):
در این مثال، مدل مسئولیت نگهداری دادهها و عملیات مربوط به آنها را دارد. به عنوان مثال، مدل میتواند یک کلاس با نام “Reminder” باشد که شامل ویژگیهایی مانند عنوان یادآور، تاریخ و زمان آن و وضعیت فعال یا غیرفعال بودن آن باشد.
-
نمایش (View):
نمایش مسئولیت نشان دادن دادهها به کاربر را دارد. در این مثال، نمایش میتواند یک فهرست از یادآورها باشد که به کاربر نشان داده میشود. همچنین، وقتی کاربر میخواهد یک یادآور جدید ایجاد کند، نمایش میتواند یک فرم ورود اطلاعات نمایش دهد.
-
کنترلکننده (Controller):
کنترلکننده مسئولیت برقراری ارتباط بین مدل و نمایش را دارد. در این مثال، کنترلکننده میتواند یک اکتیویتی یا یک کلاس باشد که وظیفهای مانند مدیریت رویدادها و تعامل با کاربر را بر عهده دارد. وقتی کاربر یک یادآور جدید ایجاد میکند، کنترلکننده اطلاعات وارد شده توسط کاربر را دریافت کرده و با استفاده از مدل، یک شیء یادآور ایجاد میکند. سپس این شیء را به نمایش ارسال میکند تا در فهرست یادآورها نمایش داده شود.
با استفاده از معماری MVC، هر یک از اجزای برنامه به صورت مستقل و جداگانه عمل میکنند. این الگو به شما امکان میدهد تا تغییرات را به راحتی اعمال کنید، مانند افزودن ویژگیهای جدید به یادآورها، تغیییر رابط کاربری نمایش یا استفاده از استراتژیهای مختلف در کنترل کردن رویدادها، بدون تغییرات زیاد در سایر بخشها.
این تنها یک مثال ساده از استفاده از معماری MVC در اندروید است. در برنامههای واقعیتر، اجزای معماری میتوانند پیچیدهتر باشند و از پترنها و رویکردهای معماری بیشتری استفاده کنند. اما امیدوارم این مثال ساده به شما کمک کند تا ایدهای از استفاده از معماری MVC در اندروید بدست آورید.
در زیر کد مثال بالا را با استفاده از زبان Kotlin نوشتهام:
مدل (Model):
data class Reminder(val title: String, val dateTime: String, val isActive: Boolean)
نمایش (View):
در اینجا فرض میکنیم که یک RecyclerView به نام “reminderList” در XML لایهٔ نمایش وجود دارد که لیست یادآورها را نمایش میدهد.
class ReminderAdapter(private val reminders: List<Reminder>) : RecyclerView.Adapter<ReminderAdapter.ViewHolder>() { inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { private val titleTextView: TextView = itemView.findViewById(R.id.titleTextView) private val dateTimeTextView: TextView = itemView.findViewById(R.id.dateTimeTextView) fun bind(reminder: Reminder) { titleTextView.text = reminder.title dateTimeTextView.text = reminder.dateTime } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val itemView = LayoutInflater.from(parent.context).inflate(R.layout.item_reminder, parent, false) return ViewHolder(itemView) } override fun onBindViewHolder(holder: ViewHolder, position: Int) { val reminder = reminders[position] holder.bind(reminder) } override fun getItemCount(): Int { return reminders.size } }
کنترلکننده (Controller):
در اینجا فرض میکنیم که یک فعالیت به نام “ReminderActivity” وجود دارد که لیست یادآورها را نشان میدهد و قابلیت ایجاد یادآور جدید را دارد.
class ReminderActivity : AppCompatActivity() { private lateinit var reminderAdapter: ReminderAdapter private val reminderList = mutableListOf<Reminder>() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_reminder) // ایجاد چند یادآور به عنوان مثال reminderList.add(Reminder("یادآور ۱", "2023-11-03 10:00", true)) reminderList.add(Reminder("یادآور ۲", "2023-11-04 15:30", false)) reminderAdapter = ReminderAdapter(reminderList) reminderListRecyclerView.adapter = reminderAdapter // کدهای مربوط به ایجاد یادآور جدید و بروزرسانی لیست یادآورها // ... } }
این کد مثال، با استفاده از معماری MVC، دادهها و عملیات مربوط به یادآورها (مدل) را جدا از نمایش لیست (نمایش) و مدیریت رویدادها و تعامل با کاربر (کنترلکننده) نگهداری میکند. البته، برای کاملتر شدن برنامه، نیاز است که قسمتهای دیگری مانند ایجاد یادآور جدید و بروزرسانی لیست یادآورها را نیز پیادهسازی کنید.
توجه داشته باشید که این مثال فقط یک نمونه ساده است و در برنامههای واقعیتر، ممکن است بخشهای دیگری مانند مدیریت پایگاه داده، استفاده از الگوها و رویکردهای معماری پیچیدهتر و… نیز وجود داشته باشد.
حرف آخر
این مقاله با معرفی معماری MVC در اندروید و توضیح نحوه استفاده از آن در ساخت برنامههای اندرویدی، به برنامهنویسان امکان میدهد تا کدهایشان را به صورت منظم و سازماندهی شده ساختاردهی کنند.
استفاده از معماری MVC در اندروید باعث جداسازی بخشهای مختلف برنامه و افزایش سهولت در تست، توسعه و نگهداری کد میشود. با این الگو، برنامهنویسان میتوانند به راحتی تغییرات و بهبودهایی را در برنامه اعمال کنند بدون آسیب رساندن به بخشهای دیگر.
به طور کلی، معماری MVC در اندروید مزایای قابل توجهی را در مدیریت پروژههای برنامهنویسی فراهم میکند و برنامهنویسان را در پیادهسازی برنامههای با کیفیت و قابل توسعه یاری میدهد.
و همچنین ممنون میشم از طریق ستارههای این پایین به این مقاله امتیاز بدی و اگه هر سوالی داشتی توی قسمت دیدگاه بپرس و قطعا بهت پاسخ میدیم.
دیدگاهتان را بنویسید