Pagina 1 di 7 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 66
  1. #1

    [PILLOLA] Frameworks e CMS

    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

  2. #2

  3. #3
    bella daniè.. mo' me la leggo

  4. #4
    letta
    Complimenti Danieè :metallica


    domandina
    hai detto che i Framework non janno molta importanza se sono OOP
    cioè...
    nel senso che già una struttura a classi facilita il riciclo del codice?


    There are 10 types of people in the world: Those who understand binary, and those who don't.

  5. #5
    Originariamente inviato da mascalzone
    letta
    Complimenti Danieè :metallica


    domandina
    hai detto che i Framework non janno molta importanza se sono OOP
    cioè...
    nel senso che già una struttura a classi facilita il riciclo del codice?


    nel senso che il concetto si può applicare anche alle funzioni, ma diventa tutto molto + laborioso e macchinoso è meglio farli ad oggetti, ma anche a funzioni girano...ma non che siano un granché :\
    e comunque gli oggetti, per loro natura, ti permettono il reciclo del codice

  6. #6
    vorrei fare un'aggiuntina

    Per la progettazione, sia del DB, sia del codice stesso...

    Per win:
    http://www.gentleware.com/
    http://www.visual-paradigm.com/download.php

    Per Linux:
    http://uml.sourceforge.net/index.php

    Questo per convertire l'UML a PHP!
    http://www.phpedit.net/products/xmi2php/

    Date anche un'occhio a questo come modellatore UML
    http://argouml.tigris.org/

    va sia su win sia su linux, come poseidon, ma in + ha il supporto per esportare in XMI! Quindi poi col tool di su si converte in php

    e quest'ultimo è totalmente gratuito!

    quest'ultimo, anche lui ottimo per disegnare i db!
    http://www.fabforce.net/dbdesigner4/

    gira anche su linuz

  7. #7
    Utente bannato
    Registrato dal
    Aug 2001
    Messaggi
    696
    aggiunta :metallica

  8. #8
    Bella idea quella di Daniele, questo è un argomento di cui c'era proprio bisogno di parlare, quindi spero che si continuino a postare link di ogni tipo.

    Io propongo quello che secondo me è il miglior framework PHP al momento (per un motivo che poi dirò)

    http://phrame.sourceforge.net/

    E' un porting di Jakarta Struts (come altri framework in PHP) ma è l'unico che *non* utilizza XMl per i file di configurazione ma PHP (e quindi non copia Java), questo significa che non è necessario che PHP faccia il parsing di un'enorme file di configurazione XML ad ogni richiesta.
    PHP è totalmente stateless e quindi ad ogni richiesta deve ricreare da 0 il proprio stato.

    Un progetto ancora immaturo ma promettente (sempre perchè tiene conto che PHP è PHP e non Java) è
    http://wact.sourceforge.net/, ci si trova anche un sacco di documentazione utile.

    Una piccola nota: un CMS non è sempre un framework esteso, ci sono CMS che sono sviluppati sopra un framework (vedi Typo3 e EzPublish) ma ci sono CMS che non sono framework (Nuke e affini).
    Un framework è una serie di strumenti coordinati (e una serie di regole) che consentono di creare proprie applicazioni, secondo alcuni anche PEAR è un vero e proprio framework.

    Tanto per fare dei paragoni che possono chiarire le idee: C# è un linguaggio e ASP.NET è un framework, Python è un linguaggio e Zope è un framework (e Plone è un CMS), PHP è un linguaggio e...fino ad oggi si è sentito poco bisogno di un framework, ma mano a mano che i progetti in cui viene impiegato diventano più importanti i framework spunteranno come funghi
    per favore NIENTE PVT TECNICI da sconosciuti

  9. #9
    :master: di per se anche phpnuke ha il suo piccolo (ma piccolo) framework, fatto un po da skifo, ma proprio veramente male, ma un po lo ha anche se hai ragione, ci sono anche cms se non hanno un framework alla base (e questo credo li renda peggio dei cms come phpnuke)

    cmq grazie per la correzione

    il problema dei framework, o in generale dei programmi, che salvano la configurazione tramite php e che quando devono includere il file php

    il codice

    codice:
    include\require("file.php");
    è due volte + lento di

    codice:
    $file_content = file("file.php");
    while(list(, $value) = each($file_content)) {
      $tmp = explode(',', $value);
      $key = trim(array_shift($tmp));
      $value = implode(',', $tmp);
      $_CONF[$key] = $value;
    }
    e 1 volte e mezzo + lento di estrarre la conf dal database



    ho fatto svariati bench...e preferisco mettere la configurazione su db sia per un fatto sia di semplicità sia di flessibilità, infatti salvare la conf sul db vuol dire permettere al software di poter girare in Cluster ^^
    Gli applicativi/framework che salvano file su hd troncano la possibilità di essere usati su Cluster

    quindi credo che alla base di un buon framework ci deve stare la flessibilità e questa deve anche permettere di essere usata su Cluster con un server che smista le richieste

  10. #10
    Ciao Daniele,
    mi sembra stranissimo che l'inclusione di un file PHP sia più lenta del reperimento/trasformazione dei dati dal database, perchè in questo caso allora converrebbe magari serializzare qualsiasi cosa che sia serializzabile e metterla nel DB e ricorrere alle inclusioni solo quando strettamente necessario.
    Ancora più strano che sia più rapido "parsare" da soli un file PHP anzichè servirsi dell'inclusione.

    Ma se hai fatto dei benchmark ripetuti mi fido...anche perchè sicuramente è una buona idea salvare la configurazione su database.

    La cosa importante è non scimiottare JAVA con le configurazioni XML (per via della totale assenza di persistenza in PHP), cosa che fanno quasi tutti i framework per PHP attuali (WACT e PHRAME esclusi).
    Da notare che l'assenza di persistenza in PHP è voluta, per evitare che i guai combinati danuo script possa ripercuotersi successivamente sull'intera applicazione
    per favore NIENTE PVT TECNICI da sconosciuti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.