Come impostare il pattern MVC

Ciao ragazzi,

sono alle prese con un mio progettino sul quale sto utilizzando alcuni pattern tra cui MVC.

Al momento ho organizzato la struttura più o meno come descritto in questo ottimo tutorial anche se non uso Zend Framework ma un qualcosa scritto da 0 da me che sto sfruttando anche per migliorare il mio approccio agli oggetti.

L'unica differenza rispetto al tutorial è che i miei Controller al loro interno hanno (quando serve) l'istanziazione di classi DAO (che vengono usate per interfacciarsi direttamente con il DB, praticamente contengono tutti quei metodi che fanno query) e non classi Model che per il momento non ho utilizzato ma sulle quali inserirò eventualmente solo della logica lì dove servirà.

Attualmente prima di usare un Controller faccio degli include() dei rispettivi DAO e Model, quindi per esempio quando uso UtenteController in automatico mi viene fatto un include di UtenteDAO e Utente (quest'ultima è la classe Model) e così via per ciascun Controller.

Ammesso che tutta la mia impostazione sia corretta (accetto comunque suggerimenti a riguardo) il mio dubbio è questo:

nel caso in UtenteController io voglia istanziare un oggetto della classe PippoDAO come posso fare? Ovviamente sarebbe semplicissimo aggiungere un include() alla classe PippoDAO ma non vorrei "sporcare" il codice inserendo include nei metodi.

C'è una soluzione più "pulita"? Avete suggerimenti?

Spero di essere stato chiaro e grazie in anticipo

inviato 5 anni fa
Kaesar83
X 0 X

Gli include (e ovviamente anche i require) sono preistoria.

Usa __autoload() o ancora meglio spl_autoload_register()

risposto 5 anni fa
Massimiliano Arione
X 0 X

Ciao garak,

forse non sono stato chiaro.

Il mio problema riguarda l'includere una classe DAO che ha un nome diverso dalla classe Controller, ho fatto un esempio su.

La funzione __autoload() la utilizzo già e infatti mi include un DAO e una classe Model per ogni Controller, ma se io volessi inserire un DAO differente dal Controller come faccio?

La soluzione sarebbe quella di creare sempre e comunque una coppia Controller-DAO anche se il DAO in questione dovesse contenere un solo metodo che tral'altro potrebbe essere inserito in un altra classe DAO.

risposto 5 anni fa
Kaesar83
X 0 X
La funzione __autoload() la utilizzo già e infatti mi include un DAO e una classe Model per ogni Controller, ma se io volessi inserire un DAO differente dal Controller come faccio?

Devi ragionare un po' sulla logica della tua funzione di autoload.

Idealmente, dovrebbe essere in grado di caricare una qualsiasi classe in un percorso dato.

risposto 5 anni fa
Massimiliano Arione
X 0 X

Grazie garak,

la mia domanda era completamente fuori luogo, era una pippa teorica, perchè non avevo ancora testato e funziona tutto.

Sorry  :bye:

risposto 5 anni fa
Kaesar83
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda