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:
În prima parte a acestui tutorial, ne concentrăm asupra teoriei modelului MVP. A doua parte a acestui tutorial este mult mai practică.
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ă.
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:
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?
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ă:
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:
Fiecare are responsabilitățile și comunicarea dintre aceste straturi este gestionată de prezentator. Prezentatorul lucrează ca mediator între diferitele părți.
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.
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ă.
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.
Î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.