Verzioniranje klasa

poruka: 35
|
čitano: 4.123
|
moderatori: XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
odjavljen
offline
Verzioniranje klasa

Pozdrav ekipa!

 

Imam pitanje koje ne znam kako bih sročio, pa ću početi sa laganim uvodom...

U firmi smo razvili sustav za određeni dio bankarskog poslovanja. Koristimo kombinaciju C#/MSSQL. Imamo nekoliko solutiona. Najveći je sastavljen od 7 projekata i ima poprilično koda. Imamo 600-700 naših klasa, tone reporta, user kontroli, formi... Sve je OK, stvar dobro radi, klijenti prezadovoljni, bla bla...

 

Jedan od potencijalnih klijenata nas je pitao što radimo sa prikazom starih podataka koji su unijeti sa starijom verzijom aplikacije. Naravno, svaka nova verzija nam je unazad kompatibilna sa postojećim podacima a po potrebi napravimo konverziju da bi sve funkcioniralo.

Ali...

Gazda je došao na slijedeću ideju:

Za svaku promjenu u strukturi podataka (npr, moramo promjeniti naziv ili tip nekakvog fielda) moramo napraviti novu tablicu u bazi, novu klasu, novu formu, nove reporte koji služe prikazu tih podataka u bilo kojem kontekstu...

Dakle, najbanalniji primjer: u podacima o subjektu smo odlučili promjeniti tip polja ulica sa varchar(50) na int kako bismo imali šifrarnik ulica. Iz toga bi slijedile sve ove promjene. Kao da ni to nije dovoljno, svi podaci moraju završiti u data warehouse-u iz kojeg se generiraju kocke. Dakle i tamo treba napraviti nove procedure za obradu i prijenos podataka.

E sad, to je dio problema. Drugi dio je zapravo kako nazvati sve te klase koje su gotovo iste. Znači imamo klasu cSubjekt u 5 različitih verzija (cSubjekt1, cSubjekt2,...) i prema određenom kriteriju trebamo instancirati jednu od njih skupa sa odgovarajućom formom.

Inače, business klase nam uglavnom imaju poprilično child klasa pa se tako zna dogoditi da je jedan entitet u solutionu zapravo sastavljen od 50-60 klasa i uglavnom isto toliko tablica u bazi.

Treći dio problema je što koristimo 3rd party kontrole i nema načina da instanciramo one verzije formi koje su napravljene uz pomoć neke starije verzije.

 

Ja sam se svojski trudio gazdi objasniti da to nema apsolutno nikakovg smisla, da to podrazumijeva komplikacije koje se uopće ne mogu ni sagledati. On je vrlo vrlo slabašan programer (iako se time bavi već 20 godina) i prijedlog mu je "Pa stavit ćemo nekakav atribut na klasu pa ćemo znati koja je to verzija u pitanju". Nisam imao snage to prokomentirati...

 

Dakle, koji su vaši komentari na ovo? Jel postoji ikakav način da se ovo napravi (bez korištenja run time kreiranja klasa i sličnih "mađijanja")? I konačno jel to uopće ima ikakvog smisla???

Freak Show Inc.
 
0 0 hvala 0
16 godina
offline
Re: Verzioniranje klasa

cSubject1, cSubject2... Bojim se pitati što zapravo piše u UMLu...

 

Pa što ne bi bilo lakše držati onu aktualnu cSubject, a ovo ostalo cSubject_legacy, cSubject_v2.3, cSubject_old, cSubject_rollback

Ovo 1,2,3,77 ne govori što ta klasa (metoda, što je to već?) radi i kod postaje nečitak.

 

A nije mi baš jasno kod ovog primjera, što i zašto pretvarate u int? Jel imate nešto ovako

 

--id--id_subjekta--naziv--broj--id_grad--id_država--

--3--2--Ivana Gundulića--54a--31--12--

 

???

 

I sad ovi IDi su u varchar[50], a vi ih pretvarate u int?

 

Mislim ako sam ja dobro shvatio, vi radite alter table, s time da pišete paralelne klase tako da aplikacija koja stoji nad DB (WH) može raditi i sa starom verzijom i sa trenutnom i sad odjednom imate špageti kod u kojem se ni vi sami ne snalazite? 

