[Orm] Approccio Up-Bottom

Salve a tutti,

sto cominciando adesso ad usare yii e volevo farvi la seguente domanda:

L’ORM nativo di Yii (Active Record) offre un approccio bottom-up.

Esiste un ORM compatibile con Yii che offra l’approccio Top-Down (ovvero la generazione del DB a partire dagli oggetti)?

Attualmente ho visto che solo Doctrine2 offre questa funzionalità, ma cercando su internet non ho ancora ben capito come farlo ad integrare con Yii.

Inoltre doctrine2 non è che mi piaccia un granché, sono appena scappato da Symfony :smiley:

Grazie a tutti

Mojo

Pensare che io adoro doctrine2 e Symfony2 proprio per la corrispondenza biunivoca tra model e db. Anzi, con doctrine2 il db non lo devo nemmeno toccare.

Cmq avevo letto oltre un anno e mezzo fa di una estensione yii per doctrine2. Magari fa al caso tuo.

Ma permettimi una domanda. Gli oggetti di cui parli, poi li faresti a mano?!? Potresti fare tu una nuova estensore ne?!?

Ciao sensorario,

Symfony non è malaccio, anche se parecchio complicato; il problema è che non si può fare affidamento ad un progetto che dalla 2.0 alla 2.1 cambia radicalmente la sintassi e i nomi degli oggetti: se avessi avuto dei progetti in produzione con la 2.0, per passare alla 2.1 avrei pianto 2 settimane…

Per quanto riguarda l’approccio DB, la mia idea sarebbe di partire da una progettazione object oriented della app per poi definire gli oggetti da mappare sul DB (senza quindi toccare il DB).

Ho visto che Active record non permette questa cosa e stavo appunto cercando un’alternativa.

La scelta sarebbe su doctrine2, ma la mia paura che è che se fanno una minor release distruttiva come quella che hanno fatto per symfony2 tanto valeva restare con symfony2

Si, gli oggetti da mappare me li farei a mano e poi su quelli genererei il DB

Per quanto riguarda creare una estensione credo che sia ancora fuori dalla mia portata

ciao

Passare alla 2.1 non è obbligatorio. La 2.0 è stabile. Avresti potuto anche mantenere la versione 2.0. In ogni caso Fabien prima di rilasciare la 2.1 ha scritto una guida completa alla conversione dei progetti 2.0 in progetti 2.1 ma capisco perfettamente il tuo disagio.

Comunque non sei obbligato a scaricare l’ultima release. Puoi sempre e comunque scaricare la versione, stabile, che interessa a te. E puoi fissare quella. Lo stesso vale per Symfony2 o 2.1.

Mi fai pensare che non fai TDD e che quindi casi come questi sembrano grosse situazioni "NON SOTTO CONTROLLO".

Che cosa farai, però, se Yii2.0 non sarà retrocompatibile con la 1.1?

Parecchio disagio :slight_smile:

Se avessi avuto 10 progetti sarebbe stato un bel pò di tempo perso, e soprattutto senza la garanzia che di non dover ripetere la cosa con le versioni future

vero, ma perderei tutti i bugfix successivi e rimarrei con una versione acerba e non aggiornata

Per quanto riguarda il TDD è nei miei piani, ma purtroppo non nel breve periodo.

Beh passando ad una major release capisco che questi problemi possono esserci, ma in ogni caso il buonsenso vorrebbe che venissero mantenute entrambe per un certo periodo di tempo.

In seguito uno potrebbe decidere se lasciare il progetto con Yii 1.x o migrarlo su Yii 2.x

Per quanto riguarda invece i DB da associare a Yii, te puoi consigliarmi quale scegliere per l’implementazione top-down?

Se dovessi fare un’estensione per doctrine 2.x (che attualmente non ho la + pallida idea di come si faccia), quanto tempo (grossomodo) ci vorrebbe?

ho visto che l’estensione per Doctrine2 con Yii 1.1 è fermo alla 2.0, quindi non so quanta affidabilità possa garantire.

Grazie mille per la pazienza.

Mojo

Cmq il tuo problema l’ho sollevato tempo fa anche ad un membro del team di sviluppo di Yii. Quello che CI serve, probabilmente lo vedremo nella 2.0.

Ma perché la 2.0 non dovrebbe essere affidabile?

No, non dico che non sia affidabile, ma sicuramente qualche bugfix verrà fuori nelle versioni successive.

Cmq sto provando l’integrazione di Doctrine 2 con Yii con l’estensione presente sul sito.

Provo e ti so dire :slight_smile:

ciao

Emh, … la 2.0 è un branch a se. Se la 2.0 ha un bug, viene aggiornata la 2.0, non la 2.1 (a meno che il bug non sia in entrambe le versioni).

?

Scusa ma forse mi sono perso qualcosa…

Se la 2,0 ha un bug, questo viene corretto nella versione successiva che può essere la 2.0.1 in caso di modifiche veramente minime, oppure nella 2.1 nel caso in cui ci siano anche migliorie sostanziali ma non critiche.

