Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di marco_c
    Registrato dal
    Jun 2004
    Messaggi
    1,047

    Implementare MVC: quale di questi 3 approcci?

    Ultimamente mi capita di dover scrivere applicazioni PHP vaste e complesse, come software gestionali web-based. Vorrei quindi abbandonare la vecchia scuola della "pagina procedurale da 1000 righe con codice misto PHP e HTML e che fa un sacco di cose" per passare ad un modo di programmare più pulito, ordinato e riusabile.

    Ho sentito parlare di MVC, di frameworks, di template solutions... Ho letto molto, anche su questo forum, ma non avendoli mai provati in prima persona ho un pò di confusione.

    Il mio obiettivo minimo è quello di isolare completamente il codice HTML dalla logica dell'applicazione... tanto per fare un esempio stupido

    Codice PHP:
    <div id="record">
       <
    div>{nome}</div>
       <
    div>{cognome}</div>
       <
    div>{età}</div>
    </
    div
    dove nome, cognome e età sono solo placeholder che poi php andrà a popolare con i relativi campi del DB e lo stesso farà in fase di inserimento e update.

    Per raggiungere questo obiettivo cosa mi conviene fare?
    - usare un sistema di template, come Smarty?
    - usare un framework, come Symphony o Zend?
    - implementarmelo da me?

    Grazie dei consigli, ciao.
    Gli uomini si dividono in due categorie: i geni e quelli che dicono di esserlo. Io sono un genio.

  2. #2
    Utente di HTML.it L'avatar di Gab-81
    Registrato dal
    Nov 2005
    Messaggi
    558
    Ciao,
    sicuramente opterei per la seconda soluzione. Ci sono molti framework (Symphony, CodeIngniter, CakePHP, Kohana e molti altri) che sicuramente snelliscono di molto i tempi di sviluppo. Eviterei sicuramente di implementarlo da zero, perché sicuramente impiegheresti un bel po' di tempo per avere un prodotto che puoi tranquillamente scaricare dalla rete (soprattuto open source)...se proprio volessi farlo da zero, sicuramente dovresti integrarci un template engine (eg Smarty), altrimenti dovresti implementarti anche questo ... Sicuramente non è facilissimo implementare secondo il pattern MVC: bisogna tener conto di tante cose che riguardano la OOP. Chi è sempre stato abituato a sviluppare codice "procedurale" può andare incontro a tante "complicanze teoriche" che rallenterebbero ulteriormente lo sviluppo...questo non vuol dire che per usare i framework di cui ti accennavo non si debbano avere nozioni di OOP, ma sicuramente queste potrebbero essere molte di meno o comunque molto più superficiali...questo è il mio consiglio, anche perché personalmente ritengo che MVC sia solo la punta di un iceberg che è la OOP, la quale ha un approccio completamente diverso dal paradigma procedurale. Iniziare di botto "cercando di applicare" MVC ad un'applicazione sia un po' come avventurarsi in un labirinto molto contorto...

    Questo è il mio consiglio: scegli un framework - BEN DOCUMENTATO - ed inizia a studiarlo, anche realizzando piccole applicazioni atte a comprenderne bene il funzionamento e qualche rudimento di OOP...

    Buon lavoro


  3. #3
    Utente di HTML.it L'avatar di Gab-81
    Registrato dal
    Nov 2005
    Messaggi
    558

    Re: Implementare MVC: quale di questi 3 approcci?

    Originariamente inviato da marco_c

    Il mio obiettivo minimo è quello di isolare completamente il codice HTML dalla logica dell'applicazione... tanto per fare un esempio stupido

    Codice PHP:
    <div id="record">
       <
    div>{nome}</div>
       <
    div>{cognome}</div>
       <
    div>{età}</div>
    </
    div
    dove nome, cognome e età sono solo placeholder che poi php andrà a popolare con i relativi campi del DB e lo stesso farà in fase di inserimento e update.
    Tieni presente che questo modo di procedere non è MVC; oltre a separare vista da logica (isolare HTML), MVC dice qualcosa in più...Modello-Vista-Controllore, quindi separare anche la logica dell'applicazione, che deve essere costruita in un certo modo...purtroppo ritengo che PHP non sia il linguaggio adatto per comprenderlo a fondo...comunque la tua soluzione è parziale rispetto all'interezza del pattern...quello che proponi puoi realizzarlo anche con un template engine come Smarty...


  4. #4
    e quello ti sembra ben isolato?
    io farei template XML+XSL

    poi devi vedere come implementare la logica delle viste

    e poi ti mancano ancora controller e model

  5. #5
    Utente di HTML.it L'avatar di Gab-81
    Registrato dal
    Nov 2005
    Messaggi
    558
    Originariamente inviato da andrea.paiola
    e quello ti sembra ben isolato?
    io farei template XML+XSL

    poi devi vedere come implementare la logica delle viste

    e poi ti mancano ancora controller e model
    Esatto ... non so se esistano template engine XML+XSL...la maggior parte, se non tutti i framework in circolazione sono smarty-like...ovviamente a meno di implementarsene uno proprio...


  6. #6
    son 5 righe di PHP fare un template XSL eh

  7. #7
    Utente di HTML.it L'avatar di marco_c
    Registrato dal
    Jun 2004
    Messaggi
    1,047
    Grazie delle risposte.

    Per ora sto sviluppando codice interamente mio, senza uso di framework.
    Sto implementando il modello MVC, appunto separando il model dalla vista dal controller.

    Nel model ho le classi che gestiscono i dati dal DB (recupero di liste, recupero di singoli oggetti, inserimento, modifica, cancellazione, validazione dei dati).
    Nel controller istanzio la classe del model, inizializzo le variabili che userò nella vista e quindi come ultima istruzione richiamo (include) la pagina (la vista).

    L'aspetto della vista è simile a questo, tutti gli oggetti o variabili vengono istanziati nel controller
    (certo, c'è sempre codice PHP, non uso template engine, ma alla fine è molto più chiaro e pulito di come lavoravo un tempo):

    Codice PHP:
    <html>
    <head><title>
    <?=$page->getTitle()?></title>
    <?=Config::get_css_files()?>
    <?=Config
    ::get_js_files()?>
    </head>
    <body>

    <?php include('header.php'); ?>
    <h1><?=$page->getTitle()?></h1>

    <form action="item_ctrl.php" method="get">
    <input type="text" name="search" value="<?=$search?>">
    <input type="submit" name="submitbutton" value="Cerca">
    <input type="reset" name="submitbutton" value="Reset" onclick="RedirectToPage('item_ctrl.php');">
    <input type="hidden" name="action" value="<?=SEARCH?>">
    </form>

    <?php foreach ($list->getErr() as $error_msg){ ?>


    <?=$error_msg?></p>
    <?php ?>

    <table border="1">
    <tr>
    <td>Codice</td>
    <td>Descrizione</td>
    <td>Prezzo</td>
    <td>Azioni</td>
    </tr>

    <?php foreach ($item_list as $counter => $item){ ($counter%2==0)?($color="#FFFFFF"):($color="#EFEFEF"?>
    <tr>
    <td style="background-color: <?=$color?>">[url="javascript:void(0);"]getID()?>&action=<?=UPDATE?>', 'item_update_popup', 400, 400, 'yes')"><?=$item->getCode()?>[/url]</td>
    <td style="background-color: <?=$color?>"><?=$item->getDescription()?></td>
    <td style="background-color: <?=$color?>"><?=$item->getPrice()?></td>
    <td style="background-color: <?=$color?>">[url="javascript:void(0);"]getID()?>&action=<?=DELETE?>', 'item_update_popup', 400, 400, 'yes')">Elimina[/url]</td>
    </tr>
    <?php ?>
    </table>

    [url="javascript:void(0);"]', 'item_update_popup', 400, 400, 'yes')">Aggiungi articolo[/url]

    <?php include('footer.php'); ?>
    </body>
    </html>
    Gli uomini si dividono in due categorie: i geni e quelli che dicono di esserlo. Io sono un genio.

  8. #8
    Utente di HTML.it L'avatar di lnessuno
    Registrato dal
    Feb 2002
    Messaggi
    2,732
    io sono passato un annetto fa a cakephp e mi ci sto trovando benissimo... provenivo anche io dalla programmazione procedurale e, tolto un primo periodo di apprendistato, ora si viaggia che è una meraviglia..

  9. #9
    non stai separando un cacchio eh

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.