Общи Android архитектури (MVC срещу MVP срещу MVVM)

Преди да преминем към архитектурата, нека изясним този термин.
God Class / Object: Клас, който има голям брой компоненти и компонентите са свързани. Това е много лоша идея и трябва да ги избягвате на всяка цена. Това е архитектурен образец.

MVC: Контролер за изглед на модел

Модел:
1. Представя моделите на данни.
2. Управлява състоянията на данните
3. Има бизнес логика

Вижте:
1. Начинът, по който представяме нашите данни, напр. Изгледи / оформления в Android.
2. Представя потребителския интерфейс.

контролер:
1. Обработва потребителски взаимодействия с нашето приложение.
2. Комуникационният канал между модела и изгледа.
например фрагментите / Дейности в Android.

Диаграмата на MVC ще изглежда така:

Потребителят взаимодейства с потребителския интерфейс, а контролерът получава уведомление чрез изгледа. Въз основа на взаимодействието с потребителя контролерът променя определени модели. Моделите изпълняват някаква бизнес логика и връщат актуализираното състояние на данните на модела на контролера. След това контролерът може да актуализира потребителския интерфейс според новото състояние на данните, получено от Model.

Изгледът получава въвеждането от потребителя и моли контролера да обработва потребителския вход.
Контролерът получава информация от View, въз основа на това дали потребителят е избрал да скрие / прегледа съобщението. Контролерът извиква Модел, за да актуализира състоянието на данните (съобщение тук).
Моделът актуализира модела въз основа на входа на контролера. Така тя съдържа тази бизнес логика.
Контролерите получават актуализираните данни и съответно актуализират потребителския интерфейс.

MVP: Представяне на изглед на модел

Модел:
Същото като в MVC модел.

Вижте:
1. Начинът, по който представяме нашите данни, напр. Изгледи / оформления, както и Дейности / Фрагменти в Android.
2. Ще внедрите интерфейс за действията на презентатора.

Водещ на тв шоу или радио:
1. Няма отношение към изгледите (за разлика от MVC).
2. Операциите се извикват от нашите възгледи.
3. Изгледите се актуализират чрез интерфейса на View.

Диаграмата на MVP ще изглежда така:

Въпреки че диаграмата на потока изглежда същата като MVC, разликата е в това как VIew и Presenters / Controllers взаимодействат помежду си.

В MVP изгледите и презентаторите взаимодействат чрез интерфейс (за разлика от MVC). Презентаторите извършват някакво действие върху интерфейса, което се реализира в Views и по този начин изгледът се актуализира.

Така моделът остава същият (както в MVC).
Водещият тук просто изпълнява действията на интерфейса и няма познания за изгледите, които се опитва да актуализира.
Така изгледите, осъществяващи този интерфейс, актуализират потребителския интерфейс.

Той е много по-добър от MVC, тъй като тук презентаторът няма NO ANDROID API и може лесно да се тества.
Изгледите могат да бъдат тествани с помощта на еспресо и т.н., за да видите дали изгледите са актуализирани или не.

Така гледките са доста тъпи. Те получават данни от презентатора и съответно актуализират компонентите на потребителския интерфейс.

MVVM - Изглед на модел ViewModel

Освен това свежда до минимум кода за обвързване на изгледа, т.е. как изгледът се свързва към данните на модела.

Говорейки в екосистемата Android, тя използва библиотеката за обвързване на данни от Google, а логиката на свързване на изгледа е внедрена в оформлението на XML.

Модел:
Същото като в MVC / MVP модел.

Вижте:
1. Същото като в MVC / MVP модел.

ViewModel:
1. Съдържа Модела.
2. Използва наблюдавани стойности за актуализираните стойности.
3. При актуализиране на стойността съответните изгледи ще получат актуализации (използва библиотека за обвързване на данни).

Диаграмата на MVP ще изглежда така:

Така изгледът получава взаимодействия с потребителя и ще уведоми модела на изглед.
Сега ViewModel ще актуализира модела, както и наблюдаемото (което ще се позове на промяната на стойността). След това интерфейсът ViewModel ще актуализира директно потребителския интерфейс (XML оформления).

Така изгледът, т.е. XML файлът ще изглежда така:

Както е показано, TextView тук може да се актуализира директно неговия текст, тъй като стойността на съобщението се променя.

Сравнения между MVC / MVP / MVVM:

Контролерите (дейности в Android) имат висока зависимост от Android, за разлика от MVP и MVVM, и следователно е лесно да се тества единица в MVP / MVVM.

Въпреки това, XML става по-сложен в MVVM за целите на обвързване на данни.