Sto scrivendo questa pillola principalmente per due motivi! Il primo è quello di spiegare cosa sono effettivamente i framework e i cms, il secondo e quello di aiutare a realizzare lo sviluppo dei due.
I Framework e i CMS hanno tantissimo in comune Diciamo, anche se in maniera improria, che i CMS sono dei Framework ESTESI
Comunque questo non vuole essere una guida completa, ma solo uno spunto, un punto di partenza per andare avanti
*** Cosa sono i Framework ***
I framework sono un set di librerie per faciltiare il lavoro. Contengono al loro interno svariati componenti che si occupano di eseguire le operazioni più diverse! Di solito i compontenti interni di un framework sfruttano con una certa facilita i componenti stessi del framework!
Per farvi un'esempio pratico mettiamo che voglio gestire le sessioni su database. Per far questo ho bisogno di poter lavorare con il database e di poter gestire le sessioni. Quindi un framework che si occuperebbe SOLTANTO di gestire le sessioni su database avrebbe 2 componenti di cui la più basilare è l'interfaccia con il database e l'interpretazione di questi dati che compongono la sessione.
I framework in realtà comprendono svariati componenti e ogni componente contiene le sue sezioni! Per farvi un'altro esempio un framework serio al suo interno gestisce diversi tipi di Database quindi deve essere strutturato in modo che possa gestire i vari database senza dover fare cambiare il codice all'utente
Per dirla in parole povere i FrameWork non sono altro che delle funzioni o classi con relativi metodi che servono per semplificarvi la vita!
*** Come funzionano i FrameWork ***
I Framework, non ha molto importanza se sono OOP, anche se è meglio, sono composti da diversi strati...uno strato superiore utilizzerà SEMPRE lo strato inferiore per funzionare.
Se volessimo fare un'esempio possiamo immagginare un framework che si occupi di gestire i database, le sessioni e l'invio e la lettura delle mail. I vari componenti sono quindi Database, Socket, Sessioni, SMTP e POP3.
codice:1* STRATO) Database Socket Socket | | | ----+------------+----------+--- | | | 2° STRATO) Sessioni SMTP POP3
Come potete vedere il secondo strato per funzionare avrà SEMPRE bisogno del primo, o per meglio dire, ogni componente del secondo strato avrà una componente del primo strato su cui si basa.
Questo penso che rende chiara l'idea dell'importanza di una buona progettazione! Una buona progettazione è essenziale, perché se venisse strutturato male succederebberò ripetizioni, più codice da gestire, più codice da debuggare e quindi più possibili bug.
Se non avessimo proprio avuto un componente socket avremmo ottenuto qualcosa del tipo
codice:1* STRATO) Database SMTP POP3 | ----+--------------------------- | 2° STRATO) Sessioni
avendo quindi di conseguenza il DOPPIO del codice!
Lo ripeto ancora una volta, la progettazione è ESSENZIALE quanto si sviluppa un framework! Un framework che non ha una SOLIDA progettazione alla base è un framework che non avrà molto futuro!
Riprendendo il primo esempio, se volessimo aggiungere un sistema di gestione dei log avremmo dovuto semplicemente fare
codice:1* STRATO) Log Log Log | | | ----+------------+----------+--- | | | 2* STRATO) Database Socket Socket | | | ----+------------+----------+--- | | | 3° STRATO) Sessioni SMTP POP3
(Ovviamente se dovessimo fare una rappresentazione grafica non ci sarebbe 3 log nel primo strato ma solo 1, come anche per le socket)
La stessa cosa, applicata nell'esempio con le socket integrate nell'smtp e nel pop3, avrebbe traumatizzato tutto! Infatti il codice che avrebbe gestito gli errori delle socket sarebbe stato ripetutto per ben due volte in tutto il codice aumentando quindi il tempo di parsing e di interpretazione e di conseguenza il tempo di esecuzione complessivo!
*** I CMS ***
Come detto prima i CMS, ovvero i Content Managment System, non sono altro, anche se ripeto che è detto in maniera impropria, dei FrameWork Estesi.
Se ci pensate bene un CMS deve essere in grado di gestire dei plugin, blocchi e quant'altro ancora. Di conseguenza alla base di un CMS ci sta un Framework. Un CMS che non ha un framework alla base non credo possa essere considerato un vero e proprio CMS!
I CMS sono delle versioni estese dei framework perché contengono tutte una serie di funzioni che si occupano di permettere la gestione di questi plugin, blocchi e altro!
Effettivamente possiamo dire che un CMS ha in più del framework, escludendo i plugin e blocchi (non i componenti per gestire plugin e blocchi), un pannello di controllo, per farla molto semplice.
Ovviamente poi c'è il CMS più o meno complesso che implementa svariate funzioni.
Più o meno credo che l'idea di base è semplice:
Un CMS è un contenitore di MODULI, moduli che per funzionare si basano sulle funzioni messe a disposizione dal CMS.
Se mancasserò i moduli il CMS di per se non avrebbe senso, e dall'altra parte se mancasse il CMS i moduli non potrebberò funzionare!
Anche qui, e non mi stancherò MAI di riperlo, è ESSENZIALE la progettazione! Può costarvi TANTO non progettare proprio o progettare male il CMS perché poi, durante lo sviluppo, si rischia di dover rismontare TUTTO e riscrivere tanto codice per poterlo sistemare alle proprie esigenze, quelle che sarebberò saltate fuori durante la progettazione!
Ad esempio un CMS fatto proprio male è PHPNuke. Molti lo usano perché lo ritengono il migliore, ma in realtà è il peggior CMS che esiste! Non voglio dire altro qui, perché c'è un'apposito thread dove si parla di CMS, ma purtroppo è il più usato, ma anche il più buggato e mal progettato.
*** Perché Usare le Classi ***
I motivi sono svariati
Partendo dal fatto che uno sviluppo a classi permette anche il semplice reutilizzo di parti del framework in altri lavori, ma certamente permette una maggiore facilità!
Inoltre con l'introduzione di PHP5 si colmera questa rinomata, ma anche fantasma, lentezza tremenda degli oggetti!
La velocità effettiva di un codice sorgente non dipende tanto dall'uso di oggetti o meno ma dalla capicità del programmatore di scrivere buon codice e dalla progettazione fatta a monte!
*** Link Utili ***
Non posterò link riguardanti i CMS perché già c'è un thread apposito raggiungibile dal thread del regolamento.
Qui di seguito metto una lista di framework reperibili su internet:
Generic PHP Framework: http://sourceforge.net/projects/gpfr/
Seagull PHP Framework: http://seagull.phpkitchen.com/
Magic Web Solutions: http://www.magicwebsolutions.co.uk/PHP-Framework.php
FuseBox: http://www.fusebox.org/
MidGard Project: http://www.midgard-project.org/
L'ultimo secondo me è il migliore che c'è sul mercato
In fine metto pure il mio, su cui sto lavorando
CMSoft: http://forum.phpsoft.it/index.php?act=SF&f=10
Per vederlo funzionante (Sul mio framework sto costruendo un CMS):
http://cmsoft.phpsoft.it