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

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

در این آموزش، ما در برنامه‌ی اندروید خود به بحث و پیاده سازی الگوی معماری MVVM اندروید خواهیم پرداخت.

ما قبلاً در مورد الگوی معماری MVP در اندروید نیز بحث کرده ایم.

 در این مقاله همراه ما باشید تا با آموزش معماری MVVM در اندروید، اولین اپلیکیشن خود را پیاده سازی کرده و با مزایای آن آشنا شوید.

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

(MVVM (Model, View, View Model

(MVP (Model, View, Presenter

(MVC (Model, View, Controller

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

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

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

برای شروع، توضیحات این الگو را در نظر می‌گیریم

هر یک از اجزای آن را تحلیل می‌کنیم. MVVM یک الگوی طراحی معماری نرم افزار است که جداسازی رابط کاربری از business logic و مدل داده (data model) برنامه را تسهیل می‌بخشد.

مدل (Model)

لایه‌ی مدل می‌تواند شامل دسترسی به داده‌ها (Repository (مخازن) ، DAO‌ها ، API ها)، کلاس‌های Entity و … باشد.

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

  • REST API
  • Realm db
  • SQLite db
  • Handles broadcast
  • Shared Preferences
  • Firebase
  • و …

مدل از View یا ViewModel چیزی نمی‌داند و به طور مستقل وجود دارد.

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

ویو (View)

View همان چیزی است که کاربر می‌بیند و در برنامه نویسی اندروید Viewها به طور معمول در XML تعریف می‌شوند و بیشتر در کلاس‌های Fragment ،Activity یا View مشاهده می‌شوند.

در بسیاری از برنامه‌های اندرویدی اغلب کدهایی که با View مرتبط نیستند ، به خصوص business logic، با Fragment‌ها و Activity‌ها درهم می‌شوند، که می‌تواند باعث توسعه یا نگهداری بسیار دشوار باشد.

MVVM با نگه داشتن Fragment‌ها و Activity‌ها صرفاً به عنوان بخشی از لایه‌ی View، با این مشکل مقابله می‌کند

آن‌ها فقط باید وظیفه‌ی تنظیم View را بر عهده بگیرند، و همچنین ViewModel را به View (با ابزارهایی مانند RxJava) متصل می‌کنند.

برخلاف View ،MVC در مورد مدل اطلاعی ندارد.

ویو تنها از ViewModel  آگاه است که با آن داده‌های خود را برای نمایش پر می‌کند.

View باید عاری از منطق نمایش (قالب بندی تاریخ ، قوانین برای نشان دادن / پنهان کردن یک عنصر و موارد دیگر) باشد، که به جای آن در ViewModel حضور خواهد داشت.

View می‌تواند از ViewModel درخواست کند تا عملیاتی را انجام دهد، که معمولاً ممکن است مدل را بر اساس ورودی کاربر بروز کند.

برای مثال View مسئول رسیدگی به عنوان‌های زیر است:

  • Menus
  • Permissions
  • Event listeners
  • Showing dialogs, Toasts, Snackbars
  • Working with Android View and Widget
  • Start Activities
  • All functionality which is related to the Android Context

ویو مدل (ViewModel)

ViewModel شامل داده‌های مورد نیاز برای View است.

همان‌طور که از نام آن مشخص شده است، ViewModel پل ارتباطی بین View و Model است.

داده‌های خود را از لایه مدل بیرون می‌کشد و آن را برای نمایش تبدیل می‌کند.

ViewModel حالت فعال برنامه را در خود نگهداری می‌کند.

این عملیات را در معرض View قرار می‌دهد و interface را برای بروز کردن مدل فراهم می‌کند.

ViewModelها نوعی POJO هستند، به این معنی که به راحتی قابل آزمایش هستند که یکی از اصلی‌ترین مزایای آن‌ها می‌باشد.

ViewModel مسئولیت‌های زیر را داراست:

  • Exposing data
  • (Exposing state (progress, offline, empty, error, etc
  • Handling visibility
  • Input validation
  • Executing calls to the model
  • Executing methods in the view

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

  • Start a service
  • Bind to a service
  • Send a broadcast
  • Register a broadcast receiver
  • Load resource values

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

  • Show a dialog
  • Start an activity
  • Inflate a layout

تفاوت  MVVM با MVP:

  • ViewModel به جای Presenter در لایه‌ی میانی می‌نشیند.
  • Presenter اشاراتی به View دارد. ViewModel به این صورت نمی‌باشد.
  • ViewModel جریان داده (data streams) را ارسال می‌کند.
  • Presenter و View در یک رابطه‌ی 1 به 1 هستند.
  • View و ViewModel در یک رابطه‌ی 1 به تعدادی زیاد قرار دارند.
  • ViewModel نمی‌داند که View در حال گوش دادن به آن است.

تفاوت MVVM با MVC:

MVVM دارای چندین مفهوم با الگوی رایج‌تر (MVC (Model View Controller است، بنابراین کسانی که قبلاً با MVC آشنا بودند یا با آن کار کرده بودند باید بتوانند با MVVM به راحتی کار کنند.

Model و ViewModel در MVVM یکسان است همان‌طور که در MVC وجود دارد، آنچه متفاوت است نحوه‌ی برقراری ارتباط و همچنین آگاهی آنها از یکدیگر است.

مزایای MVVM

Viewmodels امکان آزمایش آسان‌تر Display Logic را فراهم می‌آورد:

Viewmodels اجازه می‌دهد تا منطق صفحه نمایش بدون اینکه لحظه به لحظه مشاهده شود آزمایش شود.

در توسعه‌ی Android،این اجازه را  می‌دهد تا تست‌های بیشتری در JUnit نوشته شود و به صورت محلی (local) اجرا شود، نه در Android JVM (شبیه ساز یا دستگاه)، به این معنی که تست‌ها خیلی سریعتر اجرا می‏‌شوند.

تفکیک روابط:

کد‌های درهم و شکننده باعث کابوس نگهداری برنامه می‌شود.

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

و وقتی که بخواهیم یک features جدید به برنامه اضافه کنیم سردرگم می‌شویم و سرعت توسعه یافتن برنامه خیلی کم می‌شود و باعث می‌شود که مشتری از روند توسعه‌ی برنامه ناراضی باشد.

یکی از مهم ترین مزایای این امر که ما اغلب در برنامه‌های اندرویدی می‌بینیم، Activityها وFragmentهای یکپارچه است که شامل business logic، تعامل مستقیم با پایگاه داده و یا API است، که با کلیه‌ی کدهای View همراه است.

MVVM کمک زیادی می‌کند تا معماری تمیز، منسجم و کاملاً جفت شده، حفظ شود و Activityها و Fragmentها را صرفاً به عنوان بخشی از View نگه می‌دارد.

استفاده‌ی مجدد از کد را بهبود می‌بخشد:

Viewmodels را می‌توان دوباره در سراسر برنامه استفاده کرد، به این معنی که display logic نیازی به کپی ندارد.

این View حتی می‌تواند برای جایی دیگر جابه‌جا شود و هنوز از همان ViewModel استفاده می‌کند و تا زمانی که به همان داده‌ها و عملیات بستگی داشته باشد، از همان ViewModel استفاده می‌کند.

بقیه این مقاله معماری در اندروید به همراه مثال پیاده سازی را می توانید در وبسایت سون لرن مشاهده بفرمایید

سوالی هم برای مبحث MVVM بود در بخش نظرها یا بخش تماس قرار بدین حتما پاسخ خواهم داد

نظر شما

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