You can patch technical vulnerabilities as they evolve, but there is no patch for stupidity, or rather gullibility. - Kevin Mitnick
17 godina
odjavljen
offline
Re: Verzioniranje klasa
Bukva kaže...

cSubject1, cSubject2... Bojim se pitati što zapravo piše u UMLu...

 

Pa što ne bi bilo lakše držati onu aktualnu cSubject, a ovo ostalo cSubject_legacy, cSubject_v2.3, cSubject_old, cSubject_rollback

Ovo 1,2,3,77 ne govori što ta klasa (metoda, što je to već?) radi i kod postaje nečitak.

 

A nije mi baš jasno kod ovog primjera, što i zašto pretvarate u int? Jel imate nešto ovako

 

--id--id_subjekta--naziv--broj--id_grad--id_država--

--3--2--Ivana Gundulića--54a--31--12--

 

???

 

I sad ovi IDi su u varchar[50], a vi ih pretvarate u int?

 

Mislim ako sam ja dobro shvatio, vi radite alter table, s time da pišete paralelne klase tako da aplikacija koja stoji nad DB (WH) može raditi i sa starom verzijom i sa trenutnom i sad odjednom imate špageti kod u kojem se ni vi sami ne snalazite? 

 

Vidi, situacija je sada super - točno se zna gdje je što i što treba raditi. Nismo još ušli u ovaj idiotski "pothvat".

Što se tiče ulica (stavio sam taj primjer bezveze): dakle, postoji textbox u koji se unosi naziv ulice (u kojoj živi stranka). E sad, u određenom trenutku naši klijenti od nas traže da imaju lookup sa popisom svih ulica u sustavu kako se iste ne bi morale unositi nego samo odabrati iz tog lookupa. To za nas znači da polje ulica mijenja svoj tip podatka iz string u int (jer će se samo vezati za id iz novog šifrarnika). Takve promjene nam nisu problem, to hendlamo bez problema. Ali gazda bi sada htio da u tom trenu sve poduplamo. I dakle, kad netko otvara stranku unešenu sa starijom verzijom programa da se otvara stara verzija forme (uz stari business objekt) a kad netko otvara stranku unešenu novom verzijom da se otvara nova forma i da su podaci učitani u novu verziju objekta (sa novom strukturom, jel).

Nadam se da je sada srž problem jasnija.

Taj problem još više dolazi do izražaja zbog činjenice da će danas-sutra biti n naših klijenata koji će svaki imati svoje verzije istih objekata.

 

Freak Show Inc.
17 godina
protjeran
offline
Verzioniranje klasa

Uf neće biti dobro, mislim da je primjer s ulicom najbanalniji. Što će se dogoditi ako se doda u tablicu neko novo polje, tj. napravi se nova tablica za novu verziju. E sad jedan korisnik unosi bitne podatke u jednu tablicu, a drugi u drugu s drugom aplikacijom. A informacije moraju biti dostupne i jednoj i drugoj aplikaciji. E sad da bi to radilo tj. ostalo sinhronizirano napatiti ćete se s triggerima i taskovima za sinhronizaciju. Nakon par verzija nečete znati što je što.

Recimo da imate 10 aplikacija. I netko s prvom verzijom nešto promjeni, to znaći da se ostalih 9 mora sinhronizirati s prvom verzijom tablice/app. Triggeri na prvoj tablici, popune drugu, triggeri na drugoj popune treću, a i suprotnom smjeru. ili ako netko mjenja 4 verziju, mora se sinhronizirati s višim i nižim verzijama tablice. Uf.

Ili aplikacija verzije 10 ima assemblije od 1-10. i poziva specifične funkcije za svaku verziju, al verzija 6 nije svjesna viših verzija.

Još jedan uf. Pretpostavljam da koristite SQL Server, možda vam pomogne njegova opcija (nisam siguran kako se to zove) stavljanje asemblija u bazu i pozivanje njihovih funkcija iz klijenta. Možda bi tako u svakom trenutku sve verzije bile svjesne ostalih verzija aplikacija. Mislim da i Oracle ima nešto slično za Javu.

 

 

 

 

