Cuprins
Manipularea concurs În aplicațiile web, este unul dintre subiectele cărora trebuie să le dedicăm puțin timp de calitate, deoarece, datorită naturii aplicației, putem găsi cazuri în care mai mulți utilizatori trebuie să interacționeze cu același element.De la sine este interacţiune Nu este o problemă, adevărata problemă vine atunci când după ce ați modificat sau atins acest element, este necesar să îl salvați în baza de date și apoi doi sau mai mulți utilizatori doresc să facă o acțiune asupra aceluiași element în același timp, de aceea logica noastră trebuie să definească un comportament pentru a ști care este modalitatea corectă de a rezolva acest lucru.
După cum am explicat la început, concurs Este atunci când doi sau mai mulți actori lucrează la un element din aplicația noastră, generând o acțiune împotriva bazei de date.
Caz de concurențăProblemele pot apărea atunci când modificările sunt conflictuale, de exemplu: utilizatorul A a salvat o valoare, dar și utilizatorul B a modificat la acel moment și a salvat o valoare diferită, în ochii utilizatorului A, conținutul său nu a fost modificat și în ochii utilizatorul B nu era nimic care să-l împiedice să-și facă schimbarea.
Aceste tipuri de conflicte pot pătura performanța aplicației noastre în ochii utilizatorului, așa că trebuie să evaluăm dacă zonele pe care le avem vor merita sau nu să le programăm pentru concurență.
Să vedem câteva tipuri de concurență, în acest fel putem înțelege un pic mai mult ce tip de acțiuni putem executa în aplicațiile noastre:
Concurență pesimistăAceastă abordare propune ca atunci când folosim baza de date să realizăm un blocarea preventivă din registrul utilizat, cu aceasta evităm ca mai mulți utilizatori să modifice valoarea simultan, problema rezultă în faptul că în mediul web nu este posibil să o folosim temeinic, deoarece, deoarece nu există stări, nu știm cu adevărat dacă blocarea a fost aplicat sau eliminat până când comunicăm cu serverul, generând confuzie și încetineală în utilizare.
Participare optimistăAceastă altă abordare face ceva ceva mai compatibil cu web-ul, atunci când se modifică, înainte de a salva în baza de date verifică faptul că datele nu au fost modificate din momentul în care s-a făcut citirea, pentru aceasta facem o comparație a valorilor înregistrării și un câmp asociat care poartă o marcă de timp cu dată, oră și secunde pentru o precizie mai mare.
ASP.NET MVC Nu susține abordarea pesimistă, deci trebuie să lucrăm cu cea optimistă, pentru aceasta trebuie să furnizăm structurilor noastre câmpuri de date pentru a salva ultima dată când a fost modificată, astfel încât să putem ști dacă valoarea a fost modificată după ce am obținut înregistrarea și înainte de a o salva, cu aceasta putem obține o alertă și astfel putem decide dacă să suprascriem sau nu acele valori.
Să vedem un mic exemplu de cod despre cum am putea valida acest lucru:
Observăm atunci că validăm atunci când facem o modificare în baza de date dacă câmpul a fost modificat după ce am făcut citirea, dacă da ridicăm o excepție, cu aceasta vom putea face acțiunile corespunzătoare, lăsăm și spațiu pentru a putea lucra la diferitele excepții care pot fi generate.
La sfârșitul acestui tutorial știm deja ceva mai mult despre concurența în bazele de date și despre cum să rezolvăm problema ASP.NET MVC.