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