MVC Pattern in Android

دیزاین پترن الگوی طراحی design patterns pattern mvc android java ام وی سی اندروید آموزش مقایسه

سطح آموزش: #پیشرفته

احتمالا اسم الگوی MVC به گوشتون خورده. MVC خلاصه Model-View-Controller هست و یک الگوی طراحی نرم‌افزار هست که به ما کمک میکنه سازمان یافته‌تر و قابل توسعه‌تر کد بزنیم.

فرض کنید شما عضو یک تیم برنامه‌نویسی هستید که ۵ نفر دیگه هم باهاتون کار میکنن. یکی از مشکلاتی که محتمل هست برای یک تیم پیش بیاد اینه که هرکس الگوی خودش برای توسعه رو داره. ممکنه شما دوست داشته باشید همونجا که ساختارهاتون (Structures) رو می‌سازید متدهای مربوطه رو هم بسازید در صورتی که همکارتون یک کلاس جداگانه فقط برای متدها درست میکنه. ممکنه شما برای پاس دادن مقادیر از ساختارها و parceler استفاده کنید در حالیکه همکارتون از متغیرهای public static استفاده میکنه (چه همکار بدی!)

بدتر از این وقتیه که کد قبلا توسط یکی دیگه که بهش دسترسی ندارید نوشته شده و شما باید کارش رو ادامه بدید.

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

یکی از شناخته شده‌ترینِ این الگوها ام وی سی (MVC) هست.

mvc سه رکن داره:

  • Model: مدل شامل objectها و JAVA POJO1های نرم‌افزاره که داده‌ها رو شامل میشن. همچنین شامل منطق‌هایی میشه که میتونه در صورت تغییر مقادیر داده‌ای controller رو تحت تاثیر قرار بده.
  • View: شامل نمایشی از داده‌هایی‌ست که model نگهداری میکنه.
  • Controller: کنترلر از روی اسمش هم مشخصه نقش کنترلی داره. جریان اطلاعات داخل مدل رو کنترل می‌کنه و همچنین با تغییر مدل، ویو رو آپدیت می‌کنه.

پیاده‌سازی

 

برای مشاهده یک نمونه پیاده‌سازی MVC در جاوا میتونید به اینجا و اینجا نگاهی بندازید.

من یک نمونه خیلی خیلی ساده شده هم خودم براتون میارم.

فرض کنید یک کلاس Food داریم که تنها یک متغیر name داره.

۱٫ Model

۲٫ View

۳٫ controller

۴٫ Usage

 

+اطلاعات بیشتر

MVC در اندروید؟

مسئله‌ای که احتمالا تا الان متوجه شدید اینه که MVC رو به این شکل نمیشه در اندروید استفاده کرد.

توسعه دهنده‌های اندروید توسعه اون رو طوری برنامه‌ریزی کردن که برای توسعه نیاز دارید از یکسری اصول و قواعد خاصی پیروی کنید. برای مثال xmlها در بخش layout قرار دارن. بنابراین شاید بشه گفت viewها جدا هستن. اما یک activity هم میتونه به عنوان view در نظر گرفته بشه چرا که کاری شبیه کلاس FoodView رو برای ما انجام میده. در عین حال به دلیل ماهیت خود اندروید (نیاز به Context برای عملیات‌های مختلف) بخش زیادی از فعالیت‌های controller داخل اکتیویتی انجام میشه.

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

توجه کنید ما داخل اندروید این امکانات رو داریم:

  • طراحی لایه‌ها داخل layout و بصورت xml و جداگانه انجام میشه.
  • Resourceهای پروژه (رشته‌های متنی، اندازه‌ها، استایل‌ها و…) بصورت جداگانه در res قرار دارن.
  • برای استفاده از xmlها داخل کد از LayoutInflater ها استفاده می‌کنیم.
  • بسیاری از کلاس‌های مفیدی که ما تحت عنوان utility میشناسیم از قبل پیاده‌سازی شده و امکان استفاده داره. مثل Log,Config,DatabaseUtils

پس چه کنیم؟

اما به هرحال استفاده از تمام این امکانات نمیتونه تضمین کنه کد خوانا و (به راحتی) توسعه پذیر باشه و هنوز هم به همون دلایلی که پترن‌هایی مثل MVC بوجود اومده ما نیاز داریم تا در برنامه‌نویسی اندروید هم ازشون استفاده کنیم.

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


۱- JAVA POJO چیست؟ POJO مخفف شده‌ی Plain Old Java Object هست. برای داده‌ها داخل جاوا یک قاعده‌ای داریم که شامل اصول زیر میشه (اطلاعات بیشتر):

  • تمام متغیرها باید private باشه و از getter و setter برای دسترسی به اون‌ها استفاده بشه.
  • کلاس یک no-argument constructor که بصورت public تعریف شده داشته باشه.
  • کلاس بصورت Serializable پیاده‌سازی بشه.

کلاسی که این قوانین رو رعایت کنه Java Beans Class خونده میشه. ولی وقتی کلاس object ما قوانین خاصی رو رعایت نکنه بهش Java POJO Class میگن.

2 دیدگاه برای “MVC Pattern in Android

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *