O introducere în prezentatorul modelului View on Android

Când dezvoltăm o aplicație complexă, întâlnim, în general, provocări care au fost probabil abordate înainte și care au deja unele soluții destul de mari. Astfel de soluții sunt adesea denumite modele. În general vorbim despre modele de design și modele arhitecturale. Ele simplifică dezvoltarea și ar trebui să le folosim ori de câte ori este potrivit să le folosim.

Acest tutorial vă va ajuta să înțelegeți importanța unui proiect bine proiectat și de ce arhitectura standard Android nu este întotdeauna suficientă. Discutăm câteva probleme potențiale pe care le-ați întâmpina când dezvoltați aplicații Android și vă arăt cum să remediem aceste probleme îmbunătățind testabilitatea și fiabilitatea aplicației prin intermediul Vizualizați modelul de prezentare (MVP).

În acest tutorial, explorăm:

  • valoarea aplicării modelelor arhitecturale cunoscute în proiectele software
  • de ce poate fi o idee bună să modificați arhitectura standard Android
  • conceptele-cheie din spatele modelului Model View Viewer (MVP)
  • diferențele dintre MVC și MVP
  • cum MVP se potrivește cu Android SDK

În prima parte a acestui tutorial, ne concentrăm asupra teoriei modelului MVP. A doua parte a acestui tutorial este mult mai practică.

1. Arhitectura Android

Proiectarea unui proiect ar trebui să fie o preocupare încă de la început. Unul dintre primele lucruri pe care ar trebui să le luăm în considerare este arhitectura pe care intenționăm să o adoptăm, deoarece va defini modul în care diferitele elemente ale aplicației noastre se raportează unul la celălalt. De asemenea, vom stabili câteva reguli de bază care să ne ghideze în timpul dezvoltării.

În general, un cadru sau un SDK se așteaptă ca anumite lucruri să fie făcute într-un anumit mod, dar acest lucru nu este întotdeauna cel potrivit pentru un proiect. Uneori, nu există un mod predefinit sau corect de a face lucrurile, lăsând deciziile de proiectare până la dezvoltator. SDK-ul Android așteaptă ca lucrurile să se facă într-un anumit mod, dar acest lucru nu este întotdeauna suficient sau este cea mai bună alegere.

Cu toate că Android oferă un SDK excelent, modelele sale arhitecturale sunt destul de neobișnuite și vă pot ajuta cu ușurință în timpul dezvoltării, mai ales atunci când construiți aplicații complexe care trebuie testate și întreținute mult timp. Din fericire, putem alege din mai multe soluții arhitecturale pentru a rezolva această problemă.

Care este problema?

Aceasta este o întrebare dificilă. Unii ar putea spune că nu există probleme cu arhitectura oferită de Android. Desigur, lucrarea a fost făcută. Dar putem face mai bine? Cred cu tărie că putem.

Instrumentele oferite de Android, cu layouts, Activități și structuri de date, par să ne orienteze în direcția modelului Model View Controller (MVC). MVC este un model solid, stabilit, care urmărește să izoleze diferitele roluri ale unei aplicații. Aceasta se numește separarea preocupărilor.

Această arhitectură creează trei straturi:

  • Model
  • Vedere
  • Controlor

Fiecare strat este responsabil pentru un aspect al aplicației. Model răspunde logicii afacerii, Vedere este interfața cu utilizatorul și Controlor mediaza Vedere acces la Model.

Dar dacă analizăm cu atenție arhitectura Android, mai ales relația dintre Vedere (Activități, Fragmente etc.) și Model (structuri de date), putem concluziona că nu poate fi considerat MVC. Este destul de diferit de MVC și respectă propriile reguli. Cu siguranta, puteti ajunge in calea dvs. atunci cand obiectivul dvs. este acela de a crea cea mai buna aplicatie posibila.

Fiind mai specific, dacă ne gândim la legătura simbiotică dintre încărcătoare și activități sau fragmente, puteți înțelege de ce ar trebui să acordăm o atenție deosebită arhitecturii Android. O activitate sau un fragment este responsabil pentru a apela încărcătorul, care ar trebui să preia datele și să-l returneze părintelui său. Existența sa este complet legată de părintele său și nu există nici o separație între rolul View (Activity / Fragment) și logica de afaceri efectuată de Loader.

Cum putem utiliza testarea unitară într-o aplicație în care datele (Loader) sunt atât de strâns legate de Vizualizare (Activitate sau Fragment) dacă esența testării unității este de a testa cea mai mică bucată de cod posibil? Dacă lucrați într-o echipă și trebuie să schimbați ceva în codul altcuiva, cum puteți găsi problema dacă proiectul nu respectă un model arhitectural cunoscut și nimic poate fi literal oriunde?

Care este solutia?

Putem rezolva acest lucru prin implementarea unui model arhitectural diferit și, din fericire, SDK-ul Android ne permite să alegem între mai multe soluții. Ne putem restrânge opțiunile la soluțiile care sunt cele mai potrivite pentru Android. Modelul de vizualizare a modelului de vizualizare (MVC) este o alegere bună, dar un aspect mai bun este modelul Model View View Presenter (MVP). MVP a fost dezvoltată folosind aceleași premise ca și MVC, dar cu o paradigmă mai modernă care creează o separare și mai mare a îngrijorărilor și maximizează testabilitatea aplicației.

Având în vedere arhitectura Android (sau lipsa acesteia), putem concluziona că:

  • Android nu se îngrijorează prea mult de o separare a preocupărilor
  • cel mai bine este să lăsați arhitectura Android pentru ceea ce este, deoarece ar putea duce la probleme în viitor
  • lipsa unui model arhitectural adecvat ar putea face testarea unității o adevărată agonie
  • Android ne permite să alegem între mai multe modele arhitecturale alternative
  • Model View View Presenter (MVP) este una dintre cele mai bune soluții disponibile pentru Android

2. Model View Viewer pe Android

După cum am menționat mai devreme, separarea preocupărilor nu este cel mai puternic punct de vedere al Androidului. Din fericire, modelul Model View View Presenter îmbunătățește semnificativ acest lucru. MVP separă aplicația în trei straturi:

  • Model
  • Vedere
  • Prezentator

Fiecare are responsabilitățile și comunicarea dintre aceste straturi este gestionată de prezentator. Prezentatorul lucrează ca mediator între diferitele părți.

  • Modelul deține logica de afaceri a aplicației. Acesta controlează modul în care datele pot fi create, stocate și modificate.
  • Vizualizarea este o interfață pasivă care afișează datele și trasează acțiunile utilizatorului către Prezentator.
  • Prezentatorul acționează ca omul din mijloc. Extrage date din model și îl afișează în Vedere. De asemenea, procesează acțiunile utilizatorilor trimise de Vizualizare.

Diferențe între MVC și MVP

Modelul Model View View Presenter se bazează pe modelul Model View Controller. Din moment ce împărtășesc mai multe concepte, poate fi greu să le diferențiezi. Prezentatorul și controlorul au un rol similar. Ei sunt responsabili pentru comunicarea dintre model și vedere. Acestea fiind spuse, controlorul nu gestionează modelul și vizualizarea la fel de strict ca și prezentatorul.

În modelul MVC, stratul View este oarecum inteligent și poate prelua date direct din model. În modelul MVP, vizualizarea este complet pasivă și datele sunt livrate întotdeauna în Vizualizarea de către prezentator. Controlerele din MVC pot fi, de asemenea, distribuite între mai multe vizualizări. În MVP, vizualizarea și prezentatorul au o relație unu-la-unu, prin urmare, prezentatorul este legat de o vizualizare.

  • În MVP, vizualizarea nu poate accesa modelul.
  • Prezentatorul este legat de o singură vizualizare.
  • Vizualizarea este complet pasivă în modelul MVP.

Aceste diferențe conceptuale fac ca modelul MVP să garanteze o separare mai bună a preocupărilor și, de asemenea, crește considerabil testabilitatea aplicației prin promovarea unei mai mari separări a celor trei straturi de bază.

Activitate, Fragmentare și Vizualizare obiecte

Există mai multe interpretări cu privire la modul în care MVP poate fi implementat pe Android. În general, totuși, activitățile și fragmentele sunt atribuite rolului View și sunt responsabile de crearea prezentatorului și a modelului. Vizualizarea este, de asemenea, responsabilă pentru menținerea modelului și a prezentatorului între schimbările de configurație, informându-le despre eventuala distrugere a vederii.

Alte obiecte de vizualizare, cum ar fi RecyclerView, pot fi, de asemenea, considerate parte din stratul View în MVP. Există o relație unu-la-unu între View și prezentator și, uneori, situațiile complexe pot solicita mai mulți prezentatori.

Ce știm atât de departe

  • Folosind modele arhitecturale și de design, putem face dezvoltarea mult mai ușoară și mai transparentă.
  • Android nu are un model arhitectural bine structurat.
  • Fără a utiliza modele de design stabilite, am putea întâlni o serie de dificultăți de-a lungul drumului, în special probleme legate de întreținere și testabilitate.
  • Modelul Model View View Presenter mărește separarea preocupărilor și facilitează testarea unităților.
  • Prezentatorul mediază comunicarea dintre vizualizare și model.
  • Vizualizarea afișează date și direcționează interacțiunea cu prezentatorul.
  • Modelul este responsabil de logica de afaceri a aplicației.
  • Rolul de vizualizare este în mare parte asumat de o activitate sau un fragment.

Concluzie

În tutorialul următor, implementăm modelul Model View Presenter pe Android. Am testat conceptele pe care le-am învățat în acest tutorial și analizăm în continuare complexitatea modelului și ce înseamnă asta pentru Android.

La sfârșitul acestei serii, sunteți în măsură să implementați MVP în propriile proiecte, să vă creați propriul cadru sau să adoptați alte soluții cunoscute. Sper să te văd în următorul tutorial.

Cod