Pagina 3 di 6 primaprima 1 2 3 4 5 ... ultimoultimo
Visualizzazione dei risultati da 21 a 30 su 58
  1. #21
    [supersaibal]Originariamente inviato da skidx
    Io ho la mentalità (sbagliata) un po' 'fifona', per cui ho sempre paura, quando non padroneggio un metodo di lavoro, che sia limitante nel mio lavoro di codifica.
    Il tuo metodo comunque mi piace molto, se hai altre informazioni/esempi o suggerimenti in merito, sono ben accetti. [/supersaibal]
    Tieni presente che è solo una semplificazione "spaghetti" di quello che altre piattaforme (o anche alcuni frameworks PHP recenti) fanno già...diciamo al massimo dell'evoluzione possibile la tecnica che uso starà a PRADO come nel campo dei template phpsavant sta a smarty.

    Però mi piacerebbe portarla avanti e magari migliorarla, se interessa preparo un po' di documentazione e te la mando, o faccio una pillolina
    per favore NIENTE PVT TECNICI da sconosciuti

  2. #22
    mi inserisco ora ...

    ho usato un sistema ad eventi (concettualmente diverso ed errato ... xche un sistema ad eventi dovrebbe avere una message queue cosa che il mio sistema non aveva affatto) nel softwarino che ho presentato per il php-day ^^

    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  3. #23
    [supersaibal]Originariamente inviato da andr3a
    per implementare intendevo fare tutto identico con la sola differenza di poter creare eccezioni .... ovvero come fa Fabio con in piu' le exceptions, qualora l' event handler riscontrasse problemi di manipolazione dinamica...[/supersaibal]
    Allora ok, la vediamo nello stesso modo.

    Fabio, ma ben volentieri Mi sarebbe assai utile proprio in questo periodo, ché sono in fase di sviluppo (non io, il codice )

  4. #24
    [supersaibal]Originariamente inviato da daniele_dll
    mi inserisco ora ...

    ho usato un sistema ad eventi (concettualmente diverso ed errato ... xche un sistema ad eventi dovrebbe avere una message queue cosa che il mio sistema non aveva affatto) nel softwarino che ho presentato per il php-day ^^

    [/supersaibal]
    Ciao Daniele,
    cosa intendi esattamente per message queue? E' applicabile a sul web a quello che dico io?
    Cioè al fatto che "un click = una request http oggetto/azione"?
    per favore NIENTE PVT TECNICI da sconosciuti

  5. #25
    solo un appunto: non credo che la gestione degli errori possa essere affrontata con le stesse tecniche e la stessa filosofia della gestione degli eventi. Gli errori infatti nascono e muoiono sul server e possono verificarsi più di uno a catena (in questo caso andrebbe gestita una coda)
    Gli eventi invece arrivano dal client attraverso $_REQUEST e devono essere gestiti dal server, inoltre arriva solo un evento per volta.
    Quindi mi semgrano problemi diversi.
    Inoltre non perderei di vista il detto "Keep it simple, stupid!"


  6. #26
    ma io ho detto di immergere le 2 cose, no di usarne o una o un' altra, possono convivere serenamente in un' unica metodologia di gestione eventi ed errori , l' una dentro l'altra o viceversa ...
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  7. #27
    [supersaibal]Originariamente inviato da Fabio Heller
    Lato server uno script php fa da "front-controller", riceve l'accoppiata, include l'oggetto ed esegue il metodo.[/supersaibal]
    Fabio, non so se sei ancora connesso, in ogni modo lo scrivo lo stesso, leggerai poi.

    Questo è l'aspetto che mi convince di meno del tuo (ma non solo tuo) metodo.
    Il front-controller, ovvero un unico script che gestisce tutte le richieste e le smista, è un concetto che deriva da framework di altri linguaggi (penso a Cocoon), che però hanno una particolare caratteristica: l'applicazione è residente in memoria indipendentemente dalle richieste.

    In PHP, come sappiamo, le cose sono diverse: l'ambiente della nostra applicazione nasce e muore con la singola richiesta. Ogni volta.

    Avere un front-controller unico presenta quindi diversi svantaggi, secondo me. Pensiamo ad esempio ad una applicazione che può ricevere almeno... che ne so, 200 richieste diverse (richieste del tipo oggetto-metodo, come le tue, per esempio).
    Ad ogni richiesta deve essere caricata in memoria questa listona enorme (un array, per esempio) per poter fare un confronto con l'evento proveniente dall'esterno.
    Ecco, secondo me è uno spreco enorme di risorse.

    Spreco perché stiamo dicendo alla nostra applicazione di fare quello che già fa Apache per noi, e cioè smistare le richieste agli script appositi.

    Il secondo svantaggio sta nel fatto che, per ogni aggiunta alla nostra applicazione, bisogna sempre aggiungere qualcosa a questo front-controller (destinato quindi a diventare un pachiderma con l'aumento di complessità e funzionalità dell'applicazione).

    Tirando le somme, il concetto di client visto come interfaccia grafica che solleva eventi (verso il server) mi piace, solo non mi convince, IN PHP, il modo di gestirlo con un front-controller unico.

    Ora ci penso, se riesco a formulare una soluzione alternativa che sia un buon compromesso ve lo faccio sapere.

  8. #28
    un uso massiccio di JavaScript che fa tutto questo al posto del php, richiamando da quest' ultimo le sole cose da fare, senza fargli smistare un accidente ... un po' come faccio io in interazione Flash MX 2004 e php , gli eventi utili sono nel client, il quale parsa di suo le informazioni e chiede con una sola chiamata il da farsi al server

    ... o no ? :master:
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  9. #29
    [supersaibal]Originariamente inviato da andr3a
    un uso massiccio di JavaScript [...]

    ... o no ? :master: [/supersaibal]
    Ben venga l'uso di tecnologie lato client per arricchire e facilitare il compito all'utente, ma è sbagliatissimo costruirci sopra il cuore di un'applicazione o di un framework.

    A meno che tu non sia Google e stia sviluppando Gmail, certo, ma qua voliamo un pelino più bassi, e si ragiona su sistemi più versatili

  10. #30
    Sì sono ancora connesso

    Infatti quello che tu dici è tipico dei framework in linguaggi come java, ma non solo di quelli che usano il front-controller

    Si tratta di un front-controller molto semplice e atipico, non un array enorme o uno switch...case enorme.

    Se la request è questa

    oggetto-metodo

    Di volta in volta l'oggetto caricato è solo quello in questione.
    Il file incluso ha il nome dell'oggetto (faccio una bonifica ovviamente) e il metodo richiamabile (pubblico) è inserito in una lista apposita definita all'interno dell'oggetto stesso

    Ti mostro un esempio di front-controller (è ancora sperimentale perchè ho fatto alcune modifiche di recente e potrebbe cambiare nei prossimi giorni, in più non l'ho ancora adattato con la cosa degli eventi di cui si parla qui), è spaghetti e semplice ma svolge il suo compito

    Codice PHP:
    <?php

    define
    ('FRONT_CONTROLLER''index.php') ;

    define('SITE_ROOT'realpath('.')) ;

    define('CLASSES_DIR'SITE_ROOT.'/evt-classes') ;

    define('TOOLS_DIR'SITE_ROOT.'/tools') ;

    define('TPL_DIR'SITE_ROOT.'/templates') ;

    define('EVT_NAME''evt') ;


    class 
    EvtHandler
    {
        
        
    /*
            il prefisso da aggiungere, per questioni di sicurezza
            al nome della classe inclusa
            */
        
    var $incPrefix ;

        function 
    EvtHandler($includePrefix)
        {
        
            
    $this->incPrefix =  $includePrefix ;
                                 
        }
    //END constructor
        
        
        
    function call($EVT, &$params)
        {
            
            list(
    $class$event) = explode("-"$EVT2) ;
            
            
    $inclusion CLASSES_DIR."/".$this->incPrefix strtolower($class). ".php" ;

            if( include(
    $inclusion) )
            {
                                     
                
    $object  = new $class() ;
                
                
    $object->callEvt($event$params) ;
                    
            }
            else
            {
            
                
    $this->handleNoClass($class) ;
                
            }

        }
    //END function call
        

        
    function handleNoClass($class){
                              
            die(
    "La classe {$class} non esiste") ;
                              
        }
        
        
    /*
        Funzione ausiliaria per la creazione di un evento/link
        */
        
    function linkEvt($url$event=''$queryStr=array() )
        {

           
    $strQstr='' ;

           if ( !empty(
    $event)  )
           {
                
    /*
                ?evt[classe-metodo]&resto_della_query_string
                */
                    
                
    $event = array( EVT_NAME."[$event]"=>'' )  ;

                
    $queryStr array_merge($event$queryStr) ;

           }
            
            
    $queryStr array_map('rawurlencode'$queryStr) ;
                    
            foreach(
    $queryStr as $key => $val)
            {
                                                            
                
    $strQstr .= "{$key}={$val}&amp;" ;
                                 
            }

            
    $strQstr"?".$strQstr ;

            
    $url $url $strQstr ;

            return(
    $url) ;

        }
    //END function linkEvt

        
        /*
        Funzione ausiliaria per la creazione di un evento/bottone
        */
        
    function submitEvt($event)
        {
            
    /*
                evt[classe-metodo]
            */
            
    $evt EVT_NAME."[{$event}]" ;
            
            return(
    $evt) ;

        }
        
        
    /*
        Funzione ausiliaria per un evento/redirect
        */
        
    function HttpCall$evt$queryStr =array()){
                                        
            
    $host 'http://'.$_SERVER['HTTP_HOST']  ;

            
    $script  $_SERVER['SCRIPT_NAME'] ;

            
    $httpEvt str_replace('&amp;''&'EvtHandler::linkEvt($host.$script$evt$queryStr) ) ;

            
    header("Location: {$httpEvt}") ;

        }


    }
    //END class

    /*
    Prepariamo la strada all'output buffering
    */
    ob_implicit_flush(0) ;

    /*
    L'evento intercettato e da eseguire, se assente ne impostiamo uno di default
    */
    $currEvent = isset($_REQUEST[EVT_NAME]) ? key($_REQUEST[EVT_NAME]) : "Contatti-getAll" ;

    $controller = new EvtHandler('class_') ;

    $controller->call$currEvent$_REQUEST) ;


    ?>
    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 © 2025 vBulletin Solutions, Inc. All rights reserved.