Visualizzazione dei risultati da 1 a 7 su 7

Discussione: MVC - logica

  1. #1
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313

    MVC - logica

    sto ancora studiando la logica dell'MVC e mi chiedo una cosa.
    come si trattano le relazioni?
    cioé... immaginiamo che io abbia due controller (cliente e ordine). se voglio fare azioni molto semplici su ognuno di loro faccio cosi:
    Codice PHP:
    //uso il controller del cliente per mostrare le sue informazioni
    ClienteController->mostraAction() //usa la view "mostra"

    //usa la view "tutti" di ordine per mostrare una tabella degli ordini di un cliente o di tutti i clienti se $idcliente = null.
    OrdineController->tuttiAction($idcliente=null
    se io voglio creare una pagina che mostra le info di un cliente e la lista dei suoi ordini come mi comporto? che logica seguo?
    implemento l'action mostraOrdiniAction nel clienteController tipo cosi?
    Codice PHP:
    Class ClienteController extends Controller
    {
      
    //...
      
    public function mostraOrdiniAction()
      {
        
    //istanzia OrdiniController
        
    $oc = new OrdiniController;
        
    //chiedi la tabella
        
    $tabella_ordini $oc->tuttiAction($this->clienteId);
        
    //$this->view->assign('tabella_ordini', $tabella_ordini);
      
    }

    o faccio altro?

    alcool: la causa e la soluzione di tutti i problemi

  2. #2
    Ciao..
    no, il controller non devi istanziarlo tu direttamente
    all'interno di un altro controller.
    Non ho capito perfettamente, cosa dovrebbe contenere la var tabella_ordini?

  3. #3
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313
    Originariamente inviato da malesherbes
    Ciao..
    no, il controller non devi istanziarlo tu direttamente
    all'interno di un altro controller.
    Non ho capito perfettamente, cosa dovrebbe contenere la var tabella_ordini?
    forse é meglio se rifaccio la domanda

    tutte le guide che trovo su mvc, gli esempi e i tutorial usano tabelle molto semplici.
    Nella vita reale invece si ha spesso a che fare con relazioni tra tabelle. nell'esempio di sopra ho usato clienti e comande, ma il discorso puo essere esteso a moltissimi altri casi nei quali si hanno delle relazioni 1 a molti.

    se per esempio voglio mostrare tutte le risposte relative a una domanda (altro esempio) prima facevo una bella join, eseguivo la query e mostravo i risultati... come si gestiscono queste situazioni con l'MVC??

    spero di essere stato piu chiaro
    alcool: la causa e la soluzione di tutti i problemi

  4. #4
    Ciao,
    in realtà, per chiarezza, quello che ti interessa non va svolto
    nella parte C (controller) dell'MVC, ma nella parte M, nel modello.
    Il controller serve solo per gestire i parametri in input, chiedere
    le azioni corrispondenti al modello e passare alla V (view)
    i dati ottenuti.
    Dunque nel controller usi un oggetto della parte Model,
    che rappresenta il tuo
    Cliente al quale chiederai con un metodo le info - che ne so,
    getInfo() - e con un metodo gli ordini, getOrders() ad esempio,
    che ritorna una lista di oggetti Order.
    Questi dati (le info e la lista degli ordini) li passerai poi
    alla view.
    Non so se ho centrato il tuo problema, ma nella definizione
    di un'applicazione dovresti sempre concentrarti sulla parte di Model
    (o Domain).. i controllers devono un compito estremamente
    limitato..

  5. #5
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313
    Quindi la mia classe ClienteModel estenderà il funzionamento normale di Model per includere le informazioni contenute nelle altre tabelle?

    ma siccome io avrò gia un modello e un controller per tabella ordini, nel model di cliente uso il controller di ordini? o mi tocca riscrivere il codice per prendere le informazioni dal db?
    alcool: la causa e la soluzione di tutti i problemi

  6. #6
    Non mischiare model e controller, sono cose diverse e
    hanno compiti diversi.
    Se hai un oggetto Model che rappresenta gli ordini
    e che permette di ricercare ordini su varie basi
    (solitamente tramite metodi statici che restituiscono
    una lista di Order, o tramite una classe apposta che rappresenta
    la tabella o la collezione di ordini o dà accesso a questa),
    allora puoi far si che il metodo "getOrders()" dell'oggetto
    Cliente acceda a questo altro oggetto Model passandogli
    il suo id e consentendoti di fare una query che ricerchi
    ordini sulla base di un id cliente.
    Lascia perdere il controller.
    Guarda il tuo modello e risolvi lì dentro il problema
    "ho un cliente e voglio ottenere i suoi ordini".
    La cosa + semplice è tradurlo come "uso l'oggetto
    Cliente e gli mando un messaggio getOrders() che
    a sua volta usa l'oggetto Order/OrderTable/OrderDao
    passandogli l'id dell'oggetto cliente attuale".

    Poi ci sono varie alternative, più o meno ottimizzate,
    ti dico solo di non confondere Model e Controller.
    Crea un Modello sensato, che ti dà accesso ai dati
    che ti servono indipendentemente dai controllers.

  7. #7
    Utente di HTML.it L'avatar di Gumble
    Registrato dal
    Jun 2004
    Messaggi
    1,313
    grazie per le tue risposte!
    sto cercando di capire bene come funziona l'MVC e non riuscivo a decidere chi era responsabile di cosa in casi come questo.

    ora continuo ad implementare il mio framework MVC e poi vedo se il tutto ha un senso.

    ps: sto facendo un framework mio solo per capire bene la logica... non pretendo di fare meglio di quelli esistenti.
    alcool: la causa e la soluzione di tutti i problemi

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.