Symfony2 ed Yii1.1.10

Ciao ragazzi! Mi hanno chiesto di scrivere un articolo su php così ho proposto questo titolo: “Symfony2 ed Yii1.1.10: due approcci differenti”. L’ho proposto perché conoscendo Yii mi sono reso conto di quanto sia rapido sviluppare applicazioni web con questo framework. D’altra parte, mi sono anche reso conto che Symfony2, anche se più complicato, presenta dei vantaggi non da poco.

Chi di voi ha conosciuto entrambi i framework? Che cosa vi ha portato a scegliere Yii? Vorrei "interrogarvi" per rendere il mio articolo il più completo possibile.

La differenza fra i due framework non la conosco ma sicuro

uno dei vantaggi di YII è la riusabilità del codice.

Cioè i problemi, tendenzialmente, li risolvi solo una volta.

Una cosa "negativa", (ma il problema è solo mio) che alcuni oggetti gli oggetti sono estremamente

complessi.

Io voto Yii per il supporto verso i neofiti, maggiore rispetto a Symfony2, dove tra l’altro bisogna andare a scovare il canale mIrc in cui si trova solo utenti di lingua anglosassone :angry: !!!

ciao

Oggi ho iniziato a sviluppare l’applicazione trackstar dal libro “Agile Web Application …”. Quello è quasi il punto di partenza di Yii. Per molti di noi, al contrario, è un punto di arrivo con Yii. La difficoltà di sf2 dovrebbe farci riflettere. Io credo che farò il possibile per abbandonare lo sviluppo di siti web, per andare verso lo sviluppo di vere e proprie applicazioni. E li non c’è framework che tenga: ho fai tdd e bdd, … o fai davvero fatica a creare un buon prodotto.

Mmm a dire il vero esiste un gruppo di google su symfony. Tutto in italiano. Formato da soli italiani. E da aziende italiane che sviluppano bundle per symfony.

Perchè le applicazioni web non sono applicazioni?? Stai mischiando pere con mattoni.

Personalmente penso che fare un’applicazione client vuol dire ridurre la distribuibilità del prodotto… anche se lo fai in Java dove puoi farlo girare su tutti gli OS non puoi usarlo da internet con un browser.

L’applicazione web invece la fai girare anche in una intranet… basta installare un apache nella LAN.

Poi perchè rifarsi l’MVC in C# C++ o java se c’è già bello che pronto nei web framework… che per giunta quest’ultimo a me sembra più consono al contesto MVC (Model=classi, view=browser, controller=controllers)

Sarebbe bello poi parlare in questo forum soprattutto su Yii invece di altri framework visto che siamo in un forum esclusivo di YII :)

E’ come parlare di Fiat nel forum della mercedes!

Forse mi sono spiegato male: non voglio fare siti (web) ma applicazioni (web). Anche il blog è un sito web, o un’applicazione web. Diciamo che proprio per non confondere le pere con i mattoni si chiama semplicemente blog. E’ solo una convenzione.

Riguardo il confronto con altri framework, ti ricordo che Yii è un insieme di concetti copiati da joomla, symfony, prado ed altri. Se vogliamo essere professionisti bisogna conoscere bene gli strumenti con cui lavoriamo.

Non capisco la differenza tra sito web e applicazione web… dalla complessità?

E’ molto soggettivo.

Se faccio un blog MOLTO COMPLESSO e diventa un 'applicazione?

Per me i siti web che contengono codice lato server sono applicazioni… rimangono fuori quindi solo i siti statici HTML … quelli fatti con WORD!

E’ logico che qualsiasi cosa nasce da precedenti buone idee come è successo anche a YII e come è successo alla marea di framework che sono usciti prendendo spunto o copiando letteralmente Rails (Yii incluso).

Scusa ma mi era sembrato fare pubblicità ad un framework concorrente nel forum di YII :)

