Projekat

Općenito

Profil

Akcije

Podrška #25776

Zatvoren

tip: refactor scatter/gather, dbf update, dbf create

Dodano od Ernad Husremović prije oko 13 godina. Izmjenjeno prije oko 13 godina.

Status:
Zatvoreno
Prioritet:
Normalan
Odgovorna osoba:
Početak:
21.12.2011
Završetak:
% završeno:

100%

Procjena vremena:

Povezani tiketi 2 (0 otvoreno2 zatvorenih)

korelira sa F18 - Greške #25857: FAKT unos dokumenta setovanje VPC-a, lock requiredZatvorenoSaša Vranić23.12.2011

Akcije
korelira sa F18 - Greške #25891: update_rec_dbf_and_server() bug, problem kada u id-ovima imamo numerička poljaZatvorenoErnad Husremović26.12.2011

Akcije
Akcije #1

Izmjenjeno od Ernad Husremović prije oko 13 godina

1) dbf_get_rec

2) dbf_update_rec

update zapisa, no_lock = .t. znači da se ne vrši lock/unlock

3) delete_rec_server_and_dbf

delete zapisa

4) delete_all_dbf_and_server

zap dbf i tabele na serveru

5) set_global_vars_from_dbf

pročita iz dbf-a podatke i setuje odgovarajuće public varijable _Id, _Naz itd

6) get_dbf_global_memvars

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
// -----------------------------------------------------------------------------------------------------------

update_rec_server_and_dbf

Akcije #2

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

old scatter/gather code

=>

refactored code

š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.

Akcije #3

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
Akcije #4

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

Akcije #5

Izmjenjeno od Ernad Husremović prije oko 13 godina

primjer 2

ovdje se vidi kako se vrši ispravka polja u tabeli:

refactored code

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

Akcije #6

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.

Akcije #7

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.

Akcije #8

Izmjenjeno od Ernad Husremović prije oko 13 godina

povrat dokumenta u pripremu

#25784

Akcije #9

Izmjenjeno od Ernad Husremović prije oko 13 godina

  • Status promijenjeno iz Dodijeljeno u Zatvoreno
  • % završeno promijenjeno iz 0 u 100
Akcije #10

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
Akcije #11

Izmjenjeno od Ernad Husremović prije oko 13 godina

numerička polja u identifikatoru zapisa, popunjavanje gaDBFs

http://redmine.bring.out.ba/issues/25891#note-17

Akcije

Također dostupno kao Atom PDF