Programko http://programko.bloger.hr
 
0 0 hvala 0
17 godina
odjavljen
offline
Re: Verzioniranje klasa
Programko kaže...

Uf neće biti dobro, mislim da je primjer s ulicom najbanalniji. Što će se dogoditi ako se doda u tablicu neko novo polje, tj. napravi se nova tablica za novu verziju. E sad jedan korisnik unosi bitne podatke u jednu tablicu, a drugi u drugu s drugom aplikacijom. A informacije moraju biti dostupne i jednoj i drugoj aplikaciji. E sad da bi to radilo tj. ostalo sinhronizirano napatiti ćete se s triggerima i taskovima za sinhronizaciju. Nakon par verzija nečete znati što je što.

Recimo da imate 10 aplikacija. I netko s prvom verzijom nešto promjeni, to znaći da se ostalih 9 mora sinhronizirati s prvom verzijom tablice/app. Triggeri na prvoj tablici, popune drugu, triggeri na drugoj popune treću, a i suprotnom smjeru. ili ako netko mjenja 4 verziju, mora se sinhronizirati s višim i nižim verzijama tablice. Uf.

Ili aplikacija verzije 10 ima assemblije od 1-10. i poziva specifične funkcije za svaku verziju, al verzija 6 nije svjesna viših verzija.

Još jedan uf. Pretpostavljam da koristite SQL Server, možda vam pomogne njegova opcija (nisam siguran kako se to zove) stavljanje asemblija u bazu i pozivanje njihovih funkcija iz klijenta. Možda bi tako u svakom trenutku sve verzije bile svjesne ostalih verzija aplikacija. Mislim da i Oracle ima nešto slično za Javu.

 

 

 

 

 

Ali uglavnom se slažeš da je ideja loša, ne? Htio sam samo staviti naglasak na to da je razmišljanje o tome potpuno nepotrebno iz jednostavnog razloga što će izmjene biti takve da je kompatibilnost unazad zagarantirana.

Freak Show Inc.
16 godina
offline
Re: Verzioniranje klasa

Iz ovoga što si reko - baza nije normalizirana. Što vi više prtljate po njoj (a da to nije normalizacija), to je veća vjerojatnost da će se pojaviti anomalije. Ak se one pojave, ode sve u...

You can patch technical vulnerabilities as they evolve, but there is no patch for stupidity, or rather gullibility. - Kevin Mitnick
16 godina
offline
Re: Verzioniranje klasa
Programko kaže...

 

Recimo da imate 10 aplikacija. I netko s prvom verzijom nešto promjeni, to znaći da se ostalih 9 mora sinhronizirati s prvom verzijom tablice/app. Triggeri na prvoj tablici, popune drugu, triggeri na drugoj popune treću, a i suprotnom smjeru. ili ako netko mjenja 4 verziju, mora se sinhronizirati s višim i nižim verzijama tablice. Uf.

Ovo se zapravo može elegantno rješiti lokotima

 

EDIT: Zapravo, kad malo bolje razmislim, ako je duplicirana cijela baza i s lokotima će biti hebada... (jednostavno se neće znati tko što gdje i kada treba zaključavati)

You can patch technical vulnerabilities as they evolve, but there is no patch for stupidity, or rather gullibility. - Kevin Mitnick
Poruka je uređivana zadnji put čet 28.7.2011 22:42 (Bukva).
17 godina
odjavljen
offline
Re: Verzioniranje klasa
Bukva kaže...

Iz ovoga što si reko - baza nije normalizirana. Što vi više prtljate po njoj (a da to nije normalizacija), to je veća vjerojatnost da će se pojaviti anomalije. Ak se one pojave, ode sve u...

 

Neke stvari nismo smjeli normalizirati zbog izričitih zahtjeva klijenata. Dakle, ako oni žele unijeti npr ulicu "Žrtava fašizma" kao "Ul. Žrt. Fašizma", "Ulica žrtava fašizma", "U. Ž. Fašizma", "Ulica Ž. Fašizma" i sve druge kombinacije, morali smo se složiti. Idiotarija, ali kad pričaš s ljudima koji i dan-danas rade na crno-bijelim terminalima onda znaš da nema puno smisla pričati im o normalizaciji.

