четвртак, 31. децембар 2015.

MBS: Ništa bez zastava, Flags

Tačno je da su zastave itekako potrebne u skoro svakom sistemu, međutim možete se pitati zašto da imate window ili posebnu tabelu za zastave u bazi podataka, kad zastavu možete dodati kao sliku tamo gde je potrebna? Poenta je da zastave imate smeštene na jednom mestu, dok u drugim tabelama umesto zastave prosleđujete samo broj; ID zastave. Tako vaše tabele zauzimaju manje memorije i kompjuter radi brže sa njima. Kad u bazi podataka tabele imaju manje podataka, postavlja se pitanje koliko je to relevantno, s obzirom da pored tabele koja ima ID slike, morate povlačiti i tabelu sa zastavama? Vaš sistem definitivno treba da ima ogromne količine podataka i zato je relevantno da dobro razmislite kako će vaši podaci biti smešteni u bazi podataka.


( Window Flags, MBS sistema, bez vidljivog kursora na slici )


MBS će koristiti zastave na primer za označavanje stranih jezika, država ali i kursa stranih valuta. Ali MBS takođe mora da vodi računa i o design-u i estetici, kako bi njegovo višesatno korišćenje bilo što prijatnije. Unos mnogobrojnih informacija nije ni malo lak posao. Teško da će te uneti sve zastave za samo jedan dan i kad isprogramirate projekat Flags. Slike zastava i njihove nazive na engleskom i nemačkom jeziku će te najbolje preuzeti sa Wikipedia-ije. Ono što se najviše zamera programerima je upravo design sistema ili programa. Možda bi ste pomislili da je najvažnija stvar šta i kako vaš program radi, ali u većini slučajeva klijent će odustati i da razmotri da kupi vaš program ako mu je estetski odbojan ili deluje staro. Većina lekara i ljudi koji rade u pravosuđu nemaju taj izbor i mnogo se žale na software sa kojim rade iako im sistem radi i ne pravi greške. MBS jeste nešto što vi programirate sami sebi i za neke stvari možete pomisliti da nisu bitne, ali bolje je da odmah stičete odlične navike. Sve što uradite dobro i što može da poboljša vaš sistem od starta, to je najbolje da odmah i primenite.

Šta sve sadrži window Flags i kako da ga kreiramo?


Prvo window Flags pravite kao poseban projekat u istom folderu vašeg sistema. Ne dodajete ga kao window već postojećem projektu. MBS je sastavljen od više projekata u jednom rešenju. Koristi samo jednu bazu podataka, ali zato za svaki projekat koji sadrži informacije iz baze podataka, koristi se poseban model jer se projekti povezuju sa bazom podataka preko ADO.net Entity Data Model-a. Vi takođe morate uvesti projekat Picture Editor kao Existing Item… u vaš projekat Flags i dodati mu referencu, kako bi ste mogli koristiti Picture Editor za ubacivanje slika zastava na window Flags koji skladišti iste u bazi podataka.



( Window Flags koristi window Picture Editor za unos slika zastava )

Flags window sadrži, ListBox koji sadrži šablon za Image i TextBlock kontrolu, Button koji sadrži Image koji ima dimenzije slike zastave 260x168 piksela, 3 TextBox kontrole u koje treba da unesete kraći oblik naziva država na 3 jezika. Engleski kao glavni jezik, koji će uvek biti vidljiv na svim window-ima, zatim nemački jezik i srpski jezik koji će se videti u ToolTip meniju koje sa ne nalazi u Tools alatima ali postoji kao elemenat u XAML jeziku. Vi možete dodati i birati koje god hoćete jezike za vaš projekat, meni su engleski i nemački jezik najbitniji dok srpski jezik mora tu da postoji jer je bitno da za svaki pojam imate tačno jasan prevod istog. Pisati države i tolike informacije na engleskom i na nemačkom je dodatan posao ali vredi više nego što mislite. Vremenom se lako zaboravlja kako se pravilno nešto piše na stranim jezicima, posebno na nemačkom jeziku. Programiranje i korišćenje MBS znači da vi učite i strane jezike istovremeno što je odlična praksa.

Što se tiče dugmadi, imate samo 4 Button-a, OK, New, Save i Delete. Dugme OK služi da prosledi samo ID zastave ali ne i sliku zastave window-u koji pozove window Flags. Na taj način koja god tabela u bazi podataka treba zastavu, sadržavaće samo broj ID zastave. Kad drugi window ima ID zastave, on će zastavu pronaći u tabeli zastava ali i sve druge podatke o zastavi. New dugme služi da ga pritisnete ako hoćete da unesete novu zastavu ali dugme Save mora da ima dve funkcionalnosti umesto jedne. U događaju Click dugmeta Save pored metode za snimanje podataka u bazu podataka treba da imate i metodu za update podataka, kad hoćete da snimite samo promene. Te dve stvari nisu iste, ali vi korisniku predstavljate kao da jesu. MBS pretpostavlja da korisnik vrši update podataka sa dugmetom Save ako korisnik nije prethodno pritisnuo dugme New i poziva metodu update, inače poziva metodu za snimanje podataka. Dugme Delete služi da izbrišete sve podatke o zastavi iz baze podataka.

Što se tiče stilova na window-u, kopirajte datoteku stila iz Picture Editor projekta i u projekat Flags, i u njemu dodajte vaš stil za ListBox kontrolu i stil za Item ListBox kontrole. Imajte u vidu da treba da napišete i stil za ScrollBar i još 5 stilova koji se odnose samo na ScrollBar, inače vaš Scrollbar u ListBox-u će biti bele boje kao što je standardni. Vaša ListBox kontrola mora da sadrži i DataTemplate – šablon za Image i TextBlock kontrolu koja nosi ToolTip meni sa 2 Image kontrole i 2 TextBlock kontrole. Šablon za zastave ne kodirate u fajlu za stilove nego u bloku Window.Resources. Zastave koje vidite kao statične na window-u i Tooltip meniju nisu zastave iz baze podatka, već u direktorijumu Image projekta Flags. Imate direktorijum Images, gde pored slike koja predstavlja ikonu vašeg sistema, trebate da snimite i 3 zastave jezika koje sistem obuhvata i da zastave pozivate zajedno sa vašim window-om preko elementa Source. Nemojte ni slučajno da zaobiđete bazu podataka i da sve zastave držite u direktorijumu. To nije ni opcija. Kad ste odradili design vašeg window-a, tek onda idete dalje.

Šta mi još treba pre programiranja?

Prva stvar koju pravite posle design-a vašeg window-a je baza podataka. S obzirom da je prvi window za sistem, Picture Editor; on nije povezan za bazu podataka, tek je sad pravite. Pored vašeg projekta napravite direktorijum Base i u njemu kreirajte jednu bazu podataka za celi vaš sistem. Bazu podataka kreirajte u MSSQL - Mikrosoft SQL Server ili MSSQL Express - Microsoft SQL Ekspres  bazi podataka. Vi možete da kreirate i lokalnu bazu podataka za vaš sistem ili Microsoft Access bazu podataka ali nemojte to da radite. Vaš sistem je ozbiljna stvar i zahteva ozbiljan rad sa podacima podataka. Zato mora da ima minimum MSQL Express bazu podataka. MySQL ne dolazi u obzir. Da pravite web sajt rekao bi vam koristite, ali ovako ni slučajno. Kad ste kreirali bazu podataka, kreirajte vašu prvu tabelu FlagsTable. Ona treba da izgleda kao na slici:

( Prva tabela, FlagsTable, MBS sistema )

Praksa je da se tabele uvek nazivaju u množini, dok se polja nazivaju u jednini. Takođe nije dobro da ID zastave zovete samo ID jer bi ste tada imali previše ID u svim tabelama. Međutim i ako nije praksa, ja vam savetujem da za svaku tabelu napišete u nazivu da je to tabela, FlagsTable. Jer ako imate window koji se zove Flags ili namespace u projektu koji se zove Flags, definitivno vam ne treba i tabela Flags koja će samo napraviti konflikt u vašem projektu prilikom pristupa modelu. Kad pravite model, zovite ga FlagsModel i naviknite se da imenujete stvari u projektu da se kroz njihov naziv vidi šta oni predstavljaju, poštedećete sami sebe mnogih komplikacija u budućnosti. Obratite pažnju da ID_Flag nosi primarni ključ kojem je Indetinty Increment podešen na 1 po defaultu i da je kolona tipa smallint. Jer u sistemu pretpostavljamo da nećemo imati ni 1000 zastava i za ID zastave koristimo tip short koji je identičan tipu smallint u bazi podataka. Kad ste kreirali bazu podataka, sa navedenom tabelom onda kreirate model FlagsModel koji obuhvata celu tabelu.

Šta se prvo kodira?

Kad programirate projekat, uvek prvo programirate klase koje će koristiti vaš projekat. Prva klasa u MBS-u je FlagsDAL klasa. DAL je skraćenica za Data Access Layer i to je klasa u kojoj će te kreirati sve metode koje služe da snimite, promenite i obrišete podatke iz baze podataka i metodu koja će da sadrži listu svih zastava sortiranu po abecednom redu koju će da koristi ListBox. Takođe, morate imati jednu metodu koja pronalazi duplikate u bazi podataka. Ona treba da ima uticaj samo na engleske nazive zastava.

Druga klasa koju će te najčešće koristiti u skoro svim projektima, treba da bude statička klasa. Nazovite je ImageConverter.cs i u ovoj klasi napišite kod za samo dve statičke metode. Jedna koja će pretvarati sliku u niz bitova i drugu metodu koja će niz bitova pretvarati u sliku. I tek na kraju programirate svojstva i metode koje obezbeđuju pravilan rad vašeg projekta. Svaki projekat koji bude koristio podatke iz baze podataka će imati isti način i pristup kodiranja. 

Srećno sa programiranjem!
 

( Svojstva, metode i događaji koje sadrži Flags.cs )