![]() |
Formulari i 'race condition'
Šta se u praksi pokazalo kao najbolje rešenje za sprečavanje 'race condition' situacije kod editovanja formulara ?
Primer: Administrator 1 je otvorio formu stranicu kojom posmatra sadržaj nekog zapisa iz baze, i počinje da ga edituje, jer mu se recimo ne sviđa naslov artikla. Administrator 2 zatim otvara na svom računaru istu tu stranicu i gleda sadržaj istog tog zapisa iz baze, jer recimo želi da cenzuriše psovku iz teksta artikla. Admin 1 je izmenio naslov i pritiska dugme 'Save' i snima nov sadržaj formulara u bazu. Admin 2 završava cenzurisanje teksta i pritiska 'Save'. Time u stvari on pregazi naslov teme originalnim sadržajem i tako slučajno anulira efekat prvog admina. Kako je to rešeno u nekim većim sistemima ? :confused: Zaključavanje editovanja zapisa ne dolazi u obzir. |
Po meni je najbolje resenje da pamtis last_updated timestamp u samom formularu i onda kod snimanja ako se to ne poklapa sa onim u bazi, treba upozoriti da su podaci u medjuvremenu izmenjeni i pitati da li da ih zgazi ili ne. Ponudis da se u drugom prozoru otvore svezi podaci, pa nek uporede i urade rucni merge.
Ako imas vremena da se zezas, moze se napraviti i da sistem sam uporedi sve podatke redom i da vidi tacno koji su izmenjeni i to odmah pokaze ili cak da uradi automatski merge (nije to tako tesko: ako je polje menjala samo jedna osoba, zadrzi se poslednja izmena.. kao svn sto radi, buni se samo ako su oboje menjali isti podatak). Takodje dobro je i da se pamti ko je sve menjao fajl, hronoloski, pa da osoba A moze da pozove osobu B i konsultuje se oko izmena. |
ili snimis samo deo za koji zakljucis da je izmenjen...
tu bi moglo preko javascripta da se napravi da korisnik prvo klikne misem na pasus koji zeli da izmeni - onda samo taj deo postane edit-abilan - i posle samo njega snimas u bazu. ako neko drugi isti taj pasus menja u tom trenutku - onda upozoris korisnike. s tim sto to podrazumeva da svaki pasus ima svoj ID broj... |
to je ok za jednostavno editovanje texta, tipa CMS-a, ali zamisli neki sluzbeni formular tipa racunovodstva i radnika koji mora da ceka da ajax proveri svako polje da bi mogao da unese podatak. Ove sto su navikle na Clipper mi se i ovako bune da nije dovoljno brzo u browseru :)
Da budem iskren, ja se sa tim nikad nisam zezao, naprosto zakljucam editovanje ako je neko drugi otvorio i ispisem poruku tipa: "Pera Peric trenutno edituje ovaj formular, kontaktirajte ga da ga zatvori." i cao. |
ne vidim sto bi se na javascript izgubilo vreme... dok korisnik otkuca prvo slovo on ce u pozadini proveriti lock... a submit ko submit, isto za sekund posaljes i stigne odgovor, kao i svaki HTTP POST...
|
Izgleda da nisi radio sa ljudima koji su penziju dočekali radeći u Clipper-u i crno-plavom interfejsu... :)
|
Off Topic: Summer '87 FTW! |
Citat:
|
Vreme je GMT +2. Trenutno vreme je 05:12. |
Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.