MVVM(Model-View-ViewModel)
در این قسمت معماری نرم افزار مدل-ویو-ویومدل به زبانی ساده توضیح خواهیم داد
Last updated
در این قسمت معماری نرم افزار مدل-ویو-ویومدل به زبانی ساده توضیح خواهیم داد
Last updated
مدل(Model): وظیفه تامین اطلاعات را برای ویومدل(ViewModel) به عهده دارد. اطلاعات می توانند از سرور، پایگاه داده محلی و .. باشند.
ویومدل(ViewModel): وظیفه رساندن اطلاعات و کنترل آن ها را به عهده دارد. از دیگر وظایف ویومدل، اتصال اکتیویتی(Activity)/فرگمنت(Fragment) به سایر بخش های اپلیکیشن می باشد!
ویو(View): وظیفه آن نمایش اطلاعات، و واکنش پذیری نسبت به اعمال کاربر و سیستم بر روی صفحه(مانند: لمس کردن دکمه و یا تماس ورودی که مربوط به اعمال سیستم می باشد) . مثالی از ویو در اندروید: اکتیویتی(Activity) و فرگمنت(Fragment).
مدل(Model): نباید از قسمت های دیگر اپلیکیشن خبر داشته باشد! فقط دارای یک خروجی دیتا می باشد! به زبانی ساده تر نباید از کدهای اندروید درون مدل استفاده شود! (مثال: چک کردن وضعیت اتصال به اینترنت)
ویومدل(ViewModel): یک instance از مدل را درون خود حفظ میکند تا اطلاعات را از آن بگیرد ولی مانند ویو یک خروجی برای اطلاعات دارد! ویومدل همانند مدل نباید درون آن از کدهای اندروید استفاده کرد و هیچ گونه ارتباطی با ویو ندارد!
ویو(View): نباید بداند که مدل چیست و اطلاعات از کجا می آید! ویو فقط وظیفه گوش دادن به اطلاعاتی را دارد که از ویومدل ساطع می شود! یعنی یک instance از ویومدل را درون خود نگه میدارد که به اطلاعاتی که از آن ارسال می شود را شنود کند.
کدی خوانا تر، قابل تست و مرتب تر! دیباگینگ(Debuging) راحت تر و قابلیت نوشتن تست برای کد!
فرض کنید به رستورانی می روید، گارسون به سراغ شما می آید و از شما می خواهد که چیزی سفارش دهید! بعد از سفارش، گارسون درخواست شما را به گوش آشپز می رساند؛ آشپز با استفاده از مواد موجود در آشپزخانه، سفارش شما را آماده می کند و به گارسون می دهد تا به شما برسد! این یک مثال ساده از معماری MVVM بود! به همین راحتی! چطور؟؟ به عکس زیر دقت کنید:
شما در اینجا نقش ویو(View) را به عنوان مشتری اجرا می کنید، گارسون نقش ویومدل(ViewModel) و آشپز، نقش مدل(Model) را اجرا می کند! شما با درخواست کردن از گارسون(ویومدل) از او می خواهید که برای شما چیزی(Data) بیاورد و در اینجا گارسون(ویومدل) به آشپز(مدل) دستور می دهد که چه چیزی برای مشتری(ویو) می خواهد؛ و آشپز(مدل) با مواد موجود در آشپزخانه(Repository) سفارش مشتری(ویو) را آماده می کند و گارسون(ویومدل) منتظر می ماند که وقتی سفارش(Data) آماده شد، آن را به مشتری(ویو) تحویل دهد و در صورت بروز مشکلی در آماده سازی سفارش(Data)، مشتری(ویو) را آگاه کند که یا سفارشی دیگر بدهد یا اینکه رستوران را ترک کند!
در این مثال ساده مشاهده کردید که اعضا با یک دیگر ارتباطی ندارند و مشتری نمی داند که سفارش(اطلاعات) چگونه آماده می شوند و فقط می داند که سفارش(اطلاعات) از طریق گارسون(ویومدل) به او می رسد! آشپز(مدل) نیز نمی داند که مشتری(ویو) کیست! به همین راحتی!
پی نوشت: در ادامه، با افزودن RxJava، این تعریف را کامل تر خواهیم کرد!