Sari la conținutul principal

Cerinte prealabile

În cadrul acestui laborator, ne vom concentra pe dezvoltarea unui server web folosind .NET și limbajul de programare C#. Chiar dacă nu aveți experiență în C#, acesta este similar cu limbajul Java și poate fi învățat ușor având cunoștințe de bază în programarea orientată pe obiect. Vă recomandăm să parcurgeți acest curs pentru o scurtă introducere în programarea în C#.

.NET reprezintă un framework inițial dezvoltat de Microsoft pentru sistemul de operare Windows, dar care acum este compatibilă cu multiple sisteme de operare. Este una dintre cele mai utilizate framework-uri pentru dezvoltarea aplicațiilor web enterprise, iar o altă tehnologie populară în acest domeniu este Java Spring. Beneficiile utilizării .NET includ faptul că este cross-platform, ușor de învățat, dispune de o comunitate extinsă și oferă documentație detaliată. Limbajul de programare principal pentru dezvoltarea în cadrul framework-ului .NET este C#, un limbaj multi-paradigma cu suport pentru programarea orientată pe obiect, funcțională și reflexie.

Există totuși anumite particularități în redactarea codului în C#. În cazul în care întâmpinați dificultăți în înțelegerea scheletului laboratorului, pe lângă cursul nostru puteți consulta documentația oferită de Microsoft și resursele lor electronice pentru dezvoltarea de aplicații web disponibile aici. Deși în această carte se discută despre implementarea arhitecturilor pe microservicii, concepte destul de avansate, principalele design pattern-uri și cele mai bune practici sunt descrise acolo și se aplică și în dezvoltarea aplicațiilor backend monolit.

Unelte

Înainte de a începe dezvoltarea efectivă, vă trebuie să pregătiți următoarele:

IDE și pachete pentru .NET 8

  • Pentru Windows, vă sugerăm să utilizați Visual Studio 2022 Community, disponibil aici. Alternativ, puteți accesa versiunea Professional sau Enterprise prin MyUPB.
  • Pentru Linux/MacOSX sau ca alternativă, puteți utiliza platforma DotUltimate cu Rider ca IDE. Puteți solicita o licență academică pentru întreaga suită de la JetBrains folosind adresa de e-mail instituțională. Este posibil să fie necesar să instalați SDK-ul pentru .NET 8 de aici.
  • Bonus: Pentru o experiență de dezvoltare mai bună cu IDE-ul, puteți utiliza Visual Studio cu ReSharper de la JetBrains, dar asigurați-vă că aveți cel puțin 16GB de RAM.

Baza de date PostgreSQL

  • Pentru a folosi baza de date PostgreSQL o opțiune este să instalați PostgreSQL pe mașina locală, deși nu este recomandată.
  • O alternativă mai bună este să instalați Docker și Docker Compose. Rulați comanda de docker-compose cu fișierul YAML găsit în gitLab-ul laboratorului:

Un client de bază de date

  • Pentru PostgreSQL, puteți utiliza PGAdmin.
  • Dacă doriți un client universal, puteți opta pentru DBeaver.
docker-compose -f .\docker-compose.yml -p mobylab-app-db up -d

📄️ Concepte de baza in dezvoltarea de aplicatii web

În cadrul acestui laborator, vom împărți aplicația web în două componente distincte: frontend și backend. Frontend-ul reprezintă partea vizibilă a aplicației pentru utilizator și rulează în browserul acestuia. Având frontend-ul ca o entitate independentă, acesta va fi dezvoltat sub forma unei aplicații SPA (Single-Page Application). Spre deosebire de un MPA (Multi-Page Application), o aplicație SPA constă într-o singură pagină care își modifică dinamic conținutul în funcție de acțiunile utilizatorului și datele furnizate de backend.

📄️ Interacțiunea cu baza de date

Pe lângă logica aplicației, trebuie să existe persistența datelor asupra cărora se efectuează logica efectivă. În acest sens, majoritatea aplicațiilor folosesc baze de date. Pentru a simplifica interacțiunea programelor cu baza de date, au fost implementate ORM-uri (Object-Relational Mapping). Acestea sunt framework-uri care realizează o corespondență între tabelele și tipurile de date din baza de date cu obiectele, numite entități, și tipurile declarate în codul aplicației.

📄️ Tratarea cererilor HTTP

Trebuie clarificat în primul rând cum funcționează aplicația de backend în .NET. Când aplicația de tip WebApplication este pornită, se deschide un port și se așteaptă cererile HTTP. Cererea este parsată și transformată într-un context HTTP. Contextul este trimis către un pipeline de execuție care va apela rutinele adecvate pentru acea cerere și va întoarce răspunsul înapoi în acel pipeline. Fiecare pas executat în pipeline se numește middleware, iar o parte din acestea se pot defini de către dezvoltatori. Ultimul middleware executat la tratarea cererii apelează clase definite de dezvoltator de tip controller. În controller se specifică ce endpoint-uri/rute din API-ul serverului corespund la ce metode din acea clasă. O clasă controller este o clasă specială ai cărei metode publice sunt apelate la accesul rutelor corespunzătoare metodei, acestea moștenesc clasa ControllerBase. Pentru ca framework-ul să identifice controllerele și rutele, se decorează clasa și metodele cu atribute, clase ce extind clasa Attibute. De exemplu, [ApiController] care decorează o clasă controller specifică framework-ului că această clasă trebuie să fie folosită ca controller; [Route("api/[controller]")] pus pe clasă și [HttpGet("my-route")] pe metoda din controller specifică că atunci când se accesează ruta "/api/<nume_clasa_controller>/my-route" cu un HTTP GET se apelează acea metodă în cauză.

📄️ Particularitati C#

Vom discuta aici câteva particularități ale programării în C# față de alte framework-uri de web; informații mai extinse le puteți găsi în acest curs. O particularitate importantă în C# este că există metode de extensie. Acestea sunt artificii de compilator care adaugă metode noi la clase deja existente și pot fi apelate obiectual ca oricare alte metode non-statice ale acestor clase extinse. Metodele de extensie sunt folositoare pentru a extinde funcționalitatea pentru cod deja existent fără a interveni asupra acestuia.