"Se ci sono due o più modi di fare una cosa,
e uno di questi modi può condurre a una catastrofe,
allora qualcuno la farà in quel modo.

(Edward Murphy)

I primi moduli: Sessione, Locale, Request, Routing e App

Dom, 09/03/2014 - 18:38 -- arturu

Nel precedente articolo siamo arrivati al momento in cui dobbiamo sviluppare i primi moduli del Core, in questo articolo ci concentreremo sullo sviluppo dei seguenti moduli: Sessione, per gestire la sessione; Locale, per gestire l'internazionalizzazione; Request, per ricevere le richieste; Routing, per gestire le richieste; infine, App per eseguire la specifica richiesta. Inoltre, per far comunicare le diverse parti del framerwork dobbiamo fare una piccola modifica ad "/app/Concerto/Config.php".

Configurazione

Facciamo in modo che nel vettore delle impostazioni, ogni applicazione possa scrivere le proprie impostazioni e leggere soltanto quelle delle altre. Questa funzionalità la possiamo realizzare facendo in modo che ogni App scriva dentro una propria chiave, di conseguenza può leggere soltato dalle altre. Per non incorrere in sovrascritture accidentali dobbiamo usare per ogni App una chiave univoca associata alla specifica App, la soluzione è semplicissima, possiamo riutilizzare il nome della classe nel formato "namespace\Class", di sicuro è univoca. Poche linee di codice e abbiamo il seguente risultato:

/app/Concerto/Config.php

Vedi Codice Su GitHub

Core

Facciamo alcune modifiche al Core, facciamo in modo che setti in automatico alcune impostazioni, come: la cartella di installazione, path ecc. Abbiamo la seguente situazione:

/app/Concerto/Core.php

Vedi Codice Su GitHub

Sessione

Il gestore della sessione si preoccupa di gestire l'iserimento, la modifica e il mantenimento della sessione, concettualmente è molto simile a Config. All'avvio della sessione preleviamo la sessione e la inseriamo dentro il vettore di Config, alla distruzione della classe ricopiamo tutto in $_SESSION. Come implementazione utilizziamo quella di Config, così riutilizziamo gli stessi concetti, in futuro ottimizzeremo un po' il codice in modo d'avere un unica classe o un'estensione di essa.

/app/Concerto/Sessione.php

Vedi Codice Su GitHub

Locale

Questa classe gestisce le lingue e l'internazionalizzazione, attualmente si limita soltato a stabilire la lingua del browser e salvarla nella sessione, e permettere il cambio di lingua.

/app/Concerto/Locale.php

Vedi Codice Su GitHub

Request

Questa classe gestisce le richieste, attualmente setta soltanto le impostazioni che verranno utilizzate da altre parti software, successivamente implementeremo anche la gestione dei vari Status HTTP e le altre funzionalità necessarie.

/app/Concerto/Request.php

Vedi Codice Su GitHub

Routing

Routing gestisce gli url, scansiona e costruisce gli url parametrici o rewriting, per snellire il tutto facciamo in modo di standardizzare l'url che arriva all'interno della nostra applicazione, facciamo in modo che in qualsiasi caso all'interno della nostra applicazione arrivi un url nel formato "/nome_app/controller/action/a/b/c/d"

/app/Concerto/Routing.php

Vedi Codice Su GitHub

App

Concettualmente è difficile stabilire come dovrebbe funzionare un'applicazione, possiamo anche progettare una struttura che sia la più flessibile possibile, ma ci sarà sempre un caso o delle condizioni che non abbiamo previsto. Una soluzione potrebbe essere di non progettare nessuna struttura e lasciare piena libertà allo sviluppatore di scegliere la stuttura che meglio gli conviene. Facciamo in modo che App istanzi l'applicazione e passi il controllo di tutto il resto all'applicazione stessa. Se si osserva la riga 44 si può vedere che l'unica accortezza per lo sviluppo delle app è il dichiarare una classe "App" dentro la cartella dell'App stessa, poi dentro il cotruttore di "/nome_app/App.php" verranno inserite le operazioni da compiere per l'avvio dell'app stessa.

/app/Concerto/App.php

Vedi Codice Su GitHub

Un'app di test

Come detto in precedenza l'unica accortezza per lo sviluppo di app è quella di dichiarare una classe di nome "App" dentro la cartella dell'applicazione stessa. L'applicazione Test è accessibile da "http://localhost/cartella/en/Test/parametri/valore/parametri/valore/" e visualizza un dump di alcuni elementi.

/app/Test/App.php

Vedi Codice Su GitHub

Conclusioni

Come abbiamo visto, con poche classi e poche righe di codice e grazie ad una buona organizzazione siamo riusciti a cotruire una solida base per lo sviluppo delle nostre applicazione, con una manciata di classi e altrettante righe di codice siamo riusciti a cotruire lo scheletro di un framework con la gesione di diversi aspetti. Questo commit si può visualizzare per intero su GitHub: https://github.com/arturu/Concerto/tree/7246b771e2dab70f744c4c81fff19de6... , dalla stessa pagina si può scaricare l'intero commit del progetto.