Iako na linku http://ola.hallengren.com/Documentation.html postoje vec gotove procedure za rekreiranje i reogranizovanje indeksa, video sam da rekreiranje bas i ne radi onako kako sam hteo.
Ista stvar se moze uraditi jednostavnije, mada sporije.
Prvo cemo proveriti fragmentaciju indeksa za videti sve tabele:
select OBJECT_NAME(object_id),index_type_desc,avg_fragmentation_in_percent,page_count
from sys.dm_db_index_physical_stats(DB_ID(N'Tabela'), NULL, NULL, NULL, NULL)
order by avg_fragmentation_in_percent desc
Zatim cemo izvrsiti upit koji radi reindeksiranje za sve tabele kojima je fragmentacja veca od 1% i koji moze da traje i nekoliko desetina minuta:
DECLARE @TableName VARCHAR(255)
DECLARE @cmd NVARCHAR(500)
DECLARE TableCursor CURSOR FOR
select OBJECT_NAME(object_id) AS TableName
from sys.dm_db_index_physical_stats(DB_ID(N'Tabela'), NULL, NULL, NULL, NULL)
where avg_fragmentation_in_percent > 1
order by avg_fragmentation_in_percent desc
OPEN TableCursor
FETCH NEXT FROM TableCursor INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @TableName
SET @cmd = 'ALTER INDEX ALL ON ' + @TableName + ' REBUILD WITH (FILLFACTOR = 1)'
EXEC (@cmd)
FETCH NEXT FROM TableCursor INTO @TableName
END
CLOSE TableCursor
DEALLOCATE TableCursor
Thursday, May 20, 2010
Wednesday, May 12, 2010
Rekurzija u SQL-u
WITH SvaOdeljenja (OdelenjeId, NadOdelenjeId)
AS
(
SELECT OdelenjeId, NadOdelenjeId FROM Odelenje
WHERE OdelenjeId = ISNULL(@OdeljenjeId, OdelenjeId)
UNION ALL
SELECT J.OdelenjeId, M.OdelenjeId FROM Odelenje J
INNER JOIN SvaOdeljenja AS M
ON J.NadOdelenjeId = M.OdelenjeId
)
SELECT OdelenjeId FROM SvaOdeljenja
GO
AS
(
SELECT OdelenjeId, NadOdelenjeId FROM Odelenje
WHERE OdelenjeId = ISNULL(@OdeljenjeId, OdelenjeId)
UNION ALL
SELECT J.OdelenjeId, M.OdelenjeId FROM Odelenje J
INNER JOIN SvaOdeljenja AS M
ON J.NadOdelenjeId = M.OdelenjeId
)
SELECT OdelenjeId FROM SvaOdeljenja
GO
Thursday, May 6, 2010
Ali ZAŠTO? (jeftina radna snaga)
Cilj svakog pojedinca i firme je da prodje što jefitnije. Takodje, cilj svakog pojedinca je da bude što skuplje plaćen za svoj posao, a firmi da što više profitira.
Ovde nema vage, niti ću ulaziti u polemiku koja su merila, ali ono sto je osnov je da NEMA relanog, ni u jednom ni u drugom smislu vrednosti, ali treba imati neke umu da nekad najjefitnije ipak može da ne valja uopšte i da vredi ništa, tj 0 (nula), čega god.
Uzimam za primer projekat koji je vredan 100.000 evra, a za koji je programer (koji je inače bio i student) mesečno plaćan 300, iste monete (naravno po srpski bez doprinosa, odmora, zdravstvenog i dr.).
Sledi .NET kod:
public void Delete(Porez porez)
{
using (SqlConnection connection = new SqlConnection(_connectionString))
using (SqlCommand command = new SqlCommand())
{
command.CommandText = "DELETE FROM PoreskaObaveza";
if (porez != null)
{
command.CommandText += " WHERE PoreskaObavezaId = @PoreskaObavezaId";
command.Parameters.Add(new SqlParameter("@PoreskaObavezaId", porez.Id));
}
connection.Open();
command.Connection = connection;
result = command.ExecuteNonQuery();
}
}
Da bude jasnije, u ovom slučaju ako se pozove metoda Delete(null) svi podaci iz tabele PoreskaObaveza ĆE BITI OBRISANI!!!
Biznismeni, da li i dalje želite da plaćate na sitno neiskusne programere za vaše skupe projekte koje predajete klijentima BEZ ikakve provere kvaliteta?!
Ovde nema vage, niti ću ulaziti u polemiku koja su merila, ali ono sto je osnov je da NEMA relanog, ni u jednom ni u drugom smislu vrednosti, ali treba imati neke umu da nekad najjefitnije ipak može da ne valja uopšte i da vredi ništa, tj 0 (nula), čega god.
Uzimam za primer projekat koji je vredan 100.000 evra, a za koji je programer (koji je inače bio i student) mesečno plaćan 300, iste monete (naravno po srpski bez doprinosa, odmora, zdravstvenog i dr.).
Sledi .NET kod:
public void Delete(Porez porez)
{
using (SqlConnection connection = new SqlConnection(_connectionString))
using (SqlCommand command = new SqlCommand())
{
command.CommandText = "DELETE FROM PoreskaObaveza";
if (porez != null)
{
command.CommandText += " WHERE PoreskaObavezaId = @PoreskaObavezaId";
command.Parameters.Add(new SqlParameter("@PoreskaObavezaId", porez.Id));
}
connection.Open();
command.Connection = connection;
result = command.ExecuteNonQuery();
}
}
Da bude jasnije, u ovom slučaju ako se pozove metoda Delete(null) svi podaci iz tabele PoreskaObaveza ĆE BITI OBRISANI!!!
Biznismeni, da li i dalje želite da plaćate na sitno neiskusne programere za vaše skupe projekte koje predajete klijentima BEZ ikakve provere kvaliteta?!
Wednesday, September 10, 2008
Baci slike na net? Picasa!
Za postavljanje slika na net za sada je Google-ovo resenje, koje se zove Picasa, po meni najbolje. Iako je resenje "matoro", ljudi koji rade na njemu doprinose njegovom poboljsanju dodavajuci stalno nove mogucnosti, a da se pritom jednostavnost celog servisa ne gubi.
Dovoljno je da imate Google nalog (gmail) i da odete na http://picasaweb.google.com. Vase slike ce se nalaziti na http://picasaweb.google.com/vasGoogleNalog.
Kada podizete vase slike (link Upload) bicete prvo upitani da otvorite novi album (ako ne posedujete nijedan) ili da izaberete neki od postojecih. Album moze biti public (javni, svako ga vidi i svako moze doci do njega pretrazivanjem Picase) i private (samo vas, "nevidljiv" je za sve ostale korisnike). Nakon odabira/kreiranja albuma ce vam se otvoriti stranica na kojoj mozete podici maksimalno 5 slika istovremeno. Posto postavljate samo najbolje i izabrane fotke, mislim da je prostor koji vam nudi Picasa od 1 GB sasvim dovoljno.
Za mene je najveca prednost Picase je sto imate sliku u originalnoj velicini koju kasnije moze svako preuzeti.
Sto se tice "dizanja" fotki, postoji i elegantnije resenje u vidu aplikacije koja se zove Picasa (foto browser) i koja vam omogucava da postavite slike u vas album direktno sa vaseg racunara jednim klikom. Ovim putem se fotke podizu brze i imate mogucnost automatskog menjanja velicine fotografije na neku pristojnu rezoluciju, recimo 1600x1200.
Ali, sad jedno prakticno pitanje. Sta ako zelim da moje slike vide samo odabrani ljudi?
Resenje je da se logujete i da otvorite vas album. Videcete da je adresa (URL) tipa http://picasaweb.google.com/vasGoogleNalog/MojAlbum?authkey=ABCDEFGH#
Ovaj link posaljite na email ljudima za koji zelite da vide vase fotke bez potrebe da se loguju na Google.
Kvaka je u ovom "authkey". Ako toga nema, Google ce prijaviti da stranica ne postoji. Po meni ovo resenje je zaista prakticno i jos jedan razlog vise za koriscenje Picase.
Dovoljno je da imate Google nalog (gmail) i da odete na http://picasaweb.google.com. Vase slike ce se nalaziti na http://picasaweb.google.com/vasGoogleNalog.
Kada podizete vase slike (link Upload) bicete prvo upitani da otvorite novi album (ako ne posedujete nijedan) ili da izaberete neki od postojecih. Album moze biti public (javni, svako ga vidi i svako moze doci do njega pretrazivanjem Picase) i private (samo vas, "nevidljiv" je za sve ostale korisnike). Nakon odabira/kreiranja albuma ce vam se otvoriti stranica na kojoj mozete podici maksimalno 5 slika istovremeno. Posto postavljate samo najbolje i izabrane fotke, mislim da je prostor koji vam nudi Picasa od 1 GB sasvim dovoljno.
Za mene je najveca prednost Picase je sto imate sliku u originalnoj velicini koju kasnije moze svako preuzeti.
Sto se tice "dizanja" fotki, postoji i elegantnije resenje u vidu aplikacije koja se zove Picasa (foto browser) i koja vam omogucava da postavite slike u vas album direktno sa vaseg racunara jednim klikom. Ovim putem se fotke podizu brze i imate mogucnost automatskog menjanja velicine fotografije na neku pristojnu rezoluciju, recimo 1600x1200.
Ali, sad jedno prakticno pitanje. Sta ako zelim da moje slike vide samo odabrani ljudi?
Resenje je da se logujete i da otvorite vas album. Videcete da je adresa (URL) tipa http://picasaweb.google.com/vasGoogleNalog/MojAlbum?authkey=ABCDEFGH#
Ovaj link posaljite na email ljudima za koji zelite da vide vase fotke bez potrebe da se loguju na Google.
Kvaka je u ovom "authkey". Ako toga nema, Google ce prijaviti da stranica ne postoji. Po meni ovo resenje je zaista prakticno i jos jedan razlog vise za koriscenje Picase.
Monday, September 8, 2008
Vasa (i njihova) sigurnost
Sve vise sajtova na Internetu zahteva vasu registraciju kako biste pristupili nekom sadrzaju ili uradili neku "akciju" (npr. slanje komentara). Svaki ovakav sajt treba da ima opciju "zaboravljene lozinke". Ovaj sistem se svodi na to da se korisniku koji je zaboravio lozinku posalje ista (postojeca ili nova automatski generisana) na e-mail adresu ili da mu se posalje link na kome se vrsi "resetovanje" (ponovno kreiranje) lozinke takodje na e-mail.
Od ova tri sistema i dalje se koristi prvi, koji je bio medju prvima i najprikladinij za "nove surfere". Medjutim, kako je rastao Internet, rastao je i rizik od namernih upada u sisteme, rusenje i/ili blokiranje sajtova, preuzimanje baze podataka i sl. Iz ovog razloga se danas sve (ili barem vecina) lozinke sifruju (enkriptuju) i takve se cuvaju u bazi podataka.
Radi se o tome da vama niko ne garantuje za sigurnost vase loznike za pristup sajtu jer ako neko pristupi bazi podataka (sto opet niko ne moze da garantuje) gde se lozinke cuvaju u citljivom formatu, svi korisnici su kao na "tacni".
Drugi nacin je da se loznika enkriptuje i takva da se cuva. Kada korisnik zahteva svoju lozinku, ona se dekriptuje i salje u email poruci takodje citljiva. Ovde sledi i jedna druga sigurnosna rupa a to je trasfer citljivih podataka kroz Internet. No, ovo cemo ovoga puta zaobici.
Treca opcija je najsigurnija od svih navedenih. Loznika se cuva u enkritpovanom formatu koji nije moguce (ili je moguce vrlo tesko) dekriptovati, a pri zahtevu za njenu promenu se salje samo link ka web stranici na kojoj se menja lozinka. Iako i ovde postoji navedena sigurnosna rupa (link je opet otvoren za usputno citanje), ovo se izbegava time sto se na stranici na koju link vodi zahteva unos korisnickog imena ili pak email adrese kako bi se mogao nastaviti proces izmene lozinke.
Dakle, zbog vaseg mirnog sna i poverenja drugih u vas, toplo vam preporucujem ovo resenje.
Iako vecina korisnika nije ovoga svesna, vi koji pravite bilo kakav sigurnosni "sistem" (makar se bazirao samo na autentikaciji tj. user/pass) bi trebalo da budete.
Od ova tri sistema i dalje se koristi prvi, koji je bio medju prvima i najprikladinij za "nove surfere". Medjutim, kako je rastao Internet, rastao je i rizik od namernih upada u sisteme, rusenje i/ili blokiranje sajtova, preuzimanje baze podataka i sl. Iz ovog razloga se danas sve (ili barem vecina) lozinke sifruju (enkriptuju) i takve se cuvaju u bazi podataka.
Radi se o tome da vama niko ne garantuje za sigurnost vase loznike za pristup sajtu jer ako neko pristupi bazi podataka (sto opet niko ne moze da garantuje) gde se lozinke cuvaju u citljivom formatu, svi korisnici su kao na "tacni".
Drugi nacin je da se loznika enkriptuje i takva da se cuva. Kada korisnik zahteva svoju lozinku, ona se dekriptuje i salje u email poruci takodje citljiva. Ovde sledi i jedna druga sigurnosna rupa a to je trasfer citljivih podataka kroz Internet. No, ovo cemo ovoga puta zaobici.
Treca opcija je najsigurnija od svih navedenih. Loznika se cuva u enkritpovanom formatu koji nije moguce (ili je moguce vrlo tesko) dekriptovati, a pri zahtevu za njenu promenu se salje samo link ka web stranici na kojoj se menja lozinka. Iako i ovde postoji navedena sigurnosna rupa (link je opet otvoren za usputno citanje), ovo se izbegava time sto se na stranici na koju link vodi zahteva unos korisnickog imena ili pak email adrese kako bi se mogao nastaviti proces izmene lozinke.
Dakle, zbog vaseg mirnog sna i poverenja drugih u vas, toplo vam preporucujem ovo resenje.
Iako vecina korisnika nije ovoga svesna, vi koji pravite bilo kakav sigurnosni "sistem" (makar se bazirao samo na autentikaciji tj. user/pass) bi trebalo da budete.
Monday, July 7, 2008
A sta da stavimo ovde?
"Pa sadrzaj".
Ovo je moj odgovor na pitanje klijenata koje stoji u naslovu kada radim konsalting za SEO (Search Engine Optimization) i promociju web sajta.
Ljudi uglavnom traze da budu dobro pozicionirani na pretrazivacima, a da pritom imaju sajt od 5 strana koji nije azuruiran od kada je postavljen - znaci nikad.
Evo kako to obicno ide u Srbiji. Rekao Mika Ziki "nema te na Googleu, covece". Onda Mika nekako kontaktira mene i kaze "hocu da se pojavim na guglu i koliko ce to da me kosta". Klijenti, ko klijenti, svugde u svetu, teski ko crna zemlja, odmah hoce cenu, a da pritom ne znaju ni sami sta hoce (u vecni slucajeva). Uglavnom se prvo uhvate za reklame sa desne strane Google-a i obicno bude "aaaaa, to se placa, dobro onda nista, da preskocimo to, a kako ja da se pojavim ovde prvi...".
Naravno, dalje sa nastavlja sa zahtevom za pojavljivanje na rezultatima pretrage za odredjene kljucne reci "znas, moj drugar bas onomad gledao, pa mi kaze...". Ovde sledi jedno pola sata objasnjavanja kako to gugl radi i zasto njih nema tu gde oni hoce (i trebaju?!?!) da budu. Uglavnom, posto njima i dalje nista nije jasno, kazem sta mogu da uradim, da prvo ide analiza sajta, konkurencije, trenutna statistika, plan aktivnosti i da za celu stvar treba vremena i da NEMA garancije. Postoje samo ciljevi (goals) ka kojima se stremi, nekad se i dostignu, ali nekad i ne. Ovo uglavnom zavisi od tematike sajta, da li je za "siroke narodne mase" ili usko specijalizovan. Medjutim, sto smo blizi , posao je bolje uradjen. Najbitnije je - pomeriti se.
Izanalizira se sta ima, napise se "akcioni" plan i daju se predlozi, koji i ne moraju da se usvoje, ali svakako ce poboljsati celu stvar. U predlozima uglavnom stoji da se sajt obogati novim sadrzajem. Jednostavno, sajt od 5 stranica (pocetna, o nama, proizvodi, usluge i kontakt) ce "piti vodu" jedno vreme (pogotovo ako je SEO bio nula), ali jednostavno nije odrzivo. Na sadrzaju sajta se MORA raditi. Uglavnom predlazem da se azurira periodicno (u najgorem slucaju jednom u 15 dana) pocetna stranica sa nekim vestima ili novostima, sto moze da uradi i sekretarica. Postoje tu i neki mali trikovi kako da se donekle zeznu roboti kako bi imali utisak da je stranica azurirana, ali ne bih sad o tome.
I, kako to u Srbiji biva, nakon pojavljivanja sajta na Google-u ("ej, nasao me Pera") u 90% slucajeva niko ne azurira sajt (tipa "zasto bih ja polagao vozacki kad nemam auto, a i ko zna kada cu ga imati").
Ovo je moj odgovor na pitanje klijenata koje stoji u naslovu kada radim konsalting za SEO (Search Engine Optimization) i promociju web sajta.
Ljudi uglavnom traze da budu dobro pozicionirani na pretrazivacima, a da pritom imaju sajt od 5 strana koji nije azuruiran od kada je postavljen - znaci nikad.
Evo kako to obicno ide u Srbiji. Rekao Mika Ziki "nema te na Googleu, covece". Onda Mika nekako kontaktira mene i kaze "hocu da se pojavim na guglu i koliko ce to da me kosta". Klijenti, ko klijenti, svugde u svetu, teski ko crna zemlja, odmah hoce cenu, a da pritom ne znaju ni sami sta hoce (u vecni slucajeva). Uglavnom se prvo uhvate za reklame sa desne strane Google-a i obicno bude "aaaaa, to se placa, dobro onda nista, da preskocimo to, a kako ja da se pojavim ovde prvi...".
Naravno, dalje sa nastavlja sa zahtevom za pojavljivanje na rezultatima pretrage za odredjene kljucne reci "znas, moj drugar bas onomad gledao, pa mi kaze...". Ovde sledi jedno pola sata objasnjavanja kako to gugl radi i zasto njih nema tu gde oni hoce (i trebaju?!?!) da budu. Uglavnom, posto njima i dalje nista nije jasno, kazem sta mogu da uradim, da prvo ide analiza sajta, konkurencije, trenutna statistika, plan aktivnosti i da za celu stvar treba vremena i da NEMA garancije. Postoje samo ciljevi (goals) ka kojima se stremi, nekad se i dostignu, ali nekad i ne. Ovo uglavnom zavisi od tematike sajta, da li je za "siroke narodne mase" ili usko specijalizovan. Medjutim, sto smo blizi , posao je bolje uradjen. Najbitnije je - pomeriti se.
Izanalizira se sta ima, napise se "akcioni" plan i daju se predlozi, koji i ne moraju da se usvoje, ali svakako ce poboljsati celu stvar. U predlozima uglavnom stoji da se sajt obogati novim sadrzajem. Jednostavno, sajt od 5 stranica (pocetna, o nama, proizvodi, usluge i kontakt) ce "piti vodu" jedno vreme (pogotovo ako je SEO bio nula), ali jednostavno nije odrzivo. Na sadrzaju sajta se MORA raditi. Uglavnom predlazem da se azurira periodicno (u najgorem slucaju jednom u 15 dana) pocetna stranica sa nekim vestima ili novostima, sto moze da uradi i sekretarica. Postoje tu i neki mali trikovi kako da se donekle zeznu roboti kako bi imali utisak da je stranica azurirana, ali ne bih sad o tome.
I, kako to u Srbiji biva, nakon pojavljivanja sajta na Google-u ("ej, nasao me Pera") u 90% slucajeva niko ne azurira sajt (tipa "zasto bih ja polagao vozacki kad nemam auto, a i ko zna kada cu ga imati").
Tuesday, April 8, 2008
Arhitektura na tri nivoa
Tronivovska arhitektura je poznatija kao "3-tier architecture" (od n-tier) koju je Microsoft prisvojio za web aplikacije koje barataju podacima ciji je izvor i odrediste baza podataka (dakle klijent-server arhitektura), a inace je ideja ziva vec poodavno. Medjutim, Microsot je prvi omogucio da u svom IDE alatu (Visual Studio) vizuleno povezete nivoe koji su do tada bili samo teoretski povezani, a programer je morao da zna sta i odakle poziva.
N-Tier arhitektura ima daleko vise nivoa, ali je arhitektura obicne desktop i web aplikacije svedena na osnovna tri - podaci (data access), logika (bussines logic) i prezentacija (presentation). Koncept se zasniva na tome da svaki nivo radi svoj posao, da je svaki nivo "ucauren" (ko zna sta on radi, prim aut.) i da svaki od njih moze biti koriscen sa vise strana (npr. istu logiku i pristup podacima mogu da koriste web i windows aplikacija) sto omogucava modularnost. Takodje, pri izvrsavanju programa nivoi se ne mogu preskakati (sem u izuzetnim slucajevima) vec proces ide korak po korak (jel to neko pomenuo Windows Workflow Foundation?)
Podaci - U ovom nivou se samo odredjuje pristup podacima i definisu CRUD operacije (CReate, Update i Delete), bilo one store procedure ili zivi upiti. Konekcija na bazu se takodje vrsi iz ovog nivoa. Dakle, bilo sta sto se radi sa bazom podataka se nalazi u ovom sloju.
Poslovna logika - Ovaj sloj definise sta se radi sa podacima koji dolaze/odlaze iz aplikacije/baze podataka. Ispituju se pravila upisa, konvertuju se podaci i jednog tipa u drugi i tome sl. Ovde bi trebala da se nalazi sva pamet aplikacije.
Prezentacija - Ovo je zapravo samo korisnicki interfejs. Znaci prozori i web stranice. Mnogi neiskusni programeri sve strpaju u ovaj nivo tako da se dobijaju "spageti" u kodu i gomila metoda kojima jednostavno tu nije mesto, vec u poslovnom sloju aplikacije.
Kako bi ovo bilo jasnije, postavicu najjednostavniji primer u formi za kreiranje novog korisnika.
- Prezentacija (ono sto korisnik vidi) sadrzi web/winform kontrole, textbox-ove za unos podataka, labele za opise i dugmad (ili samo dugme). Pored ovoga moraju postojati i EventHandler-i, najmanje jedan, za kontrolu dugmeta "Unesi korisnika". Pritiskom na ovo dugme , poziva se metoda iz biznis sloja kojoj se prosledjuju podaci (ime korisnika, lozinka i e-mail adresa) koji su ucitani iz kontrola.
- Poslovna logika je tu da proveri validnost unetih podataka (format e-mail adrese, proveru domena, provera politike za format lozinke i za naziv korisnika) i da doda jos informacija (datum kada je korisnik kreiran, IP adresa, naziv i verzija browser-a i sl.) i neke default vrednosti (broj logovanja, datum poslednjeg logovanja i sl). U ovom sloju se kreira entitet (tj. objekat iz sloja baze podataka) Korisnik koji predstavlja jedan zapis u tabeli Korisnici. Kada se kreira entitet sa svim ispravnim podacima poziva se jedna od CRUD metoda iz najnizeg sloja kome se prosledjuje ceo entitet popunjen podacima.
- Podaci ili sloj baze podataka prihvata objekat (entitet) sa svojim podacima i izvrsava jednu od operacija koja je pozvana - kreiranje, brisanje ili izmena zapisa. Opcionalno moze vracati rezultate izvrsenja opereracije.
Vise o n-tier arhitekturi mozete pronaci na linkovima:
http://en.wikipedia.org/wiki/Three-tier_(computing)
http://www.microsoft.com/belux/nl/msdn/community/columns/hyatt/ntier1.mspx
3-tier Architecture with ASP.NET 2.0
N-Tier arhitektura ima daleko vise nivoa, ali je arhitektura obicne desktop i web aplikacije svedena na osnovna tri - podaci (data access), logika (bussines logic) i prezentacija (presentation). Koncept se zasniva na tome da svaki nivo radi svoj posao, da je svaki nivo "ucauren" (ko zna sta on radi, prim aut.) i da svaki od njih moze biti koriscen sa vise strana (npr. istu logiku i pristup podacima mogu da koriste web i windows aplikacija) sto omogucava modularnost. Takodje, pri izvrsavanju programa nivoi se ne mogu preskakati (sem u izuzetnim slucajevima) vec proces ide korak po korak (jel to neko pomenuo Windows Workflow Foundation?)
Podaci - U ovom nivou se samo odredjuje pristup podacima i definisu CRUD operacije (CReate, Update i Delete), bilo one store procedure ili zivi upiti. Konekcija na bazu se takodje vrsi iz ovog nivoa. Dakle, bilo sta sto se radi sa bazom podataka se nalazi u ovom sloju.
Poslovna logika - Ovaj sloj definise sta se radi sa podacima koji dolaze/odlaze iz aplikacije/baze podataka. Ispituju se pravila upisa, konvertuju se podaci i jednog tipa u drugi i tome sl. Ovde bi trebala da se nalazi sva pamet aplikacije.
Prezentacija - Ovo je zapravo samo korisnicki interfejs. Znaci prozori i web stranice. Mnogi neiskusni programeri sve strpaju u ovaj nivo tako da se dobijaju "spageti" u kodu i gomila metoda kojima jednostavno tu nije mesto, vec u poslovnom sloju aplikacije.
Kako bi ovo bilo jasnije, postavicu najjednostavniji primer u formi za kreiranje novog korisnika.
- Prezentacija (ono sto korisnik vidi) sadrzi web/winform kontrole, textbox-ove za unos podataka, labele za opise i dugmad (ili samo dugme). Pored ovoga moraju postojati i EventHandler-i, najmanje jedan, za kontrolu dugmeta "Unesi korisnika". Pritiskom na ovo dugme , poziva se metoda iz biznis sloja kojoj se prosledjuju podaci (ime korisnika, lozinka i e-mail adresa) koji su ucitani iz kontrola.
- Poslovna logika je tu da proveri validnost unetih podataka (format e-mail adrese, proveru domena, provera politike za format lozinke i za naziv korisnika) i da doda jos informacija (datum kada je korisnik kreiran, IP adresa, naziv i verzija browser-a i sl.) i neke default vrednosti (broj logovanja, datum poslednjeg logovanja i sl). U ovom sloju se kreira entitet (tj. objekat iz sloja baze podataka) Korisnik koji predstavlja jedan zapis u tabeli Korisnici. Kada se kreira entitet sa svim ispravnim podacima poziva se jedna od CRUD metoda iz najnizeg sloja kome se prosledjuje ceo entitet popunjen podacima.
- Podaci ili sloj baze podataka prihvata objekat (entitet) sa svojim podacima i izvrsava jednu od operacija koja je pozvana - kreiranje, brisanje ili izmena zapisa. Opcionalno moze vracati rezultate izvrsenja opereracije.
Vise o n-tier arhitekturi mozete pronaci na linkovima:
http://en.wikipedia.org/wiki/Three-tier_(computing)
http://www.microsoft.com/belux/nl/msdn/community/columns/hyatt/ntier1.mspx
3-tier Architecture with ASP.NET 2.0
Subscribe to:
Comments (Atom)