Criteria objects

Tags:    criteria patterns php

Så arbejder man igen lidt på alt det her Criteria object pattern, som f.eks Java/Hibernate gør stor brug af. PropelORM er det tætteste man kommer på en PHP port, som arbejder lidt efter samme princip.

Anyway, giv gerne en vurdering af denne klump kode - Det er sgu ikke helt nemt at ramme noget, som giver mening. :)

Fold kodeboks ind/udPHP kode 




Indlæg senest redigeret d. 01.06.2011 23:08 af Bruger #10216
Vil lige indlede med at sige at jeg ikke kender det mønster du referer til eller hvordan det skrives i Java.

- Dette er kun ud fra dit eksempel. Burde det så ikke være lettere at bruge din kode end bare at skrive SQL'en. Der er vel noget galt når det er nødvendigt at skrive den resulterende SQL i en kode kommentar, er lidt et tegn på at det er svære at udlade hvad der sker fra dit framework end fra sql strenge.

- Mener at PHP kode stil er at skrive metoder/funktioner bla_bla2 og ikke blaBla2. At bryde fra sprogets kodestil gør det svære at bruge dit framework i sproget.

- Er gruppering, joining og max results virkelig en del af et criteria eller ville for eksempel:
$collection->getGrouping()->add(new Projection\GroupProperty('id'))
være bedre.

- Hvis du deler det mere op kunne du måske også undgå nogle af de der lange "new --------()".

Mit forslag uden at forsøge at implementere det eller vurderer det for fejl:

Fold kodeboks ind/udKode 


Jeg kunne i dit eksempel ikke se, hvordan du kom frem til hvad der joins på, så antog det er automatisk.





Tak for din kommentar...

Ud dit eksempel havde jeg også foretrukket hvis man kunne bruge reserveret ord, bl.a. "or", som funktionsnavne. Men det kan man ikke... :(

SQL kommentaren er blot for kunne se hvad mit oplæg vil blive konverteret til - når kaldet i databasen skal laves. Her skal det siges, at det ikke nødvendigvis er en SQL database, men det kan ligeledes være en webservice, eller noget helt tredje.

Vedr. navnekonventioner, hvis man kaster et blik på bl.a. flg. http://dk.php.net/manual/en/book.datetime.php, så vil jeg ikke mene at jeg rammer ved siden af. PHP er desværre meget betonet af inkonsistens i navngivning.

Vedr. gruppering - helt klart en idé der lige skal overvejes. :) Jeg vil prøve at vurdere hvor logisk/simpelt det ville være.



ja havde lige overset den der med or så det skulle have været or_expr eller orExpr.

Min hovedformål var mest at jeg synes du skulle undgå at man skulle skrive ting som det her: new Criteria\EqualExpr

Efter en lille test tror jeg at det er en dårlig ide at or gav en ny gruppe. I stedet kunne man have or_begin or_end til at starte og slutte blokke af or'ed udtryk.

Eksemplet, er godt klar over du sikkert ville undgå at skriv MySQL, men et eller andet stedet på et eller andet tidspunkt skal der vel gives hvad slags datalager der bruges.
Fold kodeboks ind/udKode 


Den resulterende MySQL:
Fold kodeboks ind/udKode 


Og logikken:
Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 02.06.2011 19:57 af Bruger #5620
t