Mmm si in effetti è anche per me così: ho sempre visto tutto quello che facevo con php come una applicazione. Dalla singola paginetta ad un portale complesso. Di fatto sono programmi. Dunque ho sbagliato a fare la distinzione pochi post fa. =(

Diciamo che "vedo" due modi di lavorare distinti:

In applicazioni semplici, intendo dire di breve durata di sviluppo e con poche feature,non andrei mai ad usare TDD o BDD. Usare certe tecniche costerebbe più del guadagno effettivo. Se oggi mi chiedessero un blog, prenderei il blog di yii e cambierei il template.

Esiste un secondo metodo, sposato anche da Yii ma per me più difficile da applicare sotto alcuni aspetti. Questo metodo prevede ti fare TDD e BDD e test funzionali. Il prodotto che ne esce è tanto buono quanto può essere buona una applicazione fatta senza. Ma la differenza sta nel fatto che è tutto sotto controllo. Il codice è testato, non ci si trova in una scatola nera. Ecco questo intendevo. Puoi scrivere dell’ottimo codice php non testato. Ma se è testato puoi dimostrare che è valido. In certi contesti è richiesto un controllo qualità. In pratica i software devono essere rilasciati con appositi test che ne certifichino la qualità.

Sto imparando a sviluppare nel secondo modo. Allunga i tempi di sviluppo. Ma la qualità del prodotto è decisamente superiore. Poi, è una guerra di religioni. Ciascuno sceglie sempre e comunque il suo metodo di lavoro.

Per aggiungere a quello che ha scritto sensorario

Il maggior benefficio del TDD viene quando si lavora ad un proggeto piu complesso dove ci lavora uno o piu persone…

A volte puo succedere che lavori ad un modulo, durante il lavoro lo testi estreamamente e quando e finito il modulo e funzionale al 100%… poi ci lavori ad un altro modulo ce puo essere o non relato al primo… testi il secondo modulo e quando e finito il secondo modulo lavora al 100%… poi lavori al terzo e cosi via…

alla fine del Ntesimo modulo… provi a fare qualche funzione nel primo moudlo e scopri che qualcosa non va piu benne, ti da valori strani o qualche exception…

Il TDD serve proprio per questo… durante il lavoro di oggni modulo fai i test per esso… quando il modulo e finito basta aviare tutti i test fati finno ad ora per testare e confermate che i vecchi moduli funzionino come previsto…

Con questo metodo puoi nottare i possibili problemi quando nascono :D

Esatto! Ma purtroppo il TDD si basa solo sui test unitari: le unità di codice. Faccio BDD da 3 settimane. Facendo BDD ho anche smesso di guardare il browser. Non avete idea di quanto tempo si può risparmiare. In queste settimane ho accumulato 33 features. Ho testato login, logout, creazione di records, … ed in 1 minuto circa, posso verificare che tutte queste azioni funzionino correttamente.

Ho richiesto che si possa fare BDD in Yii2.0 perché tantissimo valore al nostro prodotto.

Ovviamente vale solo per i prodotti complessi. Non ha senso fare BDD per lavori più piccoli.

Qualle la richiesta?

Per TDD fa tutto il user… non ce niente da aggiungere o sopportare in Yii… BDD e diverso ?

Con BDD io testo il funzionamento del sito nel browser. Come la compilazione di un form, come accertarmi che se un utente accede ad una pagina protetta riceve un 403. Cose di questo tipo.

Con BDD possiamo verificare i Behavior. Ovvero i comportamenti. TDD non è adatto a questo.

PS. Selenium è troppo lento per fare BDD.

Già abituarsi a mantenere i test man mano che si sviluppa andrebbe fatto.

Io sono perennemente nella fare di cercare di sviluppare… quella di si sviluppare e testare automaticamente non arriva mai!

Scusate l’ignoranza ma BDD sta per Behavior Driven Development e TDD per Test-driven development?

C’è qualche risorsa in rete che le descrive… magari in italiano?

Questo può aiutare?

phpunit-story

Certamente! PHPUnit è uno standard de-facto in tema di test. In BDD si usano phpunit, selenium, si usa un’infinità di strumenti. Per questo può non essere semplice.

Vi dico solo questo: io prima scrivo la storia, e poi scrivo il codice.

Se avete fatto pratica con il TDD, saprete per certo che con il TDD si arriva a scrivere un codice migliore. In oltre, facendo test-first. Prima di aggiungere del codice ci si assicura sempre che quella funzionalità prima non era presente nella nostra applicazione. Quando il test va in green, allora sappiamo che abbiamo un nuovo software.

Con BDD, il test fa emergere la logica di un sito. Ad esempio potremmo scrivere questo.

Scenario: E’ possibile terminare una task anche quando è scaduta

Dato che esiste un utente attivato "luigi" con email "luigi@luigi.it" e password "password"

E “luigi” ha l’attivita:

| id | name                      | scade_il   | description                       |


| 33 | studiare yii              | 2011-04-01 |                                   |

E io sono loggato come "luigi" e password "password"

Quando vado in "/tasks/view/id/33"

E premo "Termina"

Allora la risposta contiene "La task è terminata!"

Portremmo lanciare il test. Il test sarà rosso: che per noi significa "funzionalità non presente".

Creeremo il nostro model, il controller, … lavoreremo un po’, e poi … quando il test sarà green, potremmo essere contenti e soddisfatti. Committeremo il nostro nuovo software. E potremo anche mostrare al nostro cliente quella cosa scritta qui sopra.

si avevo letto tempo fa ma mai provato.

Ma che differenza c’è tra TDD e BDD?

L’esempio che hai fatto è solo TDD?

Il test unitario testa una singola porzione di codice.

Il test funzionale, invece, testa un’intera funzionalità.

Con il TDD si usano i test unitari.

Con il BDD si usano i test funzionali.

In ogni caso, ha senso testare se si fa "test-first". Diversamente, sprecheremmo solo del tempo per riscrivere quello che abbiamo già fatto.

In verità, io faccio BDD per testare il comportamento della mia applicazione. Faccio BDD da un mese, quindi ancora non sono un guru. Però quello che posso testare con TDD, BDD, e Test funzionali, fa emergere aspetti diversi della programmazione. Fare test first, fa emergere un design potente! Fare test-first rende il codice pulito. Snello, controllato.

da come l’hai descritto sembrerebbe pari pari questo:

http://www.yiiframework.com/doc/guide/1.1/en/test.functional

quindi yii è già predisposto per il BDD?