Posted: 01.09.2008 23:18 Post subject: Ajmo malo ozbiljnije :)
Stvarno nisam znao kako pametnije nazvat temu, tak da j**i ga
Ok, imam jednu ideju koja mi se vrti po glavi vec duze vrijeme, ali me zanima koliko je smislena u teoriji, a uz to mozda ova tema potakne malo ozbiljnije rasprave o web programiranju na ovom podforumu, cega vec duze vrijeme fali.
Ne znam koliko se od vas bavi razvijanjem u ruby ekosistemu, ali postoji jedna stvar koja je jako kul i sexy a to je rSpec story runner (ili cucumber), koja se trenutno koristi za testiranje koda, a kojuubi ja volio probati iskoristit za generiranje koda.
Ideja je da napišeš "story" o tome od čega se site/projekt sastoji, znači definiranje domain/application dijela aplikacije u tekstualnom obliku. Nakon toga, parser bi iz toga generirao modele, napravio nekakav pametan auto discovery relationshipa i iz svega toga generirao bazican REST server koji bi zapravo bio pametniji interface prema bazi ili repositoriju podataka (idealno bi bilo imati plugable backende za razne baze ili tipove persistent storagea (mysql, bigtable, simpledb ili couchdb...svejedno).
Taj REST server bi sadrzavao svu bazicnu application/bussines/domain logiku, ukljucujuci validaciju, generiranje XML ili JSON responsea, routing i sve ostalo, i bio bi zasebni entitet kojem bi pristupali preko REST api-a i frontend (site) i backend (admin aplikacija)
Trenutno mi je cilj napraviti taj generator za PHP paltformu, pa me zanima jel ima ko kakvu pametnu ideju ili kritiku.
Note: ovo je trenutno čisti vaporware, i postoji velika vjerojatnost da će i ostati, ali stvarno mi treba neki offprojekt na kojem ću zapravo programirati neki ku**c
_________________ Just your average eccentric programmer.
Joined: 02 Apr 2004 Posts: 692 Location: Around & about
Posted: 02.09.2008 02:42 Post subject:
Da, prema tako nečemu smo se mi namjerili usmjeriti razvoj treće verzije Butlera.
Cakephp je inicijalno bio neki "port RoR-a na PHP" ali je solidno razvijen u svom originalnom smjeru. Ne znam da li si vidio no njegov "baker" aplikacija je super stvar, pogotovo ako se namjeriš izmjeniti template i proširiti ga sa framework na application razinu koda koji producira.
Opisi su zajebana stvar, mislim da oni nisu toliko bitni, iliti, možeš kroz konzolu (baker) u 5 minuta izdefinirati modele i odnose među njima. Samo ju treba još natjerati da radi taj neki REST-an, apijevski, modularan kod i imaš nešto premoćno.
Moja teorija je da se može to postići ako staviš na papir, izdefiniraš sve moguće slučaje vrsta podataka i funkcija koje ti mogu trebati, prepoznaš nekih n patterna i onda ih složiš kao dodatne template (cijeli mvc za front i back u kompletu kao template)... poslije samo štancaš jedan od tih...
možebit kenjam, al ako budem dovoljno uporan, utrošit ćemo mi neko vrijeme ganjajući takav nekakav gral u idućem doglednom periodu vremena.
Al tema je ko prstom u govno u ovo doba...
_________________ The quest for certainty blocks the search for meaning. Uncertainty is the very condition to impel a man to unfold his powers.
http://origami.hr
Hm, htio bi izbjeci definiranje modela u klasicnom smislu, Zato sto jedan resource se moze siriti preko vise modela (SQL tablica). Zato bi htio taj dio napraviti higher level tako da se pristupa resourceu, a ne direktno modelu.
_________________ Just your average eccentric programmer.
Do prije par mijeseci smo aktivno koristili cakephp, ali sada smo razvili svoj framework XER (čita se ekser - PHP i JS framework) , uskoro će izaći prvi veći portal razvijen isključivo sa XER-om).
Također planiramo da ga izbacimo kao open source, a zašto je bolji od trenutne konkurencije:
- Više jezičnost podržana u jezgru frameworka (vezano za više jezičnost, možete definisati ako nema prevoda na odabranom jeziku, dali da vam vraća osnovnu verziju ili ne)
- Validacija se podesi na kontroleru i automatski se validira i na klijent i na server strani.
- Svi pozivi koji idu reko XER.Ajax-a se registriraju i automatski se vraća samo osnovni izgled (bez layout-a), a ukoliko se JS isključi na browseru, poziv se normalno izvršava i opet su informacije dostupne.
- Način na koji su prevodi riješeni (što se tiče baze) je optimiziraniji već na ostalim frameworcima na kojima sam radio.
- Sigurnost je riješena na jednostavan i siguran način, na grupi korisnika ili korisniku definirate koje akcije smije izvršavati a koje ne.
- Dobro riješene rute
- Prevodom naziva modula i akcije se automatski prevode i rute, tako da ako imate articles modul gdje se nalazi akcija view prevodom kontrolera dobijete
hr/vijesti/clanak
en/articles/view
odnosno ako vam stranica nije više jezična, onda za podešeni jezik i za prevod koji želite dobijete rutu bez prefix-a jezika
vijesti/clanak/naziv-clanka
odnosno ako želite da ne stoji ni vijesti ispred možete imati
clanak/naziv-clanka
Napravljen je i XER.ORM tako da se insert i updatei podataka u bazu radi na isti način $this->Model->save($objekt);
ako u objektu pk ima vrijednost onda je update, ako ne onda je insert po default-u
Čitanje podataka iz baze i pretvaranje u objekat je dosta jednstavno isto: $obj = $this->Model->find($uslov);
Sve ovo opet daje / spašava podatke na osnovu odabranog jezika.
+ cijeli framework je težak 200KB - php 160, js 40 i oboje je napisano Objektno orijentisano.
- Možda sam otišao od teme, al mislim da je dobro da sam i ovo predstavio
_________________ There is no style definition for good music!
Joined: 02 Apr 2004 Posts: 692 Location: Around & about
Posted: 02.09.2008 10:43 Post subject:
@fun.ky:
Da, ne zvuči loše, no sve to se može s cakeom dobit, a opet moći koristit masu novih stvari koje izlaze za cake.
Inače, većinu tih stvari smo mi izbrijali na cakeu na cms razini.
No, ovdje je više riječ o nekom ekstremno brzom i kvalitetnom razvoju aplikacija iliti apstraktnijem načinu proizvodnje koda, ne o ajax funkcionalnostima koje podržava takav kod.
@retro_one:
Čuj, to se može fino i preko modela, samo ga definiraš bolje. A i više mi zvuči da je direktan pristup sadržaju lower level nego higher level. Ili nisam dobro shvatio što misliš pod "direktan pristup resourceu"?
Gdje bi vršio validaciju (automatsku validaciju), održavanje relacija među tablicama i sl.?
_________________ The quest for certainty blocks the search for meaning. Uncertainty is the very condition to impel a man to unfold his powers.
http://origami.hr
Validacija se radi na modelu naravno, ali ono na sto sam mislio je da treba izbjegnut 1:1 mapiranje resourcea na tablicu (mislim da je i Damien Katz - autor CouchDB-a pisao o tome), zato što resource može preko relacija (has_one, has_many) postojati u više tablica.
Tu dolazi onaj dio o pluggable backendima prema persistent storageu, tebi se ne bi ništa na REST interfaceu promijeniti ako se prebacis sa mysqla na couchdb ili neki drugi persistent storage.
_________________ Just your average eccentric programmer.
Joined: 02 Apr 2004 Posts: 692 Location: Around & about
Posted: 02.09.2008 13:41 Post subject:
Ti si probao cakephp koristit?
_________________ The quest for certainty blocks the search for meaning. Uncertainty is the very condition to impel a man to unfold his powers.
http://origami.hr
Jesam, ali dosta davno, i imao sam osjecaj da previse pokusavaju glumiti ruby kroz php, ne znam mozda su se stvari promijenile sad.
Ali, totalno si krivo shvatio smisao ovoga. Ovo ne bi bio full stack MVC framework, nego bi bio nabrijaniji Model layer. Znaci oces pristupati tome iz curla ili iz Cake php aplikacije, meni svejedno. Htio bi imati sav domain logic na jednom mjestu, kojem se moze pristupiti iskljucivo preko REST apija. Isto tako bi napravit high level fieldove koji bi se mapirali u bazi na osnovne fieldove (integer, varchar ili datetime), ali koji bi uz to imali zakacen nekakav behavior (npr. PhoneNumber field, koji radi validaciju formata automatski). Generator bi napravio i client side i server side validaciju (počeo sam raditi na JS libraryu koji validaciju radi na objektu, a ne na fieldovima, ako te zanima mogu staviti url). View dio ne bi postojao, nego bi se za to brinula aplikacija koja bi imala svrhu "presentera".
Takav pristup bi omogućio potpun separation of concerns, i omogućio bi neograničenom broju razlicitih aplikacija da pristupa istom domain modelu.
Naravno, treba vidjeti kako bi to funkcioniralo u praksi, ali cini mi se kao zanimljiva ideja za istrazivanje
_________________ Just your average eccentric programmer.
Joined: 02 Apr 2004 Posts: 692 Location: Around & about
Posted: 02.09.2008 15:08 Post subject:
Jesu krenuli s tom spikom, da, ali su dosta stvari veća napravili i inercijom su otišli dosta dalje već od ror-a.
Nisam ni shvatio tvoju ideju kao mvc framework, samo mi je malo nejasno s čime/kako bi implementirao takav model, iako zvuči odlično. Zvuči mi kao da će tek onda trebati još razviti masu ostalih stvari koje bi vrtile ostalu logiku/prezentaciju a koje bi mogle efikasno surađivati s model layerom. Malo je to sve skupa kompleksno za razgovor bez pive i pljuge...
JS validacija je zakon za podić UI na neku bolju user-friendly razinu, ali opet, kako raditi tu istu validaciju kad nema JS-a? Da li bi složio da se validira na model-layeru na serveru prema predefiniranim pravilima ovisno o vrsti high-level fielda, pa da se JS nakači na to i napravi istu stvar samo direktno u browseru, ili?
Baci link, da se igramoooo.... baš me zanima kako radi... thnx
_________________ The quest for certainty blocks the search for meaning. Uncertainty is the very condition to impel a man to unfold his powers.
http://origami.hr
....JS validacija je zakon za podić UI na neku bolju user-friendly razinu, ali opet, kako raditi tu istu validaciju kad nema JS-a? Da li bi složio da se validira na model-layeru na serveru prema predefiniranim pravilima ovisno o vrsti high-level fielda, pa da se JS nakači na to i napravi istu stvar samo direktno u browseru, ili? ....
To je već što sam naveo da imamo u frameworku i radi baš na taj način (kada ima js onda ide na klijent strani, a na server strani se izvršava svakako, korisniku je prikazana na isti način informacija, bez obzirao išao na server po to ili ne)
Znači šta sada vi želite ovdje, nešto što će generisati code, ili Bussines logic layer koji će vrtiti svu logiku aplikacije i opsluživati presenter sa tim informacijama...
_________________ There is no style definition for good music!
....JS validacija je zakon za podić UI na neku bolju user-friendly razinu, ali opet, kako raditi tu istu validaciju kad nema JS-a? Da li bi složio da se validira na model-layeru na serveru prema predefiniranim pravilima ovisno o vrsti high-level fielda, pa da se JS nakači na to i napravi istu stvar samo direktno u browseru, ili? ....
To je već što sam naveo da imamo u frameworku i radi baš na taj način (kada ima js onda ide na klijent strani, a na server strani se izvršava svakako, korisniku je prikazana na isti način informacija, bez obzirao išao na server po to ili ne)
Znači šta sada vi želite ovdje, nešto što će generisati code, ili Bussines logic layer koji će vrtiti svu logiku aplikacije i opsluživati presenter sa tim informacijama...
Da, vidio sam, ali to je samo mali dio funkcionalnosti koji me zanima, to je vise convenience nego killer feature
Ako nije problem da objasnis na koji nacin to rjesavate, jel imate nekakav convert iz php u js ili što? Kako riješavate kompleksniju validaciju, npr. ako je ispunjen parametar "A", validiraj parametar "B", koji je u suprotnom optional field?
_________________ Just your average eccentric programmer.
Ako nije problem da objasnis na koji nacin to rjesavate, jel imate nekakav convert iz php u js ili što? Kako riješavate kompleksniju validaciju, npr. ako je ispunjen parametar "A", validiraj parametar "B", koji je u suprotnom optional field?
Kada kreiramo neko input polje koje treba validirati (inače za kreiranje svih elemenata forme koristimo svoje helper-e (klase koje pomažu za kreiranje form elementa, rada sa slikama i sl).
Iz primjera se najbolje uči, pa evo primjera kako to izgleda kod nas
Code:
echo $Html->input('user_email', array('error' => array('msg' => 'Poruka koju zelite da prikazete prilikom validacije'))
msg ispisiva poruku bez obzira o kojoj vrsti se validacije radi, a ako na polju ima više vrsta validacije i želite za svaku definisati poruku, onda ide msg-valid-email => 'Poruka', msg-not-empty => 'poruka' itd...
ukoliko je u kontroleru podešeno da se radi validacija, onda se prilikom ispisivanja input polja kreira i poziv na JS koji će validirati taj element.
Što opet provjerava jel zadovoljen validate_if uslov i ako jeste onda tek da vrši validaciju el_a inače ga ne provjerava.
Komunikaciju između JS i PHP validacije vršimo na 2 načina. Prvi je jednostavniji, gdje koristimo isit regex na obje strane (definisano u php-u kao konstanta recimo
A u drugom, naprednijem postoji mogućnost eksporta pravila, koji se definišu u php-u i poslije se izvoze kao niz pravila za validaciju za JS. Opet pišu se samo na jednom mjestu a koriste i na klijent i na server strani. Ova druga pravila su definisana za 90% mogucih scenarija, tako da se ni tu nema šta pisati, a opet korisnik ima mogućnost pisanja svoj pravila za validaciju.
_________________ There is no style definition for good music!
Nekako mi se čini da su stvari u tom vašem frameworku previše isprepletene. Kolko sam skužio, vi na svakom controlleru koji pristupa modelu morate definirati validaciju?
Edit: Ne znam da li si pogledao ovaj link koji sam poslao na svoj Validation library, ali ono što je cilj tog librarya je da se napravi i decoupling Validacije sa forme, tako da se i sa clientske i sa serverske strane validacija radi na objektima. IMHO to je puno čišći i flexibilniji način.
_________________ Just your average eccentric programmer.
Trenutno je u kontroleru, i ja se slažem da bi trebala biti na model-u, al nisam bio zadužen za taj dio, tako da je trenutno na kontroleru, a svakako je plan u narednim danima validaciju prebaciti na model.
Kako misliš da su stvari previše isprepletene, nisam siguran na što točno misliš,a da - trenutno validaciju moraš definisati na svakom kontroleru (ako je želiš koristiti).
Framework je još u alpha verziji tako da ima mjesta za napredovanje sigurno - i bit će ispravki dosta do beta verzije
Pogledao sam tvoj validator, i sve mi je to ok, samo postavi primjer sa formom pa da vidim kako ustvari radi.
Poz
_________________ There is no style definition for good music!
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum