WebFrameWorker

gennaio 3, 2007

Propel: un framework ORM per PHP5

Filed under: ORM,PHP,propel — stablum @ 11:48 am

Ieri sera, nell’articolo di wikipedia Object Relationship Modeling ho trovato, tra i collegamenti esterni un ORM per PHP 5 di nome Propel, rilasciato con licenza LGPL.

Propel fa il parsing di file schema scritti in xml per generare Object Model scritti in php, e devo dire che questo mi sembra a naso un anti-pattern

La compatibilità è garantita su un gran numero di database, grazie al layer di astrazione Creole.

Ecco un assaggio di come può essere una parte di uno schema XML:

<table name="book">
<column name="book_id" type="INTEGER" required="true" primaryKey="true"/>
<column name="title" type="VARCHAR" size="100" required="true"/>
<column name="author_id" type="INTEGER" required="true"/>
<foreign-key foreignTable="author">
<reference
local="author_id"
foreign="author_id"/>
</foreign-key>
</table>
<table name="author">
<column name="author_id" type="INTEGER" required="true" primaryKey="true"/>
<column name="fullname" type="VARCHAR" size="40" required="true"/>
</table>

C’è da dire che come schema sembra molto verboso, soprattutto nella specificazione delle foreign key… Mi sembra di capire che l’utilizzo intensivo dell’xml può essere dettato da una necessità inconscia di non voler programmare in quel linguaggio certo non elegantissimo che è il php.

Il sistema di generazione file mi sembra che ricalchi quello di Ruby on Rails e di PRADO, ovvero mediante tool esterni a riga di comando. Non sopporto quest’idea di separare lo sviluppo in due fasi, ovvero “generazione superautomatizza” e “customizzazione” poichè per tornare ad usufruire dei vantaggi della generazione bisogna buttare via le personalizzazioni.

L’utilizzo finale sembra essere piuttosto comodo e comparabile con altri framework simili (si veda il post su doctrine). Inoltre, contrariamente a DB_DataObject, quando vengono inpostati i campi dei record non si usa l’accesso diretto alle variabili d’istanza, ma vengono utilizzati dei setter come si può vedere nel seguente esempio:

$author = new Author();
$author->setFirstName("Leo");
$author->setLastName("Tolstoy");
$pub = new Publisher();
$pub->setName("Viking Press");
$book = new Book();
$book->setTitle("War & Peace");
$book->setIsbn("0140444173");
$book->setPublisher($pub);
$book->setAuthor($author);
// save (insert, in this case) the new object
$book->save();

Di particolare interesse è piuttosto la generazione della sezione WHERE delle SELECT: invece di usare un vero e proprio “pezzo” di codice SQL come fa DB_DataObject con il metodo whereAdd(), propel usa un sistema più avanzato (ed astratto) tramite i cosiddetti Criteria, p.es:

$c = new Criteria();
// Find all authors with first name Karl but
// last name is _not_ Marx.
$c->add(AuthorPeer::FIRST_NAME, "Karl");
$c->add(AuthorPeer::LAST_NAME, "Marx", Criteria::NOT_EQUAL);
// Find all authors with last name of Tolstoy, Dostoevsky, or Bakhtin
$c2 = new Criteria();
$c2->add(AuthorPeer::LAST_NAME, array("Tolstoy", "Dostoevsky", "Bakhtin"), Criteria::IN);

Piuttosto interessante ma eccessivamente verboso per i miei gusti, nonostante fornisca interessanti spunti di riflessione.

L’ultima nota importante è l’emulazione della ON DELETE CASCADE via PHP per tutti i database che non la supportano nativamente, ad esempio MySQL.

Per altre informazioni: qui c’è la guida

5 commenti »

  1. ho provato ad installarlo con pear ma non c’e proprio speranza.
    tu come hai fatto ?
    hai avuto problemi.
    Io anche seguendo tutte le vaire guide non ho avuto successo
    suggerimenti ?

    ciao grazie
    david

    Commento di david — giugno 25, 2007 @ 5:29 pm

  2. alli

    Commento di alli — agosto 3, 2007 @ 5:26 am

  3. power roulette strategy

    Commento di power roulette strategy — agosto 8, 2007 @ 5:02 am

  4. kama sutra positions

    Commento di kama sutra positions — agosto 9, 2007 @ 4:54 am

  5. Play Casino Slots Online

    Commento di Play Casino Slots Online — novembre 28, 2007 @ 1:16 am


RSS feed dei commenti a questo articolo. TrackBack URI

Lascia un Commento

Fill in your details below or click an icon to log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Log Out / Modifica )

Foto Twitter

You are commenting using your Twitter account. Log Out / Modifica )

Foto di Facebook

You are commenting using your Facebook account. Log Out / Modifica )

Connecting to %s

Theme: Rubric. Blog su WordPress.com.

Follow

Get every new post delivered to your Inbox.