Freak Show Inc.
16 godina
offline
Re: Verzioniranje klasa

Dobro, ali onda nejdeš vraga izazivati kojekakvih hackovima po bazi...

 

Nisam nikada ni približno radio sa toliko velikom bazom i na takvom projektu, a još manje sam vidio što ste vi napisali, jel... Ali iz mog kratkoga i čupavoga života bih ti toplo preporučio da se više vrijedi probati sa šefom dogovoriti nego moliti boga da sve spektakularno ne ode sv. Petru... A onda će biti i šef i klijent za vratom...

You can patch technical vulnerabilities as they evolve, but there is no patch for stupidity, or rather gullibility. - Kevin Mitnick
17 godina
odjavljen
offline
Re: Verzioniranje klasa
Bukva kaže...

Dobro, ali onda nejdeš vraga izazivati kojekakvih hackovima po bazi...

 

Nisam nikada ni približno radio sa toliko velikom bazom i na takvom projektu, a još manje sam vidio što ste vi napisali, jel... Ali iz mog kratkoga i čupavoga života bih ti toplo preporučio da se više vrijedi probati sa šefom dogovoriti nego moliti boga da sve spektakularno ne ode sv. Petru... A onda će biti i šef i klijent za vratom...

 

Ma nije to hack, takve stvari su mi kao "dobar dan". Ali postojanje n različitih verzija iste stvari (klase) i sve to u istom projektu... ne znam.

Freak Show Inc.
15 godina
neaktivan
offline
Verzioniranje klasa

Ček malo zašto ne nasljeđivate klase i nadjačavate funkcijske parametre ? 

Meni ovaj vaš program više djeluje da je modularno nego klasno napravljen ?

Ako je napravljen modularno onda imate veliki problem , ako je napravljen klasno onda ne vidim u čem je problem ? 

 

"I've seen things you people wouldnt believe. Attack ships on fire off the shoulder of Orion. I watched C-beams glitter in the dark near the Tannhauser Gate"
 
0 0 hvala 0
17 godina
protjeran
offline
Verzioniranje klasa
Sve staviti u web aplikaciju, tako da svi imaju istu zadnju verziju aplikacije, ili nekakav mehanizam za autoupdate tako da opet svi imaju zadnju verziju. I napraviti alat koji će migrirati podatke iz verzije u verziju strukture baze.
I puno unit testinga između verzija :-). Sretno
Programko http://programko.bloger.hr
 
0 0 hvala 0
17 godina
offline
Re: Verzioniranje klasa
Programko kaže...
Sve staviti u web aplikaciju, tako da svi imaju istu zadnju verziju aplikacije, ili nekakav mehanizam za autoupdate tako da opet svi imaju zadnju verziju. I napraviti alat koji će migrirati podatke iz verzije u verziju strukture baze.
I puno unit testinga između verzija :-). Sretno

Za takve stvari web aplikacije i nisu bas sretno rijesenje (eventualno nekakav silverlight)

Ovaj forumaš je tolerantan prema osobama svih nacionalnosti, rasa i spolnog opredjeljenja te smatra da svaka osoba ima pravo biti slobodna od ugnjetavanja zbog svojih liberalnih mišljenja
17 godina
protjeran
offline
Re: Verzioniranje klasa
tnakir kaže...
Programko kaže...
Sve staviti u web aplikaciju, tako da svi imaju istu zadnju verziju aplikacije, ili nekakav mehanizam za autoupdate tako da opet svi imaju zadnju verziju. I napraviti alat koji će migrirati podatke iz verzije u verziju strukture baze.
I puno unit testinga između verzija :-). Sretno

Za takve stvari web aplikacije i nisu bas sretno rijesenje (eventualno nekakav silverlight)

 Ne znam o kakvoj je aplikaciji rijeć pa ne mogu komentirati. Al znam da svaki put kad otiđem, jednostavno imam potrebu da bacim oko u čemu rade. I od osobnog bankara do tete za pultom redovito koriste web aplikacije.