Sto sbagliando?

Ti ripeto: 2.0 e 2.1 sono due branch separati. La 2.1 potrebbe non avere più il codice "infetto" in cui è stato trovato un bug presente solo nella 2.0.

L’avanzamento non è lineare: potrebbe nascere la 2.0, poi la 2.1, poi la 2.0.1 poi la 2.0.2, poi la 2.1.1. E così via.

Capito, quindi fanno un pò come gli pare…

Ho fatto bene a venire via da Symfony

Ok, provo a farti un esempio più facile da comprendere. Se si trova un Bug su Windows 95, non si aggiorna anche Windows 8. Il fatto che non ti sia chiaro come si gestiscono diversi branch, non significa che loro non siano in grado di farlo.

Si ma windows95 e windows 8 sono paragonabili a delle Major release, quindi se due versioni di un software cambiano radicalmente (ad esempio eliminano delle funzioni), si dovrebbe passare ad una major release…

almeno questo è quanto mi avevano insegnato ad Ingegneria del software.

Il mio parere è che se si avessero 4 o 5 major release solo perché ci si è accorti che una funzione non serve + o che il codice precedente era uno schifo, il progetto perderebbe credibilità, quindi molto meglio avere due minor release che sono "quasi" incompatibili tra loro.

Ma dai!?

:smiley:

Vedi che ho fatto bene? eheheh

cmq con Doctrine non ne sto cavando nulla, l’extension si basa su doctrine 2.0 ed alcune cose sono cambiate.

mi sa che mi butto su AR oredBeans e buonanotte.

Ora sento se qualche anima pia sa qualcosa di + di quello che trovo in giro.

grazie mille

ciao

Mojo

Se hai abbandonato Symfony2 per questo non hai fatto bene. Purtroppo il software versionato funziona così. Poi, magari, mi sono spiegato male e io.

Secondo me non è nemmeno tanto paragonabile il processo di sviluppo di un sistema operativo da quello di un framework!

Vedrei più la somiglianza con PHP visto che si tratta di strumenti di sviluppo e non di utilizzo finale.

Le funzioni che rimangono in comune tra le Major vengono aggiornate in tutte le release a meno che una major non passi allo stato "non più mantenuta".

Poi ci sono sempre dei passaggi dolorosi sopratutto per progetti che si vogliono mantenere aggiornati con le nuove tecnologie, php ad esempio, ha mantenuto alta retrocompatibilità a discapito dei tempi di rilascio mentre ruby ha un sacco di versioni ma con grossi problemi di retrocompatibilità!

Detto questo la maturità e l’affidabilità di un progetto sono valutabili anche dalle motivazioni che porta avanti Mojo con tutti i però che dice Sensorario! :D

Detto questo con Yii 2.0 credo che qualche doloretto lo proveremo anche noi!

Scusate ma non avevo visto i post :slight_smile:

Ad ogni modo sono riuscito ad integrare doctrine2 con yii, anche con la parte di mappatura tra il modello ed il form.

Appena posso metto tutto insieme e faccio un tutorial per chi dovesse averne bisogno.

L’unico ‘problema’ é che scavando nelle funzioni che mappano i form con i modelli ho scoperto che l’assegnazione dei campi del form al modello viene effettuata per valore invece di utilizzare i relativi setter e getter.

Inoltre un campo del modello é considerato un campo del form solo se é pubblica e non é statica…

Nell’ottica di realizzare un framework orientato agli oggetti, questa cosa é un pò uno schifo!

Ho creato un post sul forum principale per capire se la mia modifica alle funzioni é integrabile nelle prossime versioni di yii o se ci sono dei motivi validi per giustificare l’implementazione originale, ma al momento non mi ha risposto nessuno…

Ad ogni modo per concludere il discorso sulle minor e major release, io rimango dell’idea che in una minor, le modifiche non dovrebbero intaccare le implementazioni precedenti o perlomeno mantenere la retrocompatibilitá (almeno per un certo periodo di tempo) altrimenti in progetti complessi e soprattutto replicabili (come ad esempio una intranet venduta a tanti clienti o anche un semplice cms utilizzato per tanti siti web) si rischia di perdere + tempo a cercare di mantenere aggiornato il sistema invece di sviluppare nuove applicazioni.

La scelta di symfony2 é stata veramente una pessima idea, potevano anzi aspettare due mesi in piú a tirar lo fuori e si sarebbero evitati una figuraccia

Ti suggerisco di leggere questo per quel che riguarda attributi pubblici e privati: http://fabien.potencier.org/article/47/pragmatism-over-theory-protected-vs-private Questo link l’ho scoperto grazie ad Alexander Makarov tra un post e l’altro, ma non saprei ritrovarlo.

Mojo, che cosa mi dici, allora delle release di ubuntu che hanno come prime due cifre l’anno e come seconde il mese? Tu confondi le major release con le LTS.