DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   SQL baze podataka - Sponzor: Baze-Podataka.net (http://www.devprotalk.com/forumdisplay.php?f=10)
-   -   DB Abstraction Layer, koji koristite ? (http://www.devprotalk.com/showthread.php?t=573)

degojs 02. 02. 2006. 04:01

Citat:

Koji "automatizam" moze da ti generise ovakav query ? Verovatno moze, ali moras da se ubijes i da potrosis gomilu vremena da izdefinises relacije, views... kako god ih zoves.
Pa to jeste view. I za njega cu da dobijem klasu, a njega cu naravno prethodno sam da ili dizajniram vizuelno ili napisem. Pa nece bas alat da mi pogadja misli. E ako si to trazio, pa toga jos nema :)

bluesman 02. 02. 2006. 04:07

Ne znam da li sam ja umoran ili ti? Naravno da nisam očekivao da mi pogađa misli, upravo sam ti pričao o vremenu potrošenom za definisanje svih parametara, views, kako god, i kažem da za mnogo kraće vreme, možeš da napišeš ovaj query (naravno, pod uslovom da znaš sql :) siguran sam da mnogi idu na te "layere" i "generatore" baš iz razloga što ne znaju SQL)

bluesman 02. 02. 2006. 04:12

Citat:

Originalno napisao degojs
Jesi radio nekad aplikaciju koja radi sa pacijentima, bolestima, nalazima, simptomima, tretmanima, epidemijama i slično?

Pu - pu - pu, ne daj Bože :)

Nisam ali sam radio sa kladionicama, znaš ono 1-1, 1-x, 1-2, ... pa golovi prvo poluvreme, pa golovi kraj, pa tačan rezultat... pa prvi daje gol, pa korneri, pa ...

Ali ovo tvoje zvuči kao idealan slučaj za lepo normalizaciju, ali nećemo o tome sada.

degojs 02. 02. 2006. 04:19

Odustajem, jer mislim da ne razumes viewe uopste:
Citat:

upravo sam ti pričao o vremenu potrošenom za definisanje svih parametara, views, kako god, i kažem da za mnogo kraće vreme, možeš da napišeš ovaj query
Ama covece taj query JESTE view.

Ajd sad da pitam: jesi li pravio view u nekoj bazi? Nisi. Da jesi, znao bi da je to sto si otkucao, taj query, isto ono sto bi otkucao u nekoj bazi i sacuvao tamo kao npr. "view1". I onda mozes recimo SELECT * FROM VIEW1 WHERE..


Inace, kod mene je 22:15, bice da si ti umoran :)

degojs 02. 02. 2006. 04:23

Citat:

Ali ovo tvoje zvuči kao idealan slučaj za lepo normalizaciju, ali nećemo o tome sada
Znas, sad si vec i bezobrazan (tipa znam ja da to moze bolje iako pojma nemam o cemu se tamo radi, ni da li je vise ljudi ukljuceno koji imaju bas mnogo iskustva i slicno, ni da li su merene performanse, ni da li je radjena normalizacija pa *denormalizacija* /znas li zasto se radi denormalizacija?/, itd).

Ebi ga, al malo zajebavas :)

ivanhoe 02. 02. 2006. 07:10

Citat:

Originalno napisao degojs
Onda i pričamo o istoj stvari. Ostaje da vidimo kako ivanhoe radi ovo isto :)

kul je ovaj JSP... :)
Mada ovaj tvoj priemr je vise zgodan zbog validacije forme, nego sto je nesto velika usteda oko inserta...a koliko je meni u znanju ni jedan DB abstraction za php4 ne nudi nista na ovu foru...

a sto se tice toga kako ja to radim, ja uglavnom koristim php i mada ima u php-u brdo gotovih klasa za validaciju, ja to obicno radim od slucaja do slucaja, jer mi retko treba vise od 10-tak polja po formi, a za to copy&paste radi posao... a sem toga ionako neka malo slozenija pravila kao validaciju email-a, CC-a ili zip kodova moras da pises rucno...

a sam insert sam vec jednom pisao, otprilike ovako:

PHP kôd:

$err_arr validate(); //validacija forme
if( !is_array($err_arr))
      
$db->insert('ime_tabele'$_POST); // insert 

umesto $_POST moze bilo koji hash kome su kljucevi imena polja u bazi...tvoje java resenje jeste krace i lepse, ali nije to bas tako strasno komplikovano ni ovako...naravno da moram da obradim 50+ polja po formi verovatno bi mi dobro dosao neki Pear DB_Data_Object ili Propel ili vec neka teska artiljerija...


i da se razumemo nemam ja nista protiv fancy DB abstraction layera, bas naprotiv ja bih rado da uzmem da koristim neki dobar (jer ovo sto ja koristim datira jos iz php3 i sigurno moze bolje da se odradi), ali mi smeta kod vecine sto su preglomazni, a pritom pola opcija koje nude mi ne trebaju. Ja bih neki jednostavan, brz, a funkcionalan... koristiti ove postojece na obicnim sajtovima je kao voziti porshea po beogradu, neces moci da primetis neku realnu prednost, osim sto je fancy i trosi vise..

Cisto kao mali primer moje logike, na sajtu AdoDB Lite mozete da vidite benchmarke koji pokazuju da je AdoDB oko 5 puta sporiji od cistog mysql-a (bez akceleratora, ali to je uobicajen slucaj)... a plus zauzme nekih 700KB memorije samo kad se includuje...to nije bas zanemarljiva stvar, priznacete?

Ilija Studen 02. 02. 2006. 07:36

Citat:

Originalno napisao ivanhoe
DB abstraction za php4 ne nudi nista na ovu foru...

CakePHP bi trebalo da ima relativno kompletno implementiran ActiveRecord sa validatorima što znači da se generisanje i validacija formi rade (polu)automatski. U Railsu (Cake je pravljen po uzoru na njega) je sve automatizovano tako da je pitanje koliko su phpnut i kompanija (CakePHP dev tim) dogurali u portovanje.

U Propelu (PHP4 i PHP5 generator) imaš mogućnost setovanja validatora (sprečavaju insertovanje / update objekta sa neispravnim svojstvima), ali ne i podršku za automatsko generisanje / procesiranje formi. To moraš sam da implementiraš ili možeš da "pokradeš" neko gotovo rešenje kao što je Symphony na primer.

Citat:

Originalno napisao ivanoe
ali mi smeta kod vecine sto su preglomazni, a pritom pola opcija koje nude mi ne trebaju

Slažem se. Zato i volim Rails... Uzeli su less everything pristup tako da je sam framework nezagađen. Ima ono što ti treba i nešto sitno preko. Tu se staje... Kamo sreće da ekipa koja radi Propel prihvati ovaj pridtup.

Čak iako sam nezadovoljan kvalitetom mnogih PHP5 rešenja ipak branim stav da je pametnije koristiti ovakve biblioteke nego se igrati sa čistim SQLom kod svih složenijih projekata. Za sitne stvari quick and dirty, za ozbilnije zna se...

---

Pošto je bluesman izjavio da većina koristi ovakve biblioteke kako ne bi morali da koriste SQL iz razloga što ga ne znaju (ovu izjavu u najmanju ruku smatram netačnom) evo malo istorije.

Prvi Windows programeri su morali da znaju Win32 API u dušu da bi radili. Pišu ljudi koji su radili u to vreme da je to jedan izuzetno komplikovan i smoran posao. Nisam probao tako da moram da im verujem na reč. Kako je vreme prolazilo, tako su alati sazrevali da bi danas koristio proste drag and drop metode za kreiranje formi, gotove biblioteke za rad sa prozorima i kontrolama itd itd itd. Sam API retko ko koristi, sve se radi kroz wrappere. Možda grešim u nekim detaljima, nisam se bavio programiranjem u to vreme tako da mogu da pričam iz prve ruke. Samo želim da istaknem da se programiranje razvija u tom smeru da skraćuje vreme koje programer treba da uloži u prljav, vodoinstalaterski posao (jer SQL to uglavnom jeste) i omogući mu da se više koncentriše na konkretan problem koji treba da reši, stvari unikatne za projekat.

Slična stvar se desila i sa SQLom na ozbiljnim platformama (.NET, Java, Delphi...), a polako niču projekti koji portuju rešenja sa tih platformi (Propel je u suštini PHP verzija Torque projekta) ili osmišljavaju i implementiraju nova na "neozbiljnim" platformama.

---

Ne znam da li da pokazujem jedan jednostavan Rails primer pošto mislim da je kod njega iskorišćen jedan od lepših pristupa? ActiveRecord je stvarno lepo napravljen.

zextra 02. 02. 2006. 11:51

Off Topic: Retko dobra diskusija. thumbs up! :)

bluesman 02. 02. 2006. 12:05

Citat:

Originalno napisao degojs
Odustajem, jer mislim da ne razumes viewe uopste:

Ama covece taj query JESTE view.

Ajd sad da pitam: jesi li pravio view u nekoj bazi? Nisi. Da jesi, znao bi da je to sto si otkucao, taj query, isto ono sto bi otkucao u nekoj bazi i sacuvao tamo kao npr. "view1". I onda mozes recimo SELECT * FROM VIEW1 WHERE..

Inace, kod mene je 22:15, bice da si ti umoran :)

Možda ja ali možda i ti :). Naravno da znam šta su views, na to sam i mislio ali očigledno se ne razumemo. Hteo sam da upitam šta ti dobijaš time što definišeš posebno relacije da bi generisao view-ove na koje potrošiš više vremena, pa onda ih koristiš tako "definisane" u odnosu na jednostavno izvršenje querija. Ne vidim nikakvu uštedu.

Vidi, one jednostavne query-je ja obično nazivam "hleb i mleko". Zato sam i pravio klasu koja će da mi taj proces automatizuje. Sve što je iole komplikovanije (obično i gotovo isključivo su to SELECT) mora da se piše ručno. Ono što pokušavam da kažem da ne postoji način da se proces automatizuje, najbolje što možeš je poluautomatski, znači jednostavno - automatski, komplikovano - ručno. Samim tim pada u vodu cela priča o automatizmu čitavog procesa. A izvlačiti čitav arsena teške artiljerije zbog "hleba i mleka" po meni nije optimalno rešenje.

Pedja 02. 02. 2006. 12:19

bluesmane, mislim da bi morao svoje tvrdnje da potkrepis time sto ces tu tvoju biblioteku da stavis u attachment :D

degojs 02. 02. 2006. 14:29

Citat:

Hteo sam da upitam šta ti dobijaš time što definišeš posebno relacije da bi generisao view-ove na koje potrošiš više vremena, pa onda ih koristiš tako "definisane" u odnosu na jednostavno izvršenje querija. Ne vidim nikakvu uštedu.
Kako to definisem posebno relacije da bi generisao view-e?

bojan_bozovic 02. 02. 2006. 23:43

Do GPL 3. A onda cemo morati sami da pisemo kod.

bluesman 03. 02. 2006. 01:02

degojs: Ti si nekako uspeo da se ubaciš na pola priče, nisam siguran da znaš i history, stvar je u tome da su neki tvrdili kako ima je lakše da postupe otprilike ovako:

Naprave XML (ili neku alternativu) sa strukturom baze
Provuku taj XML kroz neku klasu koja im izgeneriše druge klase
Onda imaju sistem koji im omogućuje da ne pišu te osnovne querije
Zatim, za bilo šta ozbiljnije, imaju poseban sistem u kojem opet moraju da navedu tačne relacije u bazi, ključeve, posebne "view"-ove (ne ono na šta ti misliš), pa onda to tako opet provlače kroz neke scriptove koji ime opet generišu neke kodove koji im omogućavaju da se "ne zezaju sa mysql".

Po meni, svako radi kako mu odgovara, priča je o tome da to olakšava život. Ja tvrdim da je utrošeno vreme i energiju moglo efikasnije da se iskoristi, cela priča je samo o tome.

Znači ne pričamo o mogućnostima mysql, evo, prvi post je krenuo ovako:
Citat:

Jako se mnogo prica o portabilnosti koda sa jedne baze na drugu, ali nisam siguran koliko to prakticno ima znacaja? Da li vam se ikada desilo da ste naknadno morali da portujete neki web projekat sa jedne baze na drugu?
a pitanje koje je lajtmotiv je: Koje je vase misljenje o tome da li se isplati koristiti abstraction layere uopste?

uz direktno pitanje: "Kakva su vasa iskustva?"

Ne bih sada da ponavljam, ionako sam već nekoliko puta u ovoj temi, svoja iskustva po tom pitanju, kao i svoje stavove, samo podsećam na glavni tok.

degojs 03. 02. 2006. 01:54

Pa ja sam iz tog razloga i napisao u svojoj, cini mi se drugoj, poruci o cemu ne pricam (ORM i sta-ti-ja-znam-sta).

Dalje, ovo sto mi koristimo (MyGeneration (koji podrzava cini mi se i PHP) i jos jedan alatcic "in-house-made") omogucuje mnogo vise (i sutra ako bi trebali da promenimo bazu, a necemo, ne bi imali nikakvih problema - svoj kod ne bi morali da menjamo, znaci imamo apstrakciju!), ali niti nas je briga za to, niti nam pada na pamet..(jeste, nesto se suska da bi mogli da menjamo jednu bazu, ali o tom kad bude..)


E sad, sto ovaj tu jedan voli da mnogo prica o stvarima o kojima je verovatno samo citao.. kao da mi nismo culi za ORM, kao da i mi ne bi mogli da trubimo do zore.. Ali ja sam, kako rekoh, lepo napisao da o tome ne pricam.

A evo sta kazu na sql2Java stranici, komentarisu verovatno najpoznatiji i najpopularniji ORM alat na Javi - Hibernate:

Citat:

The point is that this kind of software is great, often technologically speaking they are damn great, but their learning curve are damn steep, and when an exception arise, you are damn lost ...
Meni se manji i laksi alati mnogo vise svidjaju, a za alatima kao sto je Hibernate jos nisam imao potrebe, jer jos nisam radio aplikaciju gde se krece sa druge strane (od objekata, a ne od baze).

Ilija Studen 03. 02. 2006. 05:39

Off Topic: degojs, dolaziš iz potpuno drugog "sveta".

Začudio bi se koliko PHP programera ne zna šta su ovakve biblioteke, da postoje, kako rade, da su odlično testirane i stabilne, koliko vremena štede itd itd. Samo uzmi činjenicu da većina još nije prešla ni na PHP5 gde se tek može pričati o pravom OOP. Svest većine PHP programera o patternima, naprednim OO konceptima itd je uglavnom jako ograničena... Ono što je u Javi potpuno normalno u PHPu je uglavnom novotarija i "preseravanje".

No, to je sad već potpuno drugačija priča.


Proces o kome blues priča je nasleđen od Java ekipe pošto je prvi Propel bio čist port (čovek nije želeo da izmišlja toplu vodu). Odluku da se koristi XML kao jezik za opisivanje u neku ruku i odobravam, ali potreba da se korist build alat (PHP port Anta) je skroz debilna po meni. Možda je u Javi normalno koristi build alate, ali u PHPu definitivno nije...

To na stranu, način na koji ga je blues opisao zvuči kao da je to pola sata posla, što je daleko od istine. Sam proces se može podešavati tako da se izmene rade brže nego što neko može da otkuca jedan malo složeniji upit...

ivanhoe 03. 02. 2006. 06:19

Citat:

Originalno napisao Ilija Studen
Samo želim da istaknem da se programiranje razvija u tom smeru da skraćuje vreme koje programer treba da uloži u prljav, vodoinstalaterski posao (jer SQL to uglavnom jeste) i omogući mu da se više koncentriše na konkretan problem koji treba da reši, stvari unikatne za projekat.

Slična stvar se desila i sa SQLom na ozbiljnim platformama (.NET, Java, Delphi...), a polako niču projekti koji portuju rešenja sa tih platformi (Propel je u suštini PHP verzija Torque projekta) ili osmišljavaju i implementiraju nova na "neozbiljnim" platformama.

Ja sam ranije radio dosta u Delphiju (a cini mi se da se i Pedje secam sa yu.prog.delphi newsa? ) i apsolutno podrzavam taj vid automatizacije koji recimo Delphi pruza. Dovuces par komponenti, popunis par propertija i imas npr potpuno funkcionalni data-grid. Dajte mi to za php i bicu srecan kao kuce, pa makar morao da pozivam objekte da uradim SELECT *... :)

Ali Delphi ti takodje nudi mogucnost i da stvari radis na vrlo niskom nivou, ako treba i asembler da koristis... autori ovih DB klasa koje sam ja imao prilike da vidim ne omogucavaju low-level alternativu i to je po meni problem..

Nije samo da je ponekad naprosto brze i lakse otkucati par sql komandi... ponekad (cak prilicno cesto) je prakticno neophodno iskoristiti neku specificnu foru baze koja zahteva kontrolu koju pruza SQL...

Uzmi recimo "SELECT SQL_CALC_FOUND_ROWS ..." i "SELECT FOUND_ROWS()". Jako korisna stvar da izbegnes dupli upit na bazi kad koristis limit da prikazes samo deo rezultata (paged results), sto ce reci prakticno na svakoj strani gde se nesto lista iz baze. Sa pre-generisanim klasama si osudjen na 2 upita, jedan count(*) i jedan sa limitom...

Ili mozda i kriticnije, cinjenica da kod mysql-a ponekad zavisi koji ce index da se upotrebi (i da li ce se uopste upotrebiti) od redosleda uslova u WHERE klauzuli (to je po meni zapravo bug u query optimizeru, ali sta da se radi..). Kako ces to da kontrolises, ako ti klasa to pravi automatski i jos ti prepakuje tvoj SQL da bude kompatibilan sa 20 drugih baza?


to je jedna vrsta problema, mozda ne toliko bitna za generalnu publiku, jedan upit ili 5 tesko da je bitno, recimo prosecna strana bloga u Wordpressu uradi 30+ upita i opet ga svi srecno koriste (ukljucujuci i mene jer sam lenj..)

drugi ocigledniji problem (koji i mene muci priznajem) je naravno da je potrebno promeniti nacin razmisljanja o bazi za 90 stepeni, sto bas i nije jednostavno ako radis na odredjeni nacin godinama... za mene je SQL najprirodniji nacin obracanja bazi, jer sam tako naucio.. Da sam prethodno radio sa OO pristupom bazi (sto cenim da je po godinama slucaj sa Ilijom) verovatno bi mi se to cinilo kao super stvar u odnosu na kuckanje SQL-a... navika je mnogo gadna stvar...

ja za sada jos uvek skidam i isprobavam razna resenja, cekam nesto sto ce da napravi kompromis izmedju lakoce rada i mogucnosti...we'll see...;)

bojan_bozovic 03. 02. 2006. 07:51

Nisam koristio DB abstractiol layer. SQL? Pa to je jednostavno! Ne znam, ne volim da komplikujem kad moze jednostavno. BTW i performanse su mi bitne, sto se debagovanja SQL tice, samo udrim $querydump=$querydump." ". $query; pri svakom upitu i na kraju echo $querydump i imam i vise debagovanja nego sto mi treba ;) Ne znam zasto da se mucim sa ko zna koliko komplikovanom bibliotekom za vrlo jednostavne stvari. Mozda, da moram da migriram na drugu bazu, ali je to sigurno vrlo pipavo, i opet bih zeleo da to redim rucno. Nemam onda tudji (citaj: bagovit) kod izmedju. Gresim li ja nesto ili je pravjenje XML za DB abstraction lejer isto sto i rucno dizajniranje baze? BTW mislim da je bolje da covek dizajnira bazu nego da imas 80 tabela u potpuno normalizovanom stanju ili sta vec glupi kompjuter moze da napravi. Kompjuter ne poseduje inteligenciju da me zameni u poslu, pa dali sam pravim CREATE upit za tabelu ili to pisem u XML, isto bi trebalo da bude.

PS: Kad moj kod zabrlja, bar znam sta je i gde je. Sa tudjim kodom nije tako, jer nemam dokumentaciju za kod.

degojs 03. 02. 2006. 07:58

Poceli smo i da se ispovedamo, a :)

Citat:

ivanhoe:
Nije samo da je ponekad naprosto brze i lakse otkucati par sql komandi... ponekad (cak prilicno cesto) je prakticno neophodno iskoristiti neku specificnu foru baze koja zahteva kontrolu koju pruza SQL...

Uzmi recimo "SELECT SQL_CALC_FOUND_ROWS ..." i "SELECT FOUND_ROWS()". Jako korisna stvar da izbegnes dupli upit na bazi kad koristis limit da prikazes samo deo rezultata (paged results), sto ce reci prakticno na svakoj strani gde se nesto lista iz baze. Sa pre-generisanim klasama si osudjen na 2 upita, jedan count(*) i jedan sa limitom...
Nije to problem. Svaki bolji generator daje, je li, sors kod. A ti ga posle izmeni kako hoces. Jos bolje, izmeni sablon, tako da u jednom cugu dobijes rezultate vise upita.
Npr. Java to podrzava bez problema. Vise upita, jedna komunikacija sa bazom, dobijes kolekciju ResultSet-a nazad. Nema problema.

Citat:

Kako ces to da kontrolises, ako ti klasa to pravi automatski i jos ti prepakuje tvoj SQL da bude kompatibilan sa 20 drugih baza?
Pazi, ovo sto mi koristimo ne daje kod koji moze da radi sa 20 baza "istovremeno", nego kod koji radi sa jednom bazom. Ali ti mozes lako da kazes hocu sad kod za tu drugu bazu pa za 30 sekundi, eto ti koda (optimizovanog) za drugu bazu. Stvar je da kod svoje aplikacije ne moras da menjas.

Citat:

drugi ocigledniji problem (koji i mene muci priznajem) je naravno da je potrebno promeniti nacin razmisljanja o bazi za 90 stepeni, sto bas i nije jednostavno ako radis na odredjeni nacin godinama... za mene je SQL najprirodniji nacin obracanja bazi, jer sam tako naucio.. Da sam prethodno radio sa OO pristupom bazi (sto cenim da je po godinama slucaj sa Ilijom) verovatno bi mi se to cinilo kao super stvar u odnosu na kuckanje SQL-a... navika je mnogo gadna stvar...
Ajd sad kad vec pricamo..

Nije tu samo to problem. Kod takvog pristupa dosta vremena ode na pocetku na dizajniranje klasa i odnosa medju njima, interfejsi, nasledjivanje.. a to znaci da vidljivih rezultata nema tako brzo. A samim tim ako sve to moras da radis skoro je sigurno da je veliki projekat u pitanju. Pitanje je da li tvoj projekat uopste spada u tu kategoriju.

Sa druge strane, bazu je uglavnom lako uraditi (pogotovo ako ti bluesman ne radi normalizaciju nakon sto si ti normalizovao pa denormalizovao istu ;) ) i mozes da krenes sa front-endom (pogotovo ako imas dobar alat koji ce da ti ustedi sav vodoinstalaterski rad na relaciji front-end <-> baza). I rezultati, makar rada u toku, su brzo vidljivi, a to se cesto jos i trazi.

Mozda ce da bude drugacije kad jos i baze budu podrazumevano nudile tipove podataka a la java.Object, net.Object, php.Object i slicno..

"Doh!" sto bi rekao dinke, ovaj, Homer Simpson.

Pedja 03. 02. 2006. 14:50

Citat:

ivanhoe:

Ja sam ranije radio dosta u Delphiju (a cini mi se da se i Pedje secam sa yu.prog.delphi newsa? ) i apsolutno podrzavam taj vid automatizacije koji recimo Delphi pruza. Dovuces par komponenti, popunis par propertija i imas npr potpuno funkcionalni data-grid. Dajte mi to za php i bicu srecan kao kuce, pa makar morao da pozivam objekte da uradim SELECT *...
Eh Delphi... moram priznati da je su Turbo Pascal i Delphi nesto ponajbolje sto se dogodilo u mojoj programerskoj karijeri i principe na koje sam navikao u njima primenjujem gde god stignem.

Pogodio si me u zicu, jer je i moj ideal da u PHP imam alat koji omogucava da radim nesto sa tom dozom prakticnosti koju Delphi pruza a uveren sam da kada bi se napravile klase koje funkcionisu na principu Delphijevih objekata, to bi bila odlicna stvar. Zamisli samo tu liniju: TTable|TQuery -> TDataSource -> TDBGrid u PHP-u... pa eventi, koji bi u stvari mogli biti mnogo mocniji, jer su skriptovi, a ne prekompajliran kod, kao u Delphi-ju.

