Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Le webcam Insta360 Link 2 Pro e Link 2C Pro sono una proposta di fascia alta per chi cerca qualità 4K e tracciamento automatico del soggetto senza ricorrere a configurazioni complesse. Entrambi i modelli condividono sensore, ottiche e funzionalità audio avanzate, differenziandosi per il sistema di tracciamento: gimbal a due assi sul modello Link 2 Pro, soluzione digitale sul 2C Pro
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-12-2008, 14:44   #1
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
[MVC] Come istanziare Model View e Controller

Qual è il modo corretto di istanziare i componenti dell'MVC?
Chi deve istanziare il Model? Il Controller o il chiamante?
E il View?
Inoltre il View cosa riceve come parametri il Model e il Controller, solo il Controller e recupera il Model dal Controller, o altro?
Dato che generalmente il View è un componente grafico e ha bisogno di un riferimento alla finestra padre questo dovrebbe essere istanziato dal chiamante giusto? Altrimenti il controller dovrebbe avere conoscenze sull'interfaccia grafica utilizzata e non credo sia il caso.

E in caso di modifiche, il View segnala al Controller l'evento e poi il controller recupera i dati dal View, oppure il view passa direttamente i dati al Controller che poi provvede a modificare il Model?
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 02-12-2008, 14:11   #2
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Proprio nessuno ha qualche suggerimento su come istanziare gli elementi dell'MVC?
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 02-12-2008, 23:22   #3
tglman
Senior Member
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 414
di solito l'approccio è il view presenta i dati leggendo dal model, ed usa il controller per eseguire le operazioni, incluse le operazioni di recupero del model.
per quento riguarda le operazioni di modifica e il viè che passa i parametri al controller!!
tglman è offline   Rispondi citando il messaggio o parte di esso
Old 03-12-2008, 08:45   #4
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da tglman Guarda i messaggi
di solito l'approccio è il view presenta i dati leggendo dal model, ed usa il controller per eseguire le operazioni, incluse le operazioni di recupero del model.
per quento riguarda le operazioni di modifica e il viè che passa i parametri al controller!!
La mia domanda non era su come funziona l'MVC ma su come istanziare i vari componenti dell'MVC.

Chi e come istanzia il Model, il View e il Controller?
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 04-12-2008, 16:45   #5
Mazzulatore
Senior Member
 
L'Avatar di Mazzulatore
 
Iscritto dal: Jan 2000
Città: Torino-Taranto
Messaggi: 1166
Quote:
Originariamente inviato da tomminno Guarda i messaggi
La mia domanda non era su come funziona l'MVC ma su come istanziare i vari componenti dell'MVC.

Chi e come istanzia il Model, il View e il Controller?
MVC è un ideale approccio, non un disegno specifico, e caso per caso prende forme diverse.

per esempio in SWING:
Model, controller e view (o ViewFactory) (nel caso più difficile) sono istanziati direttamente, model è l'interfaccia per presentare i dati al controller che si occupa di programmare le view ed aggiornarle e ricavarne gli eventi. EDIT: che vengono trasformati in chiamate ai metodi di model per modificare i dati.
Controller contiene al suo interno Model, e le view, o le factory delle view passati come parametri a seconda delle circostanze nel costruttore o successivamente.
Se non consideri la view perchè vuoi usare quelle predefinite il controller se le istanzia da solo.
Detto così è troppo semplificato e poco corretto perchè... dipende infine da come lo usi guarda ad esempio come funziona JTree nella API di swing e come passargli un oggetto che implementa treemodel.

Ma in che ambito ti serve?
__________________
Esiste un virus in ambiente GNU/Linux ed è la licenza GPL.

Ultima modifica di Mazzulatore : 04-12-2008 alle 16:58.
Mazzulatore è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2008, 13:58   #6
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da Mazzulatore Guarda i messaggi
MVC è un ideale approccio, non un disegno specifico, e caso per caso prende forme diverse.

per esempio in SWING:
Model, controller e view (o ViewFactory) (nel caso più difficile) sono istanziati direttamente, model è l'interfaccia per presentare i dati al controller che si occupa di programmare le view ed aggiornarle e ricavarne gli eventi. EDIT: che vengono trasformati in chiamate ai metodi di model per modificare i dati.
Controller contiene al suo interno Model, e le view, o le factory delle view passati come parametri a seconda delle circostanze nel costruttore o successivamente.
Se non consideri la view perchè vuoi usare quelle predefinite il controller se le istanzia da solo.
Detto così è troppo semplificato e poco corretto perchè... dipende infine da come lo usi guarda ad esempio come funziona JTree nella API di swing e come passargli un oggetto che implementa treemodel.

