در مطلب زیر به شرح معماری MVVM و تمایز آن با مدلهای دیگر میپردازیم.
بگذارید دید خودمان از برنامهها و application ها بیان کنیم. هر برنامه یک لایه را دارا است که اطلاعات و دادهها را در خود ذخیره میکند. بگذارید نام این لایه را model بگذاریم. در این لایه تنها دادههای خام نگهداری میشود.
همچنین لایه دیگری از نرمافزار هست که دادهها به کاربران نمایش داده میشود. مانند فرمها، متنها و ... . تمامی این قسمت را نیز در لایهای با اسم view فرض میکنیم.
پس تاکنون دو لایه view و model را دارا هستیم و در اپلیکیشنی با کمترین نیاز میتوان دادههای model را در view نمایش دهیم.
اما اپلیکیشنها معمولا پیچیدهتر از این سادگی قرار دارند و لازم دارند تا منطق یا logic ای را داشته باشند. برای مثال فرض کنید میخواهیم بگوییم هر وقت دادهای با نام age از ۲۵ بیشتر بود باید قسمتی از view به صورت زرد نمایش داده شود. یا اگر دادهای با نام is_activated مقدار false داشت اطلاعات به خصوصی را نمایش دهیم. با توجه به این نیازها لازم میشود تا به صورتی این منطق را پیادهسازی کنیم.
پترن MVVM جهت حل همین مسئله معرفی شده است.
براساس این مدل یک لایه جدیدتر با نام ViewModel معرفی میشود که منطق برنامه در آن قرار میگیرد. به تصویر زیر دقت کنید.
همانطور که در عکس بالا مشاهده میکنید قسمت ViewModel بین دو قسمت Model و View قرار گرفته است و منطق بین این دو قسمت را در این منطقه تعیین میکنیم.
ارتباطی که بین Model و ViewModel هست نشان دهنده Manipulating Data است با این مفهوم که دادهها را تغییر دهیم تا خواندن و تفسیر آنها راحتتر شود. این هماند ارتباطی است که با کمک آن میگوییم اگر دادهها شرایط خاصی را داشتند به چه صورتی در بیایند.
همچنین ارتباط بین View و ViewModel نیز با نام Two-Way Data Binding شناخته میشود. در این ارتباط هم منطقهای بیان شده در قسمت ViewModel در قسمت View به کاربران نمایش داده میشود و هم کاربران میتوانند منطق را با کمک تغییر در قسمت View عوض کنند تا در ViewModel اثر بگذارد و اطلاعات نمایش داده شده متفاوت باشد. به همین دلیل است که two way در اسم این رابطه قرار داده شده است.
این مطلب، بخشی از تمرینهای درس معماری نرمافزار در دانشگاه شهیدبهشتی است.