Programko http://programko.bloger.hr
17 godina
offline
Re: Verzioniranje klasa
Programko kaže...
tnakir kaže...
Programko kaže...
Sve staviti u web aplikaciju, tako da svi imaju istu zadnju verziju aplikacije, ili nekakav mehanizam za autoupdate tako da opet svi imaju zadnju verziju. I napraviti alat koji će migrirati podatke iz verzije u verziju strukture baze.
I puno unit testinga između verzija :-). Sretno

Za takve stvari web aplikacije i nisu bas sretno rijesenje (eventualno nekakav silverlight)

 Ne znam o kakvoj je aplikaciji rijeć pa ne mogu komentirati. Al znam da svaki put kad otiđem, jednostavno imam potrebu da bacim oko u čemu rade. I od osobnog bankara do tete za pultom redovito koriste web aplikacije.

Koliko sam ja skuzio kompletan sustav za bankarenje.

Ovaj forumaš je tolerantan prema osobama svih nacionalnosti, rasa i spolnog opredjeljenja te smatra da svaka osoba ima pravo biti slobodna od ugnjetavanja zbog svojih liberalnih mišljenja
17 godina
protjeran
offline
Verzioniranje klasa
Nisam mislio na vrstu aplikacije po vertikali. Nego na FrontEnd aplikacije. DAli se radi o labelama buttonima, textboxsovima dropDownListama ili nabrijanim 3d dinamičkim grafovima.
Programko http://programko.bloger.hr
 
0 0 hvala 0
17 godina
offline
Re: Verzioniranje klasa
Programko kaže...
Nisam mislio na vrstu aplikacije po vertikali. Nego na FrontEnd aplikacije. DAli se radi o labelama buttonima, textboxsovima dropDownListama ili nabrijanim 3d dinamičkim grafovima.

Lol vidis da je gore spominjao monokromatske terminale :) Sto mislis?

Ovaj forumaš je tolerantan prema osobama svih nacionalnosti, rasa i spolnog opredjeljenja te smatra da svaka osoba ima pravo biti slobodna od ugnjetavanja zbog svojih liberalnih mišljenja
17 godina
protjeran
offline
Re: Verzioniranje klasa
tnakir kaže...
Programko kaže...
Nisam mislio na vrstu aplikacije po vertikali. Nego na FrontEnd aplikacije. DAli se radi o labelama buttonima, textboxsovima dropDownListama ili nabrijanim 3d dinamičkim grafovima.

Lol vidis da je gore spominjao monokromatske terminale :) Sto mislis?

 Lol, monokromatski terminal u Silverlightu :-). San svake Štefice.

Programko http://programko.bloger.hr
17 godina
offline
Re: Verzioniranje klasa
Programko kaže...
Nisam mislio na vrstu aplikacije po vertikali. Nego na FrontEnd aplikacije. DAli se radi o labelama buttonima, textboxsovima dropDownListama ili nabrijanim 3d dinamičkim grafovima.

Pa dobro nemaju sve tete web aplikacije, neke se još uvijek služe sa TUI-ima. Iako koliko sam vidio se teži tome, jer web aplikacije se lakše održavaju od windows (.NET, C++) distribuiranih aplikacija, a i manji su troškovi održavanja (logika)...

 

'Genius might be the ability to say a profound thing in a simple way' Charles Bukowski
17 godina
odjavljen
offline
Verzioniranje klasa

Sorry, dečki, bio sam na sastanku sa klijentima...

 

Dakle, nije kompletan sustav za bankarenje - radi se o jednom dijelu (dosta opširnom). Nadalje, naša aplikacija nije crno-bijeli terminal nego klasična win forms aplikacija. Naši klijenti su uglavnom naviknuti na spomenute terminale, zato sam to napisao.

Nisam siguran kako bismo sa naslijeđivanjem mogli riješiti spomenuti problem. Jer srž problema je da se postojeća klasa mijenja a treba nam nova klasa koja se isto zove a ima različit set funkcionalnosti i property-ja. I tako za svaku pojedinu promjenu (istog entiteta) - nove tablice u bazi, nove klase, nove forme, novi reporti... I onda kad klijent zatraži određeni zapis iz baze mi trebamo znati što moramo instancirati ovisno o nekakvoj oznaci verzije zapisa. A kao što sam spomenuo - klase su nam vrlo velike, set business pravila je poprilično opširan, ima puno računanja i vrlo malo tolerancije za grešku.

 

EDIT: da, imamo i nabrijane grafove!

Freak Show Inc.
Poruka je uređivana zadnji put pet 29.7.2011 17:56 (Friday).
 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Verzioniranje klasa
Friday kaže...

Sorry, dečki, bio sam na sastanku sa klijentima...

 

Dakle, nije kompletan sustav za bankarenje - radi se o jednom dijelu (dosta opširnom). Nadalje, naša aplikacija nije crno-bijeli terminal nego klasična win forms aplikacija. Naši klijenti su uglavnom naviknuti na spomenute terminale, zato sam to napisao.

Nisam siguran kako bismo sa naslijeđivanjem mogli riješiti spomenuti problem. Jer srž problema je da se postojeća klasa mijenja a treba nam nova klasa koja se isto zove a ima različit set funkcionalnosti i property-ja. I tako za svaku pojedinu promjenu (istog entiteta) - nove tablice u bazi, nove klase, nove forme, novi reporti... I onda kad klijent zatraži određeni zapis iz baze mi trebamo znati što moramo instancirati ovisno o nekakvoj oznaci verzije zapisa. A kao što sam spomenuo - klase su nam vrlo velike, set business pravila je poprilično opširan, ima puno računanja i vrlo malo tolerancije za grešku.

 

EDIT: da, imamo i nabrijane grafove!

 

Onda od korijena ne štima nešto, jer ako ste nadograđivali aplikaciju, normalno bi bilo da ste iz klasa izvlačili druge klase, ali nasljeđivanjem , ne new class pa copy/paste  te  izmejna tj. dodavanje funkcionalnosti "novoj" klasi , ovo kažem jer sam u životu doživio dva slična slučaja tzv. totaly mess up u kodu.

A tada ovo sa izvlačenjem podataka iz različite baze je tada trivijalno , ako se kažem od početka sve dobro organizira, jer pretpostavljam da koristite "metode" za određene događaje ispod kontrola koje pozivate kroz instancirani objekt , tada ako je taj objekt instanciran iz nasljeđenih korjena samo mogli ste ovisno o ulaznom parametru mjenjat događaj tj. akciju nad bazom.

 

