MVVMCross сприяє поділу проблем у програмах міжплатформних додатків шляхом реалізації моделі-View-ViewModel (MVVM), яка по суті сприяє чіткому розподілу обов'язків між різними компонентами програми. Ось як це досягає MVVMCross:
Реалізація шаблону MVVM
MVVMcross побудований навколо архітектури MVVM, яка складається з трьох основних компонентів:
- Модель: представляє дані та ділову логіку програми. Він інкапсулює структури даних та операції, які не залежать від інтерфейсу користувача.
- Переглянути: обробляє інтерфейс користувача та взаємодії з користувачем. Він відповідає за відображення даних та отримання введення від користувача.
- ViewModel: виступає посередником між моделлю та видом. Він розкриває дані та команди, з якими подання може пов'язуватися, ефективно відмежувати перегляд з моделі.
Підтримуючи це розділення, MVVMCross гарантує, що кожен компонент зосереджується на своїй конкретній ролі без перекриття обов'язків. Наприклад, перегляд не повинен містити ділову логіку, і ViewModel не повинен безпосередньо маніпулювати елементами користувача.
Портативна бібліотека класів (PCL) для спільної логіки
MVVMCross використовує бібліотеку портативних класів (PCL) для розміщення ViewModels, моделей та інтерфейсів для специфічних для платформи послуг. Цей PCL служить основним проектом, що містить спільну ділову логіку та обробку баз даних. Відокремлюючи логіку бізнесу на PCL, MVVMCross дозволяє розробникам ділитися значною частиною коду на різних платформах, таких як iOS, Android та Windows. Цей підхід не тільки сприяє повторному використанню коду, але й гарантує, що логіка бізнесу залишається послідовною на різних платформах.
Зв'язування та комунікація даних
MVVMCross використовує прив'язку даних для перегляду посилань із відповідними ViewModels. Цей механізм дозволяє подання автоматично оновлюватись, коли ViewModel змінюється, і навпаки. Зв'язування даних має вирішальне значення для підтримки поділу проблем, оскільки це дозволяє переглянути реагувати на зміни в ViewModel, не потребуючи знати деталі реалізації логіки бізнесу.
Крім того, MVVMcross підтримує різні методи комунікації, такі як команди та події, що ще більше посилює поділ проблем, дозволяючи думці викликати дії на ViewModel без безпосереднього доступу до його внутрішнього стану.
Введення залежності та архітектура плагінів
MVVMCross включає введення залежності (DI) та архітектуру плагінів для управління залежністю та розширення можливостей рамки. Введення залежності допомагає забезпечити поєднання компонентів, що полегшує тестування та підтримку застосування. Архітектура плагіна дозволяє розробникам додавати нові функціональні можливості, не змінюючи основні рамки, тим самим зберігаючи чисте розділення проблем.
Управління життєвим циклом
MVVMCross забезпечує функції управління життєвим циклом для ViewModels, які пов'язані з життєвим циклом поглядів. Це означає, що ViewModels можна повідомити, коли погляд створюється, з’являється, зникає або знищується. Таке управління життєвим циклом допомагає підтримувати чисте відокремлення проблем, забезпечуючи належним чином очищення ресурсів та в тому, що стан ViewModel управляється правильно.
Підсумовуючи це, MVVMCross сприяє поділу проблем у програмах міжплатформних додатків шляхом застосування моделі MVVM, використовуючи PCL для спільної логіки, впроваджуючи зв'язування даних та включення впорскування залежності та управління життєвим циклом. Ці функції колективно сприяють надійній, виконаній та масштабованій архітектурі додатків.
Цитати:[1] https://www.linkedin.com/advice/0/what-best-way-ensure-separation-concerns-mvvm-design-csadc
[2] https://leaware.com/creating-cross-platform-xamarin-applications-using-the-mvvmcross-framework/
[3] https://visualstudiomagazine.com/articles/2018/05/08/build-a-xamarin.forms-application.aspx
[4] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross
[5] https://www.mvvmcross.com/documentation/fundamentals/viewmodel-lifecycle
[6] https://www.mvvmcross.com/documentation/getting-started/getting-started
[7] https://www.mvvmcross.com/documentation/fundamentals/data-binding
[8] https://stackoverflow.com/questions/322220007/what-does-mvvmcross-do-that-xamarin-doesnt-already
[9] https://github.com/mvvmcross/mvvmcross