Joomla.it Forum

Non solo Joomla... => Sviluppo => : mitchie 30 Jul 2010, 09:03:27

: [RISOLTO] 2 model e 1 problema
: mitchie 30 Jul 2010, 09:03:27
Però non è un film!  ;D

Come si può far interagire due model tra loro?

Scenario:
3 archivi, 3 controller, 3 model, 3 view. In verticale (Controller->Model->View) nessun problema.
Poniamo però il caso che nel model 1 ci sia un metodo che aggiorni un campo della tabella1. E che nell'esecuzione del model 2 debba eseguire la stessa operazione (aggiornamento tabella 1) in presenza di una particolare situazione. Devo riscrivere lo stesso metodo nel model 2? E se anche nel model 3 abbia necessità di eseguire l'aggiornamento della tabella 1 in presenza di una particolare situazione? Devo riscriverla anche nel model 3? Dubito che sia questa la soluzione perché non mi pare un gran vantaggio...

Come si può eseguire un metodo presente in un model richiamandolo da un altro model?

L'alternativa, gestione delle operazioni dal controller, che può dialogare con più model, è assai laboriosa perché questo è un esempio banale ma la mia necessità è assai più complessa.

Insomma, in verticale ho capito i vantaggi, ma se uno avesse necessità dell'orizzontale?  ???
claudio
: Re:2 model e 1 problema
: mau_develop 30 Jul 2010, 09:30:31
3 controller?? ..verticale...orizzontale?

ma sei sicuro di aver capito come funziona l'mvc?
... magari poi sono io che nn ho capito nulla di ciò che hai scritto...

M.
: Re:2 model e 1 problema
: mitchie 30 Jul 2010, 09:54:57
No, sono sicuro di non aver capito per niente, altrimenti non avrei postato questa domanda.

Esattamente, cos'è che non hai capito?
: Re:2 model e 1 problema
: mau_develop 30 Jul 2010, 12:26:23
cosa ti servono 3 controller?

M.
: Re:2 model e 1 problema
: mitchie 30 Jul 2010, 12:47:50
normali operazioni sulle rispettive tabelle, inserimento, modifica, cancellazione, lista etc, con i relativi model e presentare le relative viste (view) con i relativi temp (form inserimento dati o formati lista).

Così ho capito che debba funzionare...
: Re:2 model e 1 problema
: mau_develop 30 Jul 2010, 13:10:59
il controller a seconda della richiesta porta in view ciò che il model elabora, devi rendere dinamico anche questo.

il controller , attraverso $model = &$this->getModel( 'NOME MODEL' ); può farlo

normali operazioni sulle rispettive tabelle, inserimento, modifica, cancellazione, lista etc
------------------------------------------------------------------------------------------------------------------------
questo o lo fa il model o puoi appoggiarti a degli helper

M.
: Re:2 model e 1 problema
: mitchie 30 Jul 2010, 13:45:07
si, grazie, questo l'ho capito.

Come ho detto la realtà è molto più complessa dell'esempio riportato.

Diciamo che il controller 2 demanda ad un metodo della classe '2' del model 2, una serie di operazioni sulla tabella 2. Fin qui dovrebbe essere la situazione classica.

Solo che in alcuni punti del processo deve verificare delle condizioni della tabella 1  (un'operazione che viene già eseguita da un metodo della classe 1 per altre esigenze del controller 1) e all'occorrenza aggiornare la tabella 1 (un'altra operazione già eseguita da un altro metodo della classe 1 nel model 1).
Mi sembrava intelligente sfruttare l'esistenza dei due metodi già esistenti nel model 1 chiamandoli direttamente dal model 2.

Come giustamente dici tu $model = &$this->getModel( 'NOME MODEL' ); va richiamata dal controller, il che implica, a mio avviso, due controindicazioni:
1. spostare nel controller la 'logica interna' (passami il termine) del metodo del model 2
2. suddividere le operazioni prima raggruppate in un unico metodo in più metodi
Solo in questo modo, infatti, il controller è in grado di poter eseguire le appropriate parti del model 2 in funzione delle risposte ottenute dal model 1 (quando e se necessario), così come avviene adesso.

Quindi, se esiste un sistema per eseguire direttamente (previo istanziamento della classe) un metodo del model 1 chiamandolo dal model 2... ti sarei grato se mi illuminassi.
: Re:2 model e 1 problema
: mau_develop 30 Jul 2010, 14:06:53
scusa ma abbandono perchè non sono in grado di seguirti, corro il rischio di dirti stupidate.

M.
: Re:2 model e 1 problema
: mitchie 30 Jul 2010, 14:24:01
Grazie comunque della tua disponibilità.
: Re:2 model e 1 problema
: mmleoni 31 Jul 2010, 10:54:33
ciao ragazzi, a mio parere è sbagliata la premessa sottintesa ai ragionamenti fatti, ovvero che il model debba riferirsi ad una sola tabella.

nel pattern MVC non c'è corrispondenza tra il model ed una tabella fisica, in joomla ciò è fatto implicitamente, ma non è vietato che uno stesso model faccia riferimento a più tabelle né che possa essere condiviso da più controller.
questa situazione è abbastanza comune nei DB dato che la struttura dei dati è appunto relazionale, e pertanto dati tra loro correlati logicamente è normale che siano gestiti dallo stesso model.

la scelta del disegno del software ovviamente alla fine dipende da che si debba fare nello specifico.

ciao,
marco
: [RISOLTO]Re:2 model e 1 problema
: mitchie 31 Jul 2010, 17:28:18
Grazie per il tempo che vi siete presi per analizzare la situazione (non semplice), valutarla e offrire la vostra collaborazione, per di più gratuita. Grazie.
Ho trovato la soluzione.
Grazie a tutti