Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Data Acces Layer

[es] :: .NET :: ASP.NET :: Data Acces Layer

[ Pregleda: 3166 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

CallMeSaMaster

Član broj: 43611
Poruke: 466
92.36.178.*



+1 Profil

icon Data Acces Layer15.09.2009. u 20:08 - pre 177 meseci
Pozdrav svima,

potrebna mi je pomoc oko pisanja vlastitoga DAL-a. Naime htio bih u web aplikaciji odvojiti Datalayer od GUI-a i Bizlayera. Prvo sto mi je palo na pamet je da jednostavno strpam sve(DB bazirano) u StoredProcedures i da se koliko toliko rijesim problema. Nakon malo duzeg razmisljanja shvatio sam da bih mogao napisati neki svoj DAL, ako nista za osnovne operacije CRUD-a. Nazalost ubrzo sam shvatio da to i nije bas jednostavan posao.

Moje pitanje je zanci sledece: Da li neko moze da mi kaze kako da krenem , odakle? Na sta trebam racunati, o cemu voditi racuna? Neki tutorial za pocetnike na ovom polju bi dobro dosao.
Kakva su vasa iskustva sa SP u odnosu na DAL i obrnuto?

Znam da ce neki reci zasto ne uzeti neki framework(NHibernate, etc...)? - Na ovo i ne znam bas odgovor jer u sustini nisam ni jedno ni drugo koristio, tako da...

Svaki prijedlog je dobrodosao....
 
Odgovor na temu

Dejan Carić
Oslo, Norway

Član broj: 230976
Poruke: 232
93.86.151.*

Sajt: www.dcaric.com


+26 Profil

icon Re: Data Acces Layer15.09.2009. u 23:24 - pre 177 meseci
Data Access Object bi trebalo da se konektuje na bazu i izvrši neke CRUD operacije (ili da iskoristi postojeću konekciju).
Za upite možeš koristiti storne procedure ili dinamičke upite.
Koji ćeš tip upita koristiti zavisi od tipa i složenosti aplikacije.
Procedure su navodno brže (nikada nisam merio preformanse u odnosu na dimačke upite) dok dinamički upiti imaju mnogo veću fleksibilnost.
Neke baze ne podržavaju procedure, etc.
Verovatno si hteo da napraviš neku DAO base klasu iz koje ćeš nasleđivati sve ostale?
Kaži gde je zapelo pa da vidimo kako dalje.
 
Odgovor na temu

Sapphire
Denis Biondić
.NET software developer
Nürnberg, Germany

Član broj: 213086
Poruke: 290
62.113.8.*



+6 Profil

icon Re: Data Acces Layer16.09.2009. u 00:23 - pre 177 meseci
Pitanje koje postavljaš zavisi od mnogo faktora.

Jedan od tih faktora je šta koristiš za DTO (Data Transfer Object) u aplikaciji, tj. u komunikaciji među slojevima. Npr, treba ti neki objekat koji puniš u DAL, nad kojim vršiš validaciju i biznis logiku u BL, i koji prikazuješ u UI. Jedan od izbora je DataSet, drugi je custom DTO objekat. Drugi, mnogo važniji faktor, od kojeg i prethodno zavisi, je kako ti je projektovan BL. Ako imaš samo osnovne CRUD operacije, onda ti je prema veličini programa poželjan ili Transaction Script ili Table Module pattern, koji kao DAL koriste neku verziju Gateway pattern-a (opet zavisno od DTO-a). Za veće i kompleksnije programe, te čak i za manje (ako si dobar sa OO konceptima - ali mislim stvarno dobar - OO nije puko deklarisanje klasa), onda Domain Model. Skoro sve što ovdje navodim potiče iz Fowler-ove "Patterns of Enterprise Application Architecture" knjige, tako da ne treba ti tutorial, treba ti ova knjiga, sa prethodno pročitanim GoF Design Pattern-ima.

E sad, DAL ti (striktno i best-practice) gledajući, može biti ili Gateway ili Object-Relational mapping framework. U prvome se najčešće koristi DataSet sa DataAdapterima (i zove se Table Data Gateway), a za drugi si sam naveo primjer - NHibernate.

Ono što tebe vjerovatno brine (i zamara) je količina koda koju trebaš svaki put iznova pisati čak i za najosnovnije sitnice. Evo nešto napisano samo za prikaz koliko je jednostavnije ovo raditi pomoći patterna (ovo dole je Table Data Gateway DAL sa DataSet-ovima):

Treba ti abstraktna nad-klasa, koja preuzima cijelo generičko ponašanje na sebe:
Code:

public abstract class DataGateway : IDisposable
{
        protected SqlDataAdapter adapter;
        protected SqlConnection conn;

        public abstract string  TableName      { get; }
        public DataTable        Data              { get; set; }


        protected DataGateway()
        {
            Data = new DataTable();
            conn = DBProvider.GetConnection();
        }


        /////////////////////////////////////////////////////////////////////////////
        // Generičke metode
        /////////////////////////////////////////////////////////////////////////////
        public void Load()
        {
            Data.Clear();


            Data.TableName = TableName;

            adapter = new SqlDataAdapter("SELECT * FROM " + TableName, conn);
            conn.Open();
            adapter.Fill(Data);
            conn.Close();
        }

        public void Update()
        {
            SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
            adapter.Update(Data);
        }

        public void Delete(int id)
        {
            DataRow toDelete = this[id];
            toDelete.Delete();
            Update();
        }

        // indexer, za pozivanje gateway[14];
        public DataRow this[int id]
        {
            get { return Data.Select("Id = " + id)[0]; }
        }
}


E sad, možda primjećuješ da nedostaje Insert() metoda, ali ona je u biti laka, samo ima nekih varijacija koje radi kompleksnosti nisam sada želio pisati. Samo napomene radi, radi se o problemu kada imaš AutoIncrement (Ident) Primary Key, pa moraš raditi "SELECT Id FROM ... WHERE Id = @@identity ";

Uglavnom, sve što ti sada treba su implementacije Gateway-a, recimo:

Code:

public class OsobaGateway : DataGateway
{
        public override string TableName
        {
            get { return "Osobe"; }
        }
}

public class FakturaGateway : DataGateway
{
        public override string TableName
        {
            get { return "Fakture "; }
        }
}

itd...


nakon čega se može pozivati:

Code:

OsobaGateway gateway = new OsobaGateway();
gateway.Load();

gateway[12]["Ime"] = "UpdatedName";   // ovo će obilježiti DataRow sa Modified
gateway.Update();                             // ovdje će DataAdapter sve Modified, Added i Deleted DataRow-ove sinhronizirati s bazom



Samo za kraj da kažem da je ovo sve samo demonstracije radi, da vidiš jednu od opcija. Obično gdje imaš jedan pattern, imaš ih i 1000 drugih. Npr, NHibernate u sebi sadrži i Identity Map, i Lazy Load, i gomilu drugog. Najbolje ti je da počneš sa čitanjem onih knjiga što sam iznad naveo, pa će ti onda sve biti mnogo jasnije...
My programs don’t have bugs, they just develop random features.
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.adsl-a-1.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: Data Acces Layer16.09.2009. u 15:20 - pre 177 meseci
Primer koji je naveo @Sapphire je elegantan, ali meni se ne dopada. OK je ako su ti potrebne samo osnovne operacije nad bazom ali mislim će biti problem sa složenijim upitima( neće moći da se generalizuje). Svakako, moći će ako pišeš:
Code:
OsobaGateway gateway = new OsobaGateway();

Ali čemu onda OOP? A i ne možeš koristiti tipizirane DataSetove( može da se namesti d radi kastovanje, al' pitanje je dal ti uvek dok kucaš znaš koji će tip DT-a tu da ti dođe).

Enivej, ne kažem da sam pametan tu nešto, ali evo da iznesem i kako ja to radim, preko DataSet-ova. A nadam se nekoj kritici svakako

Dodajem DataSet i adaptere za svaku tabelu. Obizirom da su klase adaptera parcijalne, i da oni wizardi ni za šta nisu, dodam "ručno" kod za sve funkcije koje adapteri treba da imaju. Ako neka funkcija vraća DataRow, vraćaće odgovarajući tipiziran DataRow. Naravno imam odvojeno klasu koja izvršava upit ili komandu, kojoj samo prosledim SqlCommand koji je formiran unutar neke funkcije adaptera.

U biznis delu postoji klasa koja u sebi sadrži tipiziran DataRow, logiku za validaciju, neke logičke operacije nad onim podacima ispod itd.
Postoji i "utility" statička klasa koja barata sa gornjom klasaom, tipa Update, Delete, GetBy... itd. Skoro sve te funkcije dobijaju za parametar gornju klasu i eventualno neki dodatni parametar ako je potrebno.


U prezentacionom delu postoji WebUserControl za svaku logičku celinu, ona koristi klase iz biznis sloja i samo ih formatira za prikaz.

Heh :/
 
Odgovor na temu

Dejan Carić
Oslo, Norway

Član broj: 230976
Poruke: 232
*.adacta.rs.

Sajt: www.dcaric.com


+26 Profil

icon Re: Data Acces Layer16.09.2009. u 16:02 - pre 177 meseci
@toxi_programer
Čemu potreba za tipiziranim data setovima ako radimo sa Entity/Value objektima?
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.adsl-a-1.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: Data Acces Layer16.09.2009. u 16:32 - pre 177 meseci
Pa:

Code:
 ... gateway[12]["Ime"] ...


ili

Code:
tipiziranaTabela.Rows[12].Ime


Šta je bolje? Lično ne vidim ni jednu prednost onog prvog pristupa u odnosu na drugi. Najtrivijalniji problem sa onim gornjim je što ću na 15 mesta u programu, pod navodnicima, pisati "Ime", a sa tim dolazi i mogućnost da pogrešnim u kucanju. I onda je problem što mi kompajler neće reći da sam pogrešio, verovatno će mi reći korisnik xD

No, svakako, možda ja grešim ali stvarno ne vidim zašto tipiziran set nije bolji... :/
 
Odgovor na temu

pl4stik
Senior .NET programmer/Consultant
oDesk
NI na nebu NI na zemlji

Član broj: 173596
Poruke: 715
91.150.118.*

Sajt: xx-auth.com.azhar.arvixe...


+31 Profil

icon Re: Data Acces Layer16.09.2009. u 17:25 - pre 177 meseci
Jaoo sto ja volim one tipizirane datasetove jer se prave wizardima koji su super klik klik klik klik oho eto ga program Cool
To sto nekoliko miliona ljudi tvrdi da nisi u pravu ne znaci da stvarno nisi - Frank Zappa

https://youtu.be/DLe358DPGXU
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.adsl-a-1.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: Data Acces Layer16.09.2009. u 17:28 - pre 177 meseci
Citat:
Jaoo sto ja volim one tipizirane datasetove jer se prave wizardim

Napravi ga i bez wizarda ako hoćeš, malo duže će da traje i na kraju dobiješ istu stvar...
 
Odgovor na temu

pl4stik
Senior .NET programmer/Consultant
oDesk
NI na nebu NI na zemlji

Član broj: 173596
Poruke: 715
91.150.118.*

Sajt: xx-auth.com.azhar.arvixe...


+31 Profil

icon Re: Data Acces Layer16.09.2009. u 17:31 - pre 177 meseci
Vreme je novac prijatelju moj
To sto nekoliko miliona ljudi tvrdi da nisi u pravu ne znaci da stvarno nisi - Frank Zappa

https://youtu.be/DLe358DPGXU
 
Odgovor na temu

Dejan Carić
Oslo, Norway

Član broj: 230976
Poruke: 232
93.86.151.*

Sajt: www.dcaric.com


+26 Profil

icon Re: Data Acces Layer16.09.2009. u 17:57 - pre 177 meseci
Korišćenjem TableDataGateway objekata, data source je isključivo neka tabela što naravno nije uvek slučaj.
DataSource može biti bilo koji objekat (binarni fajl, xml fajl, office dokument, neki web servis, itd).

Data Access Object koristi business object za snimanje u data source (bilo kog tipa) i obrnuto, koristi data source za kreiranje business objekata.

Upotrebom domain driven design-a, repository pattern je zamenio DAO (ista stvar, drugo pakovanje).
Dok recimo u nekim kompleksnijim arhitekturama, repository pattern se koristi kao fasada za DAO.

U aplikacijama za 2 sata, gde nema nikakve arhitekture, koristi se tipizirani data set i udri =)
 
Odgovor na temu

pl4stik
Senior .NET programmer/Consultant
oDesk
NI na nebu NI na zemlji

Član broj: 173596
Poruke: 715
91.150.118.*

Sajt: xx-auth.com.azhar.arvixe...


+31 Profil

icon Re: Data Acces Layer16.09.2009. u 21:02 - pre 177 meseci
Ahaaaa, a ti to o mvc-u ?

Pa sta reci mocna stvar, jedan mocan wizard (manje se nije ni ocekivalo od MS-a) mene je licno onaj routing odusevio al daleko od toga da "kompleksnija arhitektura" samo tako moze da se pravi, postigne ....

Elem, da odgovorim (i ja) pokretacu teme:

Za "manje" projekte mozes da koristis xml shema dokuments to ti je insert new item pa izaberes DataSet otvori ti se wizard ti isprevlacis jednu ili vise tabela generises CRUD i cepaj, detaljnije imas objasnjeno Fire up Visual Studio i na strani koja ti se otvori navigate to http://www.asp.net/learn/data-access/ tu su ti pdf dokumenti ako volis da citas, a imas na http://www.asp.net/learn/data-videos/ snimljena tri komada...

Za projekte sa "kompleksnijom arhitekturom" pravo na istu stranu pa http://www.asp.net/learn/mvc-videos/

Ako volis SOA http://msdn.microsoft.com/en-us/data/cc300162.aspx

Ma moze sta oces najvise zavisi s kim radis sta se najvise koristi oko tebe (bez saradnika nista), a licno mislim da sto vise treba da generises DAL jer u BAL-u ima da
kucas da ti kapa pa'ne

A za ovo

Citat:
Dejan Carić
U aplikacijama za 2 sata, gde nema nikakve arhitekture, koristi se tipizirani data set i udri =)


, ovaj evo sesta godina (2 po 2 nakupilo se ) ima tu svasta


To sto nekoliko miliona ljudi tvrdi da nisi u pravu ne znaci da stvarno nisi - Frank Zappa

https://youtu.be/DLe358DPGXU
 
Odgovor na temu

Dejan Carić
Oslo, Norway

Član broj: 230976
Poruke: 232
93.86.151.*

Sajt: www.dcaric.com


+26 Profil

icon Re: Data Acces Layer16.09.2009. u 21:50 - pre 177 meseci
Ne volim MVC, radim sa MVP jer više volim kada je presenter in charge. To mi omogućava da vrlo lako web aplikaciju konvertujem u desktop i obrnuto, a to je sa MVC-om neizvodljivo. Početniku nikad ne bih preporučio upotrebu wizard-a, ORM alata i sl.
Zašto?
Zato što bi pre korišćenja morao dobro da zna kako to radi u pozadini i da ima potrebno znanje da sam iskodira tu funkcionalnost. Tek kada to zna, onda može da odluči hoće li prihvatiti neke kompromise i odlučiti se za upotrebu tih alata ili ne.
 
Odgovor na temu

pl4stik
Senior .NET programmer/Consultant
oDesk
NI na nebu NI na zemlji

Član broj: 173596
Poruke: 715
89.216.37.*

Sajt: xx-auth.com.azhar.arvixe...


+31 Profil

icon Re: Data Acces Layer23.09.2009. u 06:33 - pre 177 meseci
Uz rizik da ispadnem pglu..

Citat:
Dejan Carić: Ne volim MVC, radim sa MVP jer više volim kada je presenter in charge. To mi omogućava da vrlo lako web aplikaciju konvertujem u desktop i obrnuto, a to je sa MVC-om neizvodljivo...


Kako konvertujes tj. sta je ta konverzija daj neki link .... Razumem da pravish poseban layer (meni za to sluze web servisi) al konverzija nemam pojma cemu to sluzi, a ni kako (se) radi...
To sto nekoliko miliona ljudi tvrdi da nisi u pravu ne znaci da stvarno nisi - Frank Zappa

https://youtu.be/DLe358DPGXU
 
Odgovor na temu

Dejan Carić
Oslo, Norway

Član broj: 230976
Poruke: 232
*.adacta.rs.

Sajt: www.dcaric.com


+26 Profil

icon Re: Data Acces Layer23.09.2009. u 08:55 - pre 177 meseci
Mislio sam da web form lako zamenim sa win form jer sve forme moraju da naslede neki interfejs sa kojim presenter radi.
 
Odgovor na temu

pl4stik
Senior .NET programmer/Consultant
oDesk
NI na nebu NI na zemlji

Član broj: 173596
Poruke: 715
89.216.37.*

Sajt: xx-auth.com.azhar.arvixe...


+31 Profil

icon Re: Data Acces Layer23.09.2009. u 12:52 - pre 177 meseci
Uh tek sam sad obratio paznju na broj poruka, al ok samo sledeci put za sve tvrdnje ostavljaj linkove da bi mogli da "popricamo" ko ljudi...
To sto nekoliko miliona ljudi tvrdi da nisi u pravu ne znaci da stvarno nisi - Frank Zappa

https://youtu.be/DLe358DPGXU
 
Odgovor na temu

[es] :: .NET :: ASP.NET :: Data Acces Layer

[ Pregleda: 3166 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.