Ma in che ambito ti serve?
Lo stavo guardando per applicarlo a WinForms (C#) o wxWidgets (C++).
Il View in sostanza dovrebbe avere un riferimento in sola lettura al Model, in quanto deve solo visualizzarne i dati mentre per modificarlo deve passare tramite il Controller.
La teoria dell'MVC afferma che l'utente dovrebbe interagire tramite il Controller, ma per come sono fatte le suddette interfacce l'utente deve per forza interagire con il View, in quanto gli eventi scatenati dall'utente vengono intercettati da metodi del View.

Come struttura pensavo che nel Main viene istanziato un Controller, il quale a sua volta istanzia internamente il Model e il View passandogli un riferimento in sola lettura al Model.

Però a runtime il View per eseguire correttamente deve istanziare un nuovo Model (penso al classico tasto "Applica" in cui tutti i dati devono essere salvati, mentre il View rimane aperto), passarlo come parametro dell'evento al Controller il quale applica le modifiche al Model corrente, con conseguente aggiornamento del View.

La struttura poi si può complicare ulteriormente tramite Mediator per la comunicazione tra vari Controller che sicuramente sono presenti nell'applicativo, ma questo esula in qualche modo dall'MVC base.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 05-12-2008, 17:27   #7
Mazzulatore
Senior Member
 
L'Avatar di Mazzulatore
 
Iscritto dal: Jan 2000
Città: Torino-Taranto
Messaggi: 1166
Quote:
Originariamente inviato da tomminno Guarda i messaggi
Lo stavo guardando per applicarlo a WinForms (C#) o wxWidgets (C++).
Il View in sostanza dovrebbe avere un riferimento in sola lettura al Model, in quanto deve solo visualizzarne i dati mentre per modificarlo deve passare tramite il Controller.
La teoria dell'MVC afferma che l'utente dovrebbe interagire tramite il Controller, ma per come sono fatte le suddette interfacce l'utente deve per forza interagire con il View, in quanto gli eventi scatenati dall'utente vengono intercettati da metodi del View.

Come struttura pensavo che nel Main viene istanziato un Controller, il quale a sua volta istanzia internamente il Model e il View passandogli un riferimento in sola lettura al Model.

Però a runtime il View per eseguire correttamente deve istanziare un nuovo Model (penso al classico tasto "Applica" in cui tutti i dati devono essere salvati, mentre il View rimane aperto), passarlo come parametro dell'evento al Controller il quale applica le modifiche al Model corrente, con conseguente aggiornamento del View.

La struttura poi si può complicare ulteriormente tramite Mediator per la comunicazione tra vari Controller che sicuramente sono presenti nell'applicativo, ma questo esula in qualche modo dall'MVC base.
Eh insomma, puoi fare come vuoi alla fine.... sicuramente "Però a runtime il View per eseguire correttamente deve istanziare un nuovo Model " non porta molti benefici in quanto non isoli le informazioni di logica.
Senti qua se ti piace:
(Sempre ispirandomi a swing semplificato all'inverosimile)
Il vero controller è Model, un wrapper vero e proprio dei tuoi dati che espone la parte interessante ai fini della visualizzazione (vedi TreeModel). Esso contiene i metodi per la modifica basati sugli eventi che immagini provengano dalla vista (edit item name, remove item, add item).
View è il controller del componente vero e proprio di rendering, cattura gli eventi e richiema i listener registrati dal controller.
View, per semplificare può leggere direttamente da model attraverso i parametri esposti, gli eventi provenienti da view sono passati al controller attraverso più delegate, function pointer, inner class come ti pare, previa registrazione.

Controller coordina il tutto...

Ma prima istanzi Model tipo MyModel model = new MyModel(myDataCollection);

Poi view MyView view = new MyView(myGraphicComponent);
oppure puoi ereditare, se puoi dalla classe graphic component ed avere:
MyView view = new MyView();

poi MyController controller = new MyController(myModel, myView);
nel costruttore di mycontroller ci sarà un myView.setModel(myModel);

In swing la View utilizza il controller per leggere, infatti JTree ha parecchi metodi pubblici per leggere i dati dal model, cambiare la vista o modificare i dati. in questo modo ti basta ereditare da JTree e fare overloading dei metodi per cambiarne il comportamento.
Inoltre anche Model ha dei listener list per notificare al controller che i dati sono stati modificati fuori dal contesto MVC.
C'è molto gioco di listener e molto codice da scrivere ma è un buon esercizio
EDIT: In questi esempi per ogni parametro dei costruttori c'è una proprietà della classe che manterrà quel valore per tutta la vita dell'oggetto.
__________________
Esiste un virus in ambiente GNU/Linux ed è la licenza GPL.

Ultima modifica di Mazzulatore : 05-12-2008 alle 17:32.
Mazzulatore è offline   Rispondi citando il messaggio o parte di esso
Old 06-12-2008, 15:29   #8
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da Mazzulatore Guarda i messaggi
Eh insomma, puoi fare come vuoi alla fine.... sicuramente "Però a runtime il View per eseguire correttamente deve istanziare un nuovo Model " non porta molti benefici in quanto non isoli le informazioni di logica.
Se non fai così e hai un Model (inteso come classe contenitore delle informazioni da mostrare, senza chiaramente tutta la Business logic) con 4 campi stringa (per fare un esempio), l'evento associato all'ipotetico tasto "Applica" deve passare 4 stringhe, il giorno che il Model avrà 5 stringhe devi cambiare interfaccia per gestire il nuovo elemento, se passi un Model eviti per lo meno di mettere mano all'interfaccia ad ogni aggiornamento.
Poi sarà il controller a gestire i singoli campi.

Certo che in questo modo la validazione dei dati viene decisamente più complessa, ci vuole un'eccezione diversa per ogni elemento mostrato per la segnalazione di eventuali valori non validi (penso al classico * accanto al campo non valido), che a questo punto deve essere fatta dal Controller.

E nel web? In teoria i controlli javascript vanno contro l'MVC perchè accoppiano View e logica.
E' anche vero che usare una chiamata Ajax ad ogni azione sulla pagina per chiedere al controller di validarla è un suicidio.

Quote:
Controller coordina il tutto...

Ma prima istanzi Model tipo MyModel model = new MyModel(myDataCollection);

Poi view MyView view = new MyView(myGraphicComponent);
oppure puoi ereditare, se puoi dalla classe graphic component ed avere:
MyView view = new MyView();

poi MyController controller = new MyController(myModel, myView);
nel costruttore di mycontroller ci sarà un myView.setModel(myModel);
Stavo guardando ASP.NET MVC e mi pare che al Controller venga passato un ViewFactory. Quello che non mi torna è il passaggio del Model. Non dovrebbe essere il Controller ad istanziarlo internamente?

Quote:
In swing la View utilizza il controller per leggere, infatti JTree ha parecchi metodi pubblici per leggere i dati dal model, cambiare la vista o modificare i dati. in questo modo ti basta ereditare da JTree e fare overloading dei metodi per cambiarne il comportamento.
Inoltre anche Model ha dei listener list per notificare al controller che i dati sono stati modificati fuori dal contesto MVC.
Da quello che avevo capito il View accedeva direttamente al Model in lettura, mentre passava dal controller per la scrittura, se invece deve passare sempre dal Controller è inutile che mantenga un riferimento al Model, non lo userebbe mai.
tomminno è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Bentornati nel 2007: le memorie DDR3 rin...
Stellantis aderisce ad AI4I e Fondazione...
Google Pixel 10a: prime conferme sul pre...
ISRO potrebbe lanciare la capsula Gagany...
Un nuovo leak conferma dimensioni e novi...
Steam Machine: requisiti Verified piu' s...
NVIDIA GeForce RTX 5070 Ti fuori produzi...
Sony ha annunciato i nuovi giochi che en...
IBM Sovereign Core: la sovranità ...
Cerchi un'asciugatrice conveniente su Am...
Ayaneo Pocket Play arriverà in ri...
iPad Pro 11'' con chip M4 scende a 949€ ...
The Sims entra in una nuova era, ma l'ac...
Netflix, Disney o Prime Video: qual &egr...
Perplexity blocca la generazione di imma...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:28.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v