Meni se inace cini sasvim ok da koristim neki vizuelni alat kao sto je DBDesigner4 u kome opisem model baze, a onda tako definisan model koristim da izgenerisem osnovni wraper kod koji mi mora olaksati rad sa tim modelom. Ako bih morao rucno da pisem XML koji opisuje model, pa da, to bi bio sustinski neprihvatljiv pristup.


Nego...

Ova nadasve korisna i interesantna diskusija polako prelazi u nadmudrivanje i teoretisanje pa gubi ostricu.

Sta mislite da uzmemo neki zamisljeni poluslozeni model podataka i da malo prakticno i konkretno poradimo na razlicitim pristupima u apstrakciji?

Ilija Studen 03. 02. 2006. 17:05

Citat:

Originalno napisao Pedja
Meni se inace cini sasvim ok da koristim neki vizuelni alat kao sto je DBDesigner4 u kome opisem model baze, a onda tako definisan model koristim da izgenerisem osnovni wraper kod koji mi mora olaksati rad sa tim modelom. Ako bih morao rucno da pisem XML koji opisuje model, pa da, to bi bio sustinski neprihvatljiv pristup.

DBDesigner4 čuva šemu u XML obliku tako da se taj dokument uz pomoć jednostavnog stila može transformisati u Propel XML fajl. Više o tome...

Propel XML fajl se može generisati i na osnovu postojeće baze podataka. Potrebno je koristiti creole target... Samom fajlu su kasnije potrebne sitnije dorade, ali je i to bolje nego pisati ga od nule. Na žalost ne mogu da pristupim Propel sajtu tako da ne mogu da linkujem na tutorijal.

PS: Ja se izvinjavam ako konkretizujem previše. Ovde su uglavnom PHP programeri tako da mislim da ove informacije i linkovi nisu na odmet. Ako ništa, a ono bar da se ljudi koje interesuju upoznaju sa stvarima koje ove biblioteke mogu jer često mogu više nego što se na prvi pogled čini ;)

ivanhoe 03. 02. 2006. 19:31

Off Topic: E bas je dobar ovaj DBDesigner4, nisam ga do sad nikad koristio..

a jel ima on neku caku da se polju u tabeli dodeli komentar (da ne jurim po helpu)

Pedja 03. 02. 2006. 23:23

U verziji koju korsitim jedno od polja koja mozes da popunis prilikom definisanja polja tabele je i komentar.

ivanhoe 05. 02. 2006. 05:30

evo jedne zanimljive (bar meni) price na ovu temu na koju sam slucajno naleteo trazeci nesto peto na sitepointu (da ne ispadne da sam opsednut bazama :P ):

http://www.sitepoint.com/forums/prin...t=82885&pp=200

degojs 05. 02. 2006. 06:25

Ajoj, al je taj što je to pisao blesav..

Citat:

So if I use database abstracion and write my application for MySQL and then later want to switch to PostgreSQL or Oracle, although I won't have to change most of the method calls in my scripts, I will still have to change almost all of the SQL queries!
Priča o apstrakciji a onda kaže da će da menja SQL kverije. Pa kakvi SQL upiti ako koristiš upravo apstrakciju? Pa on ne razume uopšte ni pola priče.. Koja glupost. Pa ti sistemu treba da kažeš koju bazu koristiš da bi on mogao da koristi kod specifičan za tu bazu, a ne.. da abstraction layer nekom magijom ima SQL kod koji radi na svim bazama. Svašta. Već sam napisao pre, može da se koristi Factory dp.

Dalje nisam ni čitao.

Pedja 05. 02. 2006. 11:45

Trebao si jos malo da citas :) Ono o cemu covek pise ima dosta rezona a mi bas pomenusmo ovde Delphi jer je to njegov rezon i pokazao se veoma mocan i praktican.

Evo cemu se radi, napravis osnovnu klasu koja obezbedjuje uopstene mehanizme za rad sa bazom od kojih su vecina smao definisani ali ne i implementirani.

Onda pravis klasu koja radi sa odredjenom bazom tako sto nasledis osnovnu klasu, obezbedis funkcionalnost za definisane metode a mozes da je prosiris i svojim.

Mozes da napravis i klasu za neku drugu bazu na isti nacin, tako sto nasledis osnovnu, das joj funcionalnost i prosiris je.

Neko sasvim treci, moze da napravi klasu za neku sasvim trecu bazu tako sto ce narpaviti novukalsu nasledjujuci osnovnu.

Osnovna prenost je sto su sve te klase medjusobno kompatibilne, a promena podrzane baze se moze svesti na to da umesto jedne, koristis drugu klasu. naranvo, i dalej ostaje ogranicenje custom SQL upita, koji se ni na koji nacin ne mogu tek tako biti automatski portovani na drugu bazu.

ivanhoe 05. 02. 2006. 11:52

Citat:

Originalno napisao degojs
Ajoj, al je taj što je to pisao blesav..



Priča o apstrakciji a onda kaže da će da menja SQL kverije. Pa kakvi SQL upiti ako koristiš upravo apstrakciju? Pa on ne razume uopšte ni pola priče.. Koja glupost. Pa ti sistemu treba da kažeš koju bazu koristiš da bi on mogao da koristi kod specifičan za tu bazu, a ne.. da abstraction layer nekom magijom ima SQL kod koji radi na svim bazama. Svašta. Već sam napisao pre, može da se koristi Factory dp.

Dalje nisam ni čitao.


Covek prica o Pear: DB i AdoDB, najpopularnijim abstraction layerima za PHP, i u jednom i u drugom se pisu SQL queriji direktno... tako da ne prica on gluposti nego ti ne znas kako se to radi u php-u...

Da si procitao ceo text video bi da se prica o ideji da je (po njemu) pogresno bazu asptrakovati tabelu po tabelu, ili query po query, nego treba apstrakcija da bude zasnovana na prirodi entiteta sa kojim radis, tipa imas recimo klasu User i sve sa njom radis, a ne zanima te da li userove podatke cuvas u jednoj ili 5 tabela, to je pitanje implementacije same klase i zavisi, izmedju ostalog i od tipa baze...

to je u stvari ista fora kao da imas View u bazi koji ti joinuje sve podatke za Usera, pa sa njim radis...tebe ne zanima odakle ti podaci dolaze u View, samo te interesuje koje se polje kako zove....

Ilija Studen 05. 02. 2006. 13:16

Postoji velika razlika između apstrakcije pristupa bazi i apstrakcije pristupa podacima. Ljudi kada govore o apstrakcionim slojevima (PHP svet) obično misle na ovo prvo, a trebalo bi da misle na ovo drugo.

PHP kôd:

$conn get_connection('mysql');
if(!
$conn->connect('localhost''root''''test')) die('Ups!');
$result $conn->execute('SELECT * FROM `products`'); 

Primer sam lupio iz glave, ali ovo je nešto što većina PHP developera smatra apstrakcijom (i što degojsu izgleda non stop promiče). To je daleko od prave apstrakcije. Samo je defininisan API za komunikaciju sa više različitih baza i par pomoćnih metoda (izvuci sve podatke iz rezultata kao niz nizova i sl).

Prava apstrakcija bi bilo nešto slično ovome:

PHP kôd:

$user = new User();
$user->setUsername('root');
$user->setPassword('***');
$user->setEmail('mail@somebody.com');
try {
  
$user->save();
} catch(
Exception $e) {
  die(
$e->getMessage());


Da li ja znam šta će se desiti? Znam: novi korisnik će biti kreiran sa zadatim podacima. Da li znam gde će i kako podaci biti sačuvani? Ne nužno... To može biti baza, može biti fajl, može biti poslat zahtev nekoj drugoj aplikaciji na drugom računaru da doda korisnika... Uostalom, ne zanima me. Ako nešto pođe na loše biću obavešten o tome.

OK, dodato. Šta dalje?

PHP kôd:

// Load...
$user Users::load(12);

// Update
$user->setPassword('*******');
try {
  
$user->save();
} catch(
Exception $e) {
  die(
'Greška pri izmeni. Razlog: ' $e->getMessage());
}

// Delete
try {
  
$user->delete();
} catch(
Exception $e) {
  die(
'Greška pri brianju. Razlog: ' $e->getMessage());
}

die(
'Korisnik uspešno orbisan!'); 

Jednostavno se u aplikaciji ne brinemo o načinima na koji se podaci skladište već o samom baratanju njima.

PS: Ja stvarno ne razumem zašto ljudi toliko ističu prebacivanje sa jedne na durgu platformu kao osnovnu prednost apstrakcionih slojeva. Taj slučaj je toliko redak da je to nešto što bi trebalo da se nalazi negde pri dnu features liste. Skroz je OK imati tu mogućnost, ali definitivno je ne treba toliko isticati. Ono što je meni najvažnije kod njih je što te oslobađaju vodoinstalaterskog posla na relaciji aplikacija-baza i mogućnost da se u aplikaciji posvetim samom baratanju podacima.

PPS: Sva tri primera su iz glave i služe samo da ilustruju kompletnu priču kroz kod.

zextra 05. 02. 2006. 15:41

Verovatno zbog nepoznavanja terminologije, ja takav nacin rada nazivam "modularni pristup", bas iz razloga sto meni, recimo, sloj za interakciju sa bazom predstavlja poseban modul, koji se automatski ucitava ako ja iz nekog treceg modula pozovem modul User (jer sticajem okolnosti korisnike cuvam u mysql bazi), a koje module on koristi da bi obavio posao apsolutno me se ne tice - koristim njegove metode i tako za svaki pojedinacan modul.

Mislim da se mogucnost transparentne promene db engine-a forsira pre svega sto omogucava developerima koji koriste razlicite baze da koriste isti abstraction layer na potpuno isti nacin kao da koriste bilo koju od podrzanih baza, dakle iz razloga popularizacije istog. A to sto programer koji koristi pgsql verovatno nikad nece hteti da koristi recimo sqlite... Pa, bitno je da ima i tu mogucnost...

Ilija Studen 05. 02. 2006. 15:50

Citat:

Originalno napisao zextra
Mislim da se mogucnost transparentne promene db engine-a forsira pre svega sto omogucava developerima koji koriste razlicite baze da koriste isti abstraction layer na potpuno isti nacin kao da koriste bilo koju od podrzanih baza, dakle iz razloga popularizacije istog.

Slažem se, ali preterano isticanje te mogućnosti je dovelo do toga da dobar deo programera gleda na to kao njihovu jedinu svrhu...

zextra 05. 02. 2006. 16:06

I never said it's a Good Thing(tm) :)

degojs 05. 02. 2006. 16:19

Citat:

ivanhoe
Covek prica o Pear: DB i AdoDB, najpopularnijim abstraction layerima za PHP, i u jednom i u drugom se pisu SQL queriji direktno... tako da ne prica on gluposti nego ti ne znas kako se to radi u php-u...
Dobri su to layeri kad moraš da pišeš SQL... Nebitno da li je PHP ili nešto drugo.

Citat:

Da si procitao ceo text video bi da se prica o ideji da je (po njemu) pogresno bazu asptrakovati tabelu po tabelu, ili query po query, nego treba apstrakcija da bude zasnovana na prirodi entiteta sa kojim radis, tipa imas recimo klasu User i sve sa njom radis, a ne zanima te da li userove podatke cuvas u jednoj ili 5 tabela, to je pitanje implementacije same klase i zavisi, izmedju ostalog i od tipa baze...
Otkrio je toplu vodu. To su ORM alati (koje smo već pomenuli i malo pojasnili) i da, polazi se sa druge strane. Nisam siguran da to treba bilo kome ko pravi klasičan (manji) sajt. Tamo gde je veće i kompleksnije, tamo PHP niko ne koristi..

degojs 05. 02. 2006. 16:51

Citat:

zextra
A to sto programer koji koristi pgsql verovatno nikad nece hteti da koristi recimo sqlite... Pa, bitno je da ima i tu mogucnost...
Zavisi o cemu je rec.

Uzmi bilo koji veci sistem i jednostavno je uvek slucaj da imas vise baza sa kojima moras da radis, jer su pre npr. 10 godina stavili jednu bazu, pa su pre 5 kupili drugu, pa trecu.. I ne, nisu bili pametni da kupe uvek bazu istog proizvodjaca, iz mnogih razloga.

Znas li kolika je usteda u vremenu kad ne moras da se bakces u svom kodu sa svakom od tih baza posebno? I plus, kod je konzistentan, sto je jako lepo za odrzavanje.

A ako apsolutno nemas potrebu za tim, onda ne treba ni da gledas ove alate. Kao i uvek - ne guraj nesto gde ti ne treba, a kad ti zatreba - znaces sam vrlo dobro.

ivanhoe 05. 02. 2006. 20:59

Citat:

Originalno napisao degojs
Tamo gde je veće i kompleksnije, tamo PHP niko ne koristi..

uf, sad ga malo pretera...

bluesman 05. 02. 2006. 21:44

Veće i kompleksnije? :) To je tema sada za drugu raspravu :)

Ilija Studen 05. 02. 2006. 21:47

Off Topic: Da, ovu ako su web aplikacije u pitanju (na DTP uglavnom jesu).

zextra 05. 02. 2006. 21:48

Citat:

Uzmi bilo koji veci sistem i jednostavno je uvek slucaj da imas vise baza sa kojima moras da radis, jer su pre npr. 10 godina stavili jednu bazu, pa su pre 5 kupili drugu, pa trecu.. I ne, nisu bili pametni da kupe uvek bazu istog proizvodjaca, iz mnogih razloga.
U pravu si, ali _verujem_ da se to toliko "cesto" desava da ces opet imati par mogucih resenja datog problema... Jedno od njih ce sigurno biti i upotreba abstraction layera.

Nego, zasto uporno branis stav korporacijskih okruzenja gde je kompleksnost svakodnevna stvar? Jasno je da postoje slucajevi kada ovakvi alati sijaju punim sjajem, ali sam nekako stekao utisak da se ovde uglavnom prica o nekim malo-do-srednje kompleksnim problemima i projektima. Nemoj shvatiti ovo kao napad ili uvredu, samo te pitam zasto stalno branis taj stav.

degojs 05. 02. 2006. 21:53

Pa ne, naprotiv, lepo sam napisao:

Citat:

A ako apsolutno nemas potrebu za tim, onda ne treba ni da gledas ove alate. Kao i uvek - ne guraj nesto gde ti ne treba, a kad ti zatreba - znaces sam vrlo dobro.
A zasto branim taj stav?

Citat:

Nemoj shvatiti ovo kao napad ili uvredu, samo te pitam zasto stalno branis taj stav.
Zato sto ih ima koji provlace pricu tipa "kome to treba" samo zato sto njima nije zatrebalo. A ako im zatreba, sami ce da potraze to isto.. itd. Tako se valjda i doslo do tih alata, sto je neko rekao, majku mu, moze li ovo nekako lakse? :O


Vreme je GMT +2. Trenutno vreme je 07:46.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.