Sve u svem sretno {#}

 

 

"I've seen things you people wouldnt believe. Attack ships on fire off the shoulder of Orion. I watched C-beams glitter in the dark near the Tannhauser Gate"
17 godina
odjavljen
offline
Re: Verzioniranje klasa
woodgamesfx kaže...
Friday kaže...

Sorry, dečki, bio sam na sastanku sa klijentima...

 

Dakle, nije kompletan sustav za bankarenje - radi se o jednom dijelu (dosta opširnom). Nadalje, naša aplikacija nije crno-bijeli terminal nego klasična win forms aplikacija. Naši klijenti su uglavnom naviknuti na spomenute terminale, zato sam to napisao.

Nisam siguran kako bismo sa naslijeđivanjem mogli riješiti spomenuti problem. Jer srž problema je da se postojeća klasa mijenja a treba nam nova klasa koja se isto zove a ima različit set funkcionalnosti i property-ja. I tako za svaku pojedinu promjenu (istog entiteta) - nove tablice u bazi, nove klase, nove forme, novi reporti... I onda kad klijent zatraži određeni zapis iz baze mi trebamo znati što moramo instancirati ovisno o nekakvoj oznaci verzije zapisa. A kao što sam spomenuo - klase su nam vrlo velike, set business pravila je poprilično opširan, ima puno računanja i vrlo malo tolerancije za grešku.

 

EDIT: da, imamo i nabrijane grafove!

 

Onda od korijena ne štima nešto, jer ako ste nadograđivali aplikaciju, normalno bi bilo da ste iz klasa izvlačili druge klase, ali nasljeđivanjem , ne new class pa copy/paste  te  izmejna tj. dodavanje funkcionalnosti "novoj" klasi , ovo kažem jer sam u životu doživio dva slična slučaja tzv. totaly mess up u kodu.

A tada ovo sa izvlačenjem podataka iz različite baze je tada trivijalno , ako se kažem od početka sve dobro organizira, jer pretpostavljam da koristite "metode" za određene događaje ispod kontrola koje pozivate kroz instancirani objekt , tada ako je taj objekt instanciran iz nasljeđenih korjena samo mogli ste ovisno o ulaznom parametru mjenjat događaj tj. akciju nad bazom.

 

Sve u svem sretno {#}

 

 

 

Nisi me shvatio. Ne radimo copy/paste sada i nemamo više različitih (aktivnih) verzija iste klase. Stvar je u tome što gazda INZISTIRA da to počnemo raditi. Dakle, ako imamo klasu cDokument i klijent zatraži da se u toj klasi nešto promijeni (ili na formi) mi bismo trebali napraviti novu verziju klase cDokument koja će se ISTO (!!!) zvati i koja će instancirati svoju formu radi prikaza tih podataka a koja će koegzistirati sa već postojećom klasom cDokument i sa postojećom formom koja te podatke trenutno prikazuje.

Čini mi se da nisam dobro objasnio problem.

Kako bi ti riješio problem sa promjenom tipa određenog property-ja na klasi (koja je BASE klasa nekim drugim klasama)? Dakle, imaš nekakav public property tipa int i trebaš ga promjeniti u string. A da se nova klasa ISTO zove, da se snima u svoju tablicu (što samo po sebi nije problem jer klasa ima svoje metode za snimanje i brigu o business pravilima) i da onda nakon 10 različitih izmjena možeš sve te podatke koji su "istog" tipa prikazati zajednički u nekakvom gridu i da nakon ohoho vremena možeš to bez problema trpati u isti cube pazeći pri tom na slowly changing dimenzije. I onda to tako sa još hrpetinom još puno kompliciranijih slučajeva? Inheritance brine o takvim stvarima ali ja stvarno ne znam kakav bih inheritance napravio da imam dvije različite klase sa potencijalno drastičnim razlikama u strukturi koje će biti istog tipa. Znači, imam klasu cDokument koja ima 2 int property-ja i 2 string property-ja. I onda imam jednu drugu klasu cDokument koja ima 6 int property-ja, 4 string property-ja i jedan byte[] property. I onda nekada trebam provjeriti nekakav objekt na ovakav način - If(obj is cDokument)... Pa kompajler će me stjerati znaš gdje, ne?

Freak Show Inc.
15 godina
neaktivan
offline
Re: Verzioniranje klasa
Friday kaže...
 

Nisi me shvatio. Ne radimo copy/paste sada i nemamo više različitih (aktivnih) verzija iste klase. Stvar je u tome što gazda INZISTIRA da to počnemo raditi. Dakle, ako imamo klasu cDokument i klijent zatraži da se u toj klasi nešto promijeni (ili na formi) mi bismo trebali napraviti novu verziju klase cDokument koja će se ISTO (!!!) zvati i koja će instancirati svoju formu radi prikaza tih podataka a koja će koegzistirati sa već postojećom klasom cDokument i sa postojećom formom koja te podatke trenutno prikazuje.

Čini mi se da nisam dobro objasnio problem.

Kako bi ti riješio problem sa promjenom tipa određenog property-ja na klasi (koja je BASE klasa nekim drugim klasama)? Dakle, imaš nekakav public property tipa int i trebaš ga promjeniti u string. A da se nova klasa ISTO zove, da se snima u svoju tablicu (što samo po sebi nije problem jer klasa ima svoje metode za snimanje i brigu o business pravilima) i da onda nakon 10 različitih izmjena možeš sve te podatke koji su "istog" tipa prikazati zajednički u nekakvom gridu i da nakon ohoho vremena možeš to bez problema trpati u isti cube pazeći pri tom na slowly changing dimenzije. I onda to tako sa još hrpetinom još puno kompliciranijih slučajeva? Inheritance brine o takvim stvarima ali ja stvarno ne znam kakav bih inheritance napravio da imam dvije različite klase sa potencijalno drastičnim razlikama u strukturi koje će biti istog tipa. Znači, imam klasu cDokument koja ima 2 int property-ja i 2 string property-ja. I onda imam jednu drugu klasu cDokument koja ima 6 int property-ja, 4 string property-ja i jedan byte[] property. I onda nekada trebam provjeriti nekakav objekt na ovakav način - If(obj is cDokument)... Pa kompajler će me stjerati znaš gdje, ne?

 

Dajte otkaz gazdi.

 

Znaći ako sam dobro shvatio imate klasu cDokument koji ima 6 int property-a, dal pod propertyima podrazumjevate neki generički javni tip tipa int isl. kojem pristupate javno ?

Mislim zašto kroz get i set operatore tj. metodom ne pridružujete int tipu vrjednost, tj. kroz metodu jer u C# metode se mogu nadjačavat a kroz get set je dalje sve manje više trivijalno , problem je ako direktno pristupate generičkom tipu kroz public, a još veći je problem ako se on provlači par koraka unazad kroz nasljeđivanje, ako je tako što si rekao.

 

 

 

"I've seen things you people wouldnt believe. Attack ships on fire off the shoulder of Orion. I watched C-beams glitter in the dark near the Tannhauser Gate"
17 godina
neaktivan
offline
Verzioniranje klasa

a cemu mu sluze podaci ti zajednicki podaci ? sta ce on da dobije iz toga :S ... ne vidim smisao zajednickog koegzistiranja nove klase i stare.. ako se desi npr 10 promena, to je 10 novih formi, zakomplikovat ce se sam layout programa, da ne pricam dalje... pogotovo ako klijent trazi promenu, logicno je da nece vise da koristi staru verziju, jer mu ocigledno ne odgovara... kao post iznad, OTKAZ GAZDI :)... Jedino sto meni pada na pamet, jeste da se koristi nekakvo genericno resenje, odnosno da funkcionalnost formi bude genericka...da ona zna raditi sa bilo kojom klasom, odnosno tabelom u bazi... jedino je problem neku vecu funkcionalnost koja se trazi da bude genericna..

Moj PC  
0 0 hvala 0
16 godina
offline
Re: Verzioniranje klasa
Mozda changelog svake klase? Kad se zatrazi prosla V generiras takvu verziju i sve povezane entitete i gotova manistra. Nema opravdanog razloga da razlicite V podataka sjede u bazi ako se do njih moze doci transformiranjem zadje V...
DUMP Udruga mladih programera
17 godina
odjavljen
offline
Re: Verzioniranje klasa
Fearless kaže...
Mozda changelog svake klase? Kad se zatrazi prosla V generiras takvu verziju i sve povezane entitete i gotova manistra. Nema opravdanog razloga da razlicite V podataka sjede u bazi ako se do njih moze doci transformiranjem zadje V...

 

Da, naravno ali gazda inzistira da ti podaci budu netaksnuti i da se učitavaju na IDENTIČAN način kako su se učitavali sa verzijom sa kojom su unešeni! Ma boleština...

Freak Show Inc.
16 godina
offline
Verzioniranje klasa

Ko je "gazda"? Klijent ili leader?

DUMP Udruga mladih programera
Moj PC  
0 0 hvala 0
17 godina
odjavljen
offline
Re: Verzioniranje klasa
Fearless kaže...

Ko je "gazda"? Klijent ili leader?

 

Vlasnik firme u kojoj radim!

Freak Show Inc.
16 godina
offline
Verzioniranje klasa

1. O kojoj je firmi riječ?

2. Šta vlasnik ima govorit kako će nešto biti napravljeno, on nije developer, on je vlasnik?

DUMP Udruga mladih programera
Moj PC  
0 0 hvala 0
17 godina
offline
Re: Verzioniranje klasa
Fearless kaže...

1. O kojoj je firmi riječ?

2. Šta vlasnik ima govorit kako će nešto biti napravljeno, on nije developer, on je vlasnik?

On daje placu. Njegova je zadnja.

Ovaj forumaš je tolerantan prema osobama svih nacionalnosti, rasa i spolnog opredjeljenja te smatra da svaka osoba ima pravo biti slobodna od ugnjetavanja zbog svojih liberalnih mišljenja
Nova poruka
E-mail:
Lozinka:
 
vrh stranice