Projekat

Općenito

Profil

Akcije

Podrška #25776

Zatvoren

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

Dodano od Ernad Husremović prije više od 13 godina. Izmjenjeno prije više od 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 više od 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 više od 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 više od 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 više od 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 više od 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 više od 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 više od 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 više od 13 godina

povrat dokumenta u pripremu

#25784

Akcije #9

Izmjenjeno od Ernad Husremović prije više od 13 godina

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

Izmjenjeno od Ernad Husremović prije više od 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 više od 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