Podrška #25776
Zatvorentip: refactor scatter/gather, dbf update, dbf create
100%
Povezani tiketi 2 (0 otvoreno — 2 zatvorenih)
Izmjenjeno od Ernad Husremović prije oko 13 godina
1) dbf_get_rec
update zapisa, no_lock = .t. znači da se ne vrši lock/unlock
delete zapisa
zap dbf i tabele na serveru
pročita iz dbf-a podatke i setuje odgovarajuće public varijable _Id, _Naz itd
pokupi stanje globalnih varijabli i napuni odgovarajući hash array rec := get_dbf_global_memory("")
=> _Id, _Naz, _Opis => _rec["id"], _rec["opis"], _rec["naz"]
6) update_rec_server_and_dbf
// mijenja zapis na serveru, pa u dbf-u // // update_rec_server_and_dbf( values, // {"id", "oznaka"}, // {|x| "ID=" + _sql_quote(x["id"]) + "|| OZNAKA=" + _sql_quote(x["oznaka"]) }) // // server_only je pobezveze, radi gornje funkcije za koju nisam siguran da ikome treba // -----------------------------------------------------------------------------------------------------------
Izmjenjeno od Ernad Husremović prije oko 13 godina
primjer update dbf-a¶
treba imati na umu da refactoring NIJE prepisivanje istih gather/scatter konstrukata sa novim imenima funkcija
=>
šta uočavamo:
umjesto globalnih varijabli mi koristimo isključivo lokalnu hash varijablu _rec i sve promjene radimo unutar nje.
mogli smo ovo uraditi sa set_global_vars_from_dbf / get_global_dbf_memvars / dbf_update_rec ali time ne bi iskoristili nove funkcije koje su nam dostupne. Ne bi napravili refactoring koda.
Izmjenjeno od Ernad Husremović prije oko 13 godina
treba dodati da je ovdje trebalo dodati i kod kojim se provjerava uspješnost update-a. i handler u slučaju greške.
if !dbf_update_rec() // delete apendovani zapis // delete_rec_with_rlock() ako treba zaključati DELETE // ako ne treba zaključati _nekako_hendlirati_ovaj_problem_barem_sa_msg_prijavom_da_postoji_problem endif
Izmjenjeno od Ernad Husremović prije oko 13 godina
format, deklaracija lokalnih varijabli¶
prilikom refactoringa sam popravio formatiranje koda na kome sam radio, uveo par lokalnih varijabli (umjesto što su nedeklarirane i time implicitno privatne - primjer _idvn) gdje sam vidio da je to moguće bez značajnog utroška vremena i dodatnog testiranja
Izmjenjeno od Ernad Husremović prije oko 13 godina
primjer 2¶
ovdje se vidi kako se vrši ispravka polja u tabeli:
prvo imamo get gdje mijenjamo hash elemente a ne public varijable, pa onda update-ujemo tabelu
moglo je biti urađeno i sa dvije lokalne varijable (ne bi trebali _rec i _rec_2) pa bi get-ovali te dvije varijable. Svejedno bitno je da je kod pregledan i da nemamo public varijable
Izmjenjeno od Ernad Husremović prije oko 13 godina
primjer 3 - replace zamijeniti sa dbf_get_rec, dbf_update_rec¶
iako je ovaj kod funkcionisao i bez promjene, u svrhu primjera sam napravio refactoring:
https://github.com/knowhow/F18_knowhow/blob/5d9db45a54e821/fin/fin_knjizenje.prg#L969
na kraju se dobija puno pregledniji kod.
Zaključak: replace konstrukte treba izbaciti u svim novim implementacijama i na mjestima gdje se ukaže potreba za refactoring.
Izmjenjeno od Ernad Husremović prije oko 13 godina
- Naslov promijenjeno iz refactor scatter/gather, dbf update u refactor scatter/gather, dbf update, dbf create
dbfcreate - _alias, _ime_dbf¶
uočio sam da i ovdje vlada poprilična konfuzija pa sam napravio refactoring kreiranja fin_pom tabele
Tu je najbitnije uočiti to da PRIVPATH i slično treba izbaciti iz koda.
Izmjenjeno od Ernad Husremović prije oko 13 godina
Izmjenjeno od Ernad Husremović prije oko 13 godina
- Status promijenjeno iz Dodijeljeno u Zatvoreno
- % završeno promijenjeno iz 0 u 100
Izmjenjeno od Ernad Husremović prije oko 13 godina
- Naslov promijenjeno iz refactor scatter/gather, dbf update, dbf create u tip: refactor scatter/gather, dbf update, dbf create