Domanda

Ho implementato una logica di dominio in una serie di POJO.Voglio scrivere un'interfaccia utente Swing per consentire all'utente di avviare e vedere i risultati di varie azioni del dominio.

Qual è il modello/framework/libreria migliore per le comunicazioni tra l'interfaccia utente e il dominio?Questo si riduce a:

  • l'interfaccia utente è in grado di convertire un gesto dell'utente in un'azione di dominio
  • il dominio è in grado di inviare informazioni sullo stato/risultato all'interfaccia utente per scopi di visualizzazione

Sono consapevole di MVC come concetto ampio e ho giocato con il modello Observer (la cui implementazione Java presenta alcuni inconvenienti se ho capito bene), ma mi chiedo se esiste una migliore pratica accettata per questo problema?

È stato utile?

Soluzione

Sicuramente MVC - qualcosa del genere esempio che chiaramente divide le cose.Il problema con gli esempi Swing è che sembrano mostrare che MVC funziona tutto all'interno delle cose swing, il che non mi sembra corretto

Altri suggerimenti

MVC è fantastico per un singolo widget, tuttavia diventa un po' indisciplinato quando lo hai pages E forms con tanti widget.

Una cosa che potrebbe valere la pena esaminare (e non la sostengo, in realtà non l'ho usata, ho solo implementato qualcosa di molto simile per me stesso) è il Quadro vincolante Beans (JSR295)

In passato ho utilizzato il pattern Observer (usando la magia AspectJ). Alcuni successo, ma ho scoperto che, a meno che non si prestasse attenzione, diventava rapidamente un ammasso..eh..film?

È diventato rapidamente difficile da gestire e, soprattutto, estremamente difficile da eseguire il debug.

Modificare:

Per espandere leggermente la mia risposta, stavamo usando SWT, non Swing, quindi YMMV.Fondamentalmente abbiamo utilizzato AspectJ per collegare il trasferimento dei dati dai componenti dell'interfaccia utente agli oggetti del modello.Questi oggetti modello erano POJO stupidi.

La logica aziendale effettiva è stata eseguita "osservando" gli oggetti del modello con AspectJ e attivando l'evento richiesto se cambiavano.Quindi, se modificassi un valore in una casella di testo, AspectJ si attiverebbe e copierebbe quel valore in un POJO.Se quel campo nel POJO avesse un evento per la logica aziendale, lo farebbe Poi fuoco.Se quella logica modificasse qualsiasi POJO (e potrebbe) AspectJ se ne accorgerebbe e copierebbe il valore dal POJO nel componente dell'interfaccia utente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top