|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
[MVC] Condivisione oggetti tra vari Model
Mi ritrovo con la seguente struttura:
Ho diverse triplette MVC (o pseudo tali) in cui i vari Model devono interagire con uno stesso oggetto. I Model una volta istanziati caricano i propri dati da un file di configurazione e su richiesta della vista (tramite il controller) devono poter inviare dei comandi opportuni verso dei client tramite un oggetto server che dovrebbe essere a comune. Come si potrebbe strutturare? Che pattern potrei applicare per istanziare o comunque far condividere lo stesso oggetto ai vari Model? Vorrei evitare se possibile dei Model singleton in cui me la posso cavare con un Factory a cui passo l'istanza del server e altrettanto non vorrei avere il server istanziato come singleton. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
|
non puoi aggiungere al costruttore del model un istanza del tuo server ?
se poi costruisci tanti model puoi anche costruirli usando sempre la stessa istanza del server, così dovresti avere diversi model in comunicazione con lo stesso server |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Come mai scarti l' utilizzo di singleton?
|
![]() |
![]() |
![]() |
#4 | ||
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Quote:
|
||
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Perchè tutti ne parlano male?
![]() Diciamo che questo sarebbe il refactoring di un programma che ne faceva abbondante uso ed è stata la causa di un bel pò di problemi, il singleton l'hai sempre a disposizione lo chiami ovunque e a molti fa fatica pensare a come strutturare il codice, pensando solo a finire nel minor tempo possibile. Tant'è che l'attuale singleton del server è pure usato direttamente sul click di qualche pulsante, tanto doveva inviare dati immediatamente disponibili nella gui... Poi chiaramente il programma cresce e tutte queste comunicazioni dirette rendono lungo e laborioso il refactoring. |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
.
|
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Quote:
Il singleton è uno strumento molto potente per risolvere questa tipologia di situazioni. Il fatto che crei problemi, come per ogni altro pattern o artificio software, dipende dall' utilizzo e dall' implementazione che se ne da. Se proprio non se ne digerisce un utilizzo diretto, se ne può sempre nascondere la presenza e logica di funzionamento attraverso strumenti proxy. |
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
|
puoi anche modificare la concezione usuale di singleton, modificandola come pare a te...
non so se mi spiego....ma una cosa del genere ? Codice:
final public class Singleton { public static final int TIPO_UNO = 1; public static final int TIPO_DUE = 2; public static final int TIPO_TRE = 3; ... private static Singleton instance1 = new Singleton(TIPO_UNO); private static Singleton instance2 = new Singleton(TIPO_DUE); private static Singleton instance3 = new Singleton(TIPO_TRE); ... private Singleton(int tipo) { // init in funzione del parametro } // ... public static Singleton getInstance(int tipo) throws Exception { Singleton instance; if (tipo == TIPO_UNO) instance = instance1; else if (tipo == TIPO_DUE) instance = instance2; else if (tipo == TIPO_TRE) instance = instance3; else throw new Exception("Tipo dell'istanza non riconosciuto!"); return instance; } } e poi ovviamente adattarlo ai tuoi model, al server, e alle esigenze ps: ovviamente è uno pseudo codice scritto al volo, non prendetelo come funzionante o corretto... è solo una mia idea di modificare il classico singleton |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Probabilmente così facendo è più difficile fare danni rispetto al singleton direttamente sul server. |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Jul 2009
Città: Varès
Messaggi: 658
|
il vero potere del singleton alla fine è quello di evitare tante istanze dello stesso oggetto quando non se ne hanno bisogno, per il resto puoi gestirlo come pare a te..no ?
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:57.