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

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

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

  • معماری MVC

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

  • معماری MVP

با طراحی رابط ها یا interface هایی که در کد نویسی پیاده میکنید در واقع View هارو به Presenter متصل میکنید … در صورتی که دوست دارید نمونه ای از کد نویسی این معماری را تجربه کنید :

روی این لینک کلیک کنید



  • معماری MVVM

خب خیلی خلاصه توضیح میدم چون میدونم برنامه نویس جماعت حوصله خوندن نداره 🙂 در پایان هم میریم سراغ سورس کد از این معماری که توسط خودم خیلی خوانا نوشته شده .

تا اونجایی که من تحقیق کردم فهمیدم این معماری اجازه میده با استفاده از یک سری مقادیر مثل Livedata رابط کاربری یا UI رو به طور خودکار به روز کنید .

با استفاده از DataBinding که توسط گوگل ارائه شد به روز رسانی UI خیلی خیلی کار راحت تری شد .


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

ViewModel
که با استفاده از LiveData اطلاعات رو به روز میکنه .



AndroidViewModel
که بسیار شبیه به نمونه ی بالا است با این تفاوت که در تابع سازنده میتونید Application یا Context رو بهش متصل کنید
نکته : برای اتصال context نیاز دارید تا کلاسی با ارث بری از ViewModelProvider.Factory بسازید


BaseObservable
این مورد یکی از پر استفاده ترین های این معماری است . یعنی تا اونجایی که من از سورس کدها دیدم ، همه ی خارجکی ها از این مورد استفاده میکنند 🙂 .

خیلی در موردش تحقیق کردم ، یعنی برام خیلی سوال شده بود که چرا اصلا ربطی به ViewModel نداره اما اسمش ViewModel میشه 😐

تا اینکه متوجه شدم از کلاسی ساخته شده که از ViewModel و Observable ارث بری میکنه که شده کلاسی به نام BaseObservable .

خوشبختانه با استفاده از DataBinding ها در BaseObservable به راحتی میتونید رابط کاربری خودتون رو به کدهای جاوا وصل کنید در نتیجه خیلی راحت UI به روز میشه .



خب حالا که متوجه شدید معماری MVVM چیست میتونید به صورت جنگی برید از لینک زیر سورس کد رو دانلود کنید 🙂

برای دانلود سورس کد به صفحه ی Github من مراجعه کنید .





۲ پاسخ

  1. رضا

    سلام من یه سوال در مورد ساخت کلاس repository تو معماری mvvm دارم.میدونم وقتی که داریم از دیتابیس استفاده میکنیم به ازای هر موجودیت یک repository باید ساخته بشه تا logic رو توش پیاده سازی کنیم.اما من دارم یه فروشگاه اینترنتی مینویسم و موردی که برام پیش اومده به این صورته:من چند تا activity دارم که توی اونها چندین spinner وجود داره که اطلاعات این spinner ها از سرور میاد(یعنی من باید چند تا درخواست با رتروفیت بزنم تا اطلاعات رو از سرور دریافت کنم و توی اسپینرها نمایش بدم) و بعدش وقتی که کاربر انتخاب هاشو از طریق اسپینرها انجام داد, و مثلا روی دکمه ثبت خرید کلیک کرد,این اطلاعات داخل یه مدل set میشه و یه درخواست خرید میره سمت سرور.حالا سوال من به این شکله:من بعضی از این اسپینرها رو توی activity های دیگه هم دارم,خب حالا تکلیف چیه؟من باید برای هر activity یه repository بسازم و درخواست های سمت سرورم رو توش بزنم یا فقط یه repository داشته باشم ؟(میدونم که به ازای هر view ما یک viewmodel داریم و در مورد repository اینطور نیست اما خب الان باید چه کنم؟اگر فقط یه repository داشته باشم این repository بزرگ و بزرگتر میشه وغیرقابل مدیریت)

    • akbari

      سلام . شما یک کلاس repository داشته باشی و به صورت Singleton تعریفش کنی . مدیریت کردنش کمی راحت تر میشه . وقتی سینگلتون تعریف بشه مقادیرش ثابت میمونه و کافیه هربار که اسپینر کلیک میشه مقدار بهش ست بشه . این پیچیدگی در تمام اپلیکیشن ها هست ، البته اگر شما راه حل بهتری داشتید حتما اینجا بیانش کنید ما هم یاد بگیریم … ممنون از نظرتون

دیدگاهتان را بنویسید

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