Levinud Androidi arhitektuurid (MVC vs MVP vs MVVM)

Enne kui läheme edasi arhitektuuride juurde, teeme selle mõiste selgeks.
Jumalaklass / objekt: klass, millel on palju komponente ja komponendid on ühendatud. See on väga halb mõte ja seda tuleb iga hinna eest vältida. See on arhitektuuriline muster.

MVC: mudelivaate kontroller

Mudel:
1. Esitab andmemudeleid.
2. Haldab andmeriike
3. Tal on äriloogika

Vaade:
1. Kuidas me oma andmeid esindame, nt Vaated / paigutused Androidis.
2. Renderdab kasutajaliidese.

Kontroller:
1. Hooldab kasutaja suhet meie rakendusega.
2. Mudeli ja vaate vaheline suhtluskanal.
nt. killud / tegevused Androidis.

MVC vooskeem näeb välja järgmine:

Kasutaja suhtleb kasutajaliidesega ja töötlejat teavitatakse vaate kaudu. Kasutaja interaktsiooni põhjal muudab kontroller teatud mudeleid. Mudelid täidavad mõnda äriloogikat ja tagastavad värskendatud mudeli andmete oleku kontrollerile. Seejärel saab kontroller UI-d värskendada vastavalt Modelilt saadud uuele andmeolekule.

Vaade saab kasutaja sisendi ja palub kontrolleril kasutaja sisendit hallata.
Kontroller saab sisendi vaatest lähtuvalt sellest, kas kasutaja otsustas sõnumi peita / vaadata. Kontroller kutsub mudelit andmete oleku värskendamiseks (teade siin).
Mudel värskendab kontrolleri sisendi põhjal mudelit. Seega sisaldab see seda äriloogikat.
Kontrolörid saavad värskendatud andmeid ja värskendavad vastavalt kasutajaliidest.

MVP: mudelivaate saatejuht

Mudel:
Sama mis MVC mustris.

Vaade:
1. Kuidas me oma andmeid esindame, nt Vaated / paigutused, aga ka tegevused / killud Androidis.
2. Rakendab saatejuhi toimingute jaoks liidese.

Saatejuht:
1. Pole vaadetega seotud (erinevalt MVC-st).
2. Operatsioonid tuginevad meie vaadetele.
3. Vaateid värskendatakse Vaate liidese kaudu.

MVP vooskeem näeb välja järgmine:

Ehkki vooskeem näeb välja sama kui MVC, on erinevus selles, kuidas VIew ja saatejuhid / kontrollerid üksteisega suhtlevad.

MVP-s suhtlevad vaated ja saatejuhid liidese kaudu (erinevalt MVC-st). Saatejuhid teostavad liideses mõnda toimingut, mida rakendatakse vaadetes ja seetõttu vaade värskendatakse.

Nii et mudel jääb samaks (nagu MVC-s).
Siinne saatejuht teeb lihtsalt liidese toiminguid ja tal pole teadmisi vaadetest, mida ta proovib värskendada.
Nii värskendavad selle liidese rakenduse vaated kasutajaliidest.

See on palju parem kui MVC, kuna siin pole saatejuhil ANDROID-i API-d ja seda saab hõlpsasti testida.
Vaateid saab testida espresso jms abil, et näha, kas vaateid värskendatakse või mitte.

Seega on vaated üsna nukrad. Nad saavad andmeid saatejuhilt ja värskendavad vastavalt kasutajaliidese komponente.

MVVM - mudelivaate vaademudel

See minimeerib veelgi vaate sidumiskoodi, st kuidas vaade on mudeli andmetega seotud.

Rääkides Androidi ökosüsteemis, kasutab see Google'i andmete sidumise teeki ja vaate sidumisloogikat rakendatakse XML-i paigutustes.

Mudel:
Sama mis MVC / MVP mustris.

Vaade:
1. Sama nagu MVC / MVP mustris.

Vaatemudel:
1. See sisaldab mudelit.
2. Kasutab värskenduste väärtuste jälgitavaid väärtusi.
3. Väärtuse värskenduse korral saavad vastavad vaated värskendusi (kasutab Data Binding Library).

MVP vooskeem näeb välja järgmine:

Nii saab vaade kasutaja interaktsioonid ja teavitab vaatemudelit.
Nüüd värskendab ViewModel nii mudelit kui ka Observable (mis kutsub esile väärtuse muutust). Järgmisena värskendab ViewModeli liides otse kasutajaliidest (XML-paigutusi).

Nii et vaade, st XML-fail näeb välja selline:

Nagu nähtub, saab siin olev TextView oma teksti otse värskendada, kuna sõnumi väärtus muutub.

Võrdlused MVC / MVP / MVVM vahel:

Kontrolleritel (Androidi tegevused), erinevalt MVP-st ja MVVM-ist, on Androidist suur sõltuvus ja seetõttu on seda MVP / MVVM-is lihtne testida.

XML muutub MVVM-is andmete sidumise eesmärgil keerukamaks.