ORM Php

bismark2005

Utente Attivo
8 Mar 2011
70
0
0
Salve ragazzi dovrei studiare l'Object Relational Mapping in Php. Tuttavia sembra che esistano diversi tipi di ORM e quello del manuale non va bene. Mi hanno detto che i migliori sono questi 2:

-Doctrine

-Propel.

Siete a conoscenza di una guida,tutorial o altro in Italiano su Doctrine?

Grazie
 
Doctrine e Propel usano due modelli differenti.

Doctrine (a partire dalla versione 2) utilizza il modello entity manager: una classe si occupa di gestire le entità del database.
Propel adotta invece il modello active record, usato anche dal framework Rails e forse più semplice: sono le stesse entità ad auto-gestirsi.

Per esempio, supponiamo che tu abbia un modello Post. Con Doctrine per creare una nuova entità farai così:
PHP:
<?php
$post = new Post();
$post
    ->setTitle('Titolo')
    ->setBody('Contenuto')
;

// $em contiene un'istanza di Doctrine\ORM\EntityManager

$em->persist($post);
$em->flush();

Con Propel, invece, basta scrivere:
PHP:
<?php
$post = new Post();
$post
    ->setTitle('Titolo')
    ->setBody('Contenuto')
;
$post->save();

Io sono sempre stato piuttosto combattuto tra questi due modelli. Quello di Doctrine è semanticamente più corretto (un oggetto non si gestisce da solo, ma c'è un oggetto incaricato di gestirlo). Quello di Propel, però, è anche un po' più semplice (tra l'altro mi sto avvicinando a Rails che sfrutta il modello active record, e lo sto trovando fantastico).

Con il secondo ho lavorato poco, perché Doctrine è nativamente integrato nel framework Symfony che uso da diverso tempo, e non ho mai sentito il bisogno di provare Propel. Ora che me l'hai ricordato, potrei darci un'occhiata giusto per sfizio.

Se cerchi della documentazione in italiano su Doctrine, puoi dare un'occhiata al capitolo dedicato nel sito di Symfony: http://symfony.com/it/doc/current/book/doctrine.html. Tuttavia non potrai basarti esclusivamente su quello perché Symfony configura automaticamente l'ORM e molte sue funzionalità.

Questo tutorial, anche se scritto in inglese, è abbastanza semplice: http://marco-pivetta.com/doctrine2-orm-tutorial/.
 
Doctrine e Propel usano due modelli differenti.

Doctrine (a partire dalla versione 2) utilizza il modello entity manager: una classe si occupa di gestire le entità del database.
Propel adotta invece il modello active record, usato anche dal framework Rails e forse più semplice: sono le stesse entità ad auto-gestirsi.

Per esempio, supponiamo che tu abbia un modello Post. Con Doctrine per creare una nuova entità farai così:
PHP:
<?php
$post = new Post();
$post
    ->setTitle('Titolo')
    ->setBody('Contenuto')
;

// $em contiene un'istanza di Doctrine\ORM\EntityManager

$em->persist($post);
$em->flush();

Con Propel, invece, basta scrivere:
PHP:
<?php
$post = new Post();
$post
    ->setTitle('Titolo')
    ->setBody('Contenuto')
;
$post->save();

Io sono sempre stato piuttosto combattuto tra questi due modelli. Quello di Doctrine è semanticamente più corretto (un oggetto non si gestisce da solo, ma c'è un oggetto incaricato di gestirlo). Quello di Propel, però, è anche un po' più semplice (tra l'altro mi sto avvicinando a Rails che sfrutta il modello active record, e lo sto trovando fantastico).

Con il secondo ho lavorato poco, perché Doctrine è nativamente integrato nel framework Symfony che uso da diverso tempo, e non ho mai sentito il bisogno di provare Propel. Ora che me l'hai ricordato, potrei darci un'occhiata giusto per sfizio.

Se cerchi della documentazione in italiano su Doctrine, puoi dare un'occhiata al capitolo dedicato nel sito di Symfony: http://symfony.com/it/doc/current/book/doctrine.html. Tuttavia non potrai basarti esclusivamente su quello perché Symfony configura automaticamente l'ORM e molte sue funzionalità.

Questo tutorial, anche se scritto in inglese, è abbastanza semplice: http://marco-pivetta.com/doctrine2-orm-tutorial/.


Grazie Alessandro. Io sto studiando il "micidiale" manuale Php 6 Guida per lo sviluppatore. Sono arrivato al capitolo 7 e nel titolo vedo scritto ORM. Premesso che non ho idea di cosa sia, ho fatto alcune ricerche sul web, dal quale emerge che i migliori ORM per Php sono Doctrine e Propel.

Ora per Propel ho visto che ci sono queste 2 guide:

https://www.mrw.it/php/articoli/introduzione-propel-php-orm_1334_5.html

http://www.html.it/articoli/object-relational-mapping-in-php-5-con-propel-1/

Mentre per Doctrine c'è solo il capitolo incluso nella documentazione di symfony (che dovrebbe supportare però anche Propel).

A me interessa capire cosa sia e cosa fa questo ORM. Dato che esiste maggior documentazione in ita, mi oriento verso propel?

Grazie
 
Purtroppo io non ti posso rispondere: si tratta di una scelta personale. Dovresti provarli entrambi e vedere con quale ti trovi meglio. Quello che posso dirti è che sia Doctrine che Propel sono software validissimi che semplificheranno molto il tuo lavoro di sviluppatore, e so (io non l'ho letto, ma me ne hanno parlato) che anche il tuo manuale è ottimo.

Tuttavia non dovresti farti scoraggiare dalla mancanza di documentazione in italiano: gli sviluppatori PHP veramente bravi sono pochissimi, e in Italia si contano sulla punta delle dita. Gli ORM (e Doctrine in particolari) sono una soluzione "di nicchia", piuttosto avanzata e utilizzata da chi comprende appieno il paradigma a oggetti, le sue implicazioni e la struttura di un database relazionale.

Se non sai per niente l'inglese, dovresti seguire qualche corso, perché se questa è la carriera che vuoi intraprendere, certamente ti servirà.
Se lo sai poco, non credo che possa incontrare grandi problemi a leggere qualche articolo: dopotutto il codice nella maggior parte dei casi si spiega da solo.
 
Si, il manuale che sto studiando è veramente ottimo. Però...metti questo manuale nelle mani di chi non aveva mai sentito parlare di programmazione, allora la tentazione di mandare tutto all'aria è forte.

Per fortuna con tanta tanta tanta buona volontà, pazienza, ed il supporto del web+altri manuali sono riuscito a studiare la prima metà del manuale, ma che faticaccia!!!

Conosco poco l'inglese, gli argomenti nuovi prerefisco studiarli in italiano.

Quanto al resto, mi avevano sconsigliato Php in quanto non sarebbe un buon linguaggio. In realtà ho potuto verificare che la "colpa" è dei programmatori.

Quello che nel Php viene definito come avanzato (ad esempio gli argomenti del manuale che sto studiando) negli altri linguaggi (java,asp.net ecc) è la norma. Quindi non è esatto dire che Php è un linguaggio semplice. Php è semplice fino a che uno rimane con le basi.

Il guaio è che chiunque inizia a scrivere 2 righe di procedurale, automaticamente si definisce programmatore Php, ma non è così. Ad esempio una persona (programmatore Php in azienda) quando gli ho parlato di PDO e ORM mi ha detto: "ma tu studi php a livello avanzato"? E questo è un programmatore Php!!
 
No, è vero che PHP è un pessimo linguaggio di programmazione. Una serie di scelte sbagliate fatte per convenienza, l'incapacità di stare al passo con le nuove tecniche di design, una API confusionaria e male documentata hanno portato alla formazione di un linguaggio macchinoso e antico. A questi problemi aggiungi un'utenza diseducata, incapace di apprendere cose nuove perché non le vuole apprendere, e hai tutti gli ingredienti per un ecosistema che, sebbene funzioni, è instabile e rischia di crollare da un momento all'altro.

I motivi per cui ha conosciuto una così larga diffusione sono principalmente due: in primo luogo PHP era completamente rivoluzionario quando è stato creato; in secondo luogo, PHP funziona: non serve studiare concetti teorici e astratti, ci si può subito mettere all'opera, creando così degli obbrobri.

Questi sono solo alcuni tra i motivi per cui mi sto sempre più allontanando da PHP e mi sto invece avvicinando a Ruby.
 
Abbiamo più o meno detto le stesse cose. Con Php i programmatori non capiscono che devono sgobbare e poi programmare. Comunque se usato con "accortezza" non è proprio male come linguaggio di programmazione.

Io adesso mi sto facendo le ossa con il Php. Ovvio che un domani a seconda delle esigenze cambierò linguaggio. Anche perchè sembra che passare da un linguaggio di programmazione ad oggetti ad un altro non sia troppo traumatico.
 

Discussioni simili