2011-09-20 15 views
5

Sto scrivendo una piccola applicazione desktop Java e sto usando un pattern MVC. Ho letto su come la logica dovrebbe essere mantenuta nel modello, ma ci sono alcuni punti in cui la logica deve essere applicata, ma è completamente correlata a come funziona la GUI. Ho anche letto che i livelli dovrebbero essere progettati per consentire una vista "collegabile", nel senso che se si volesse trasformare l'app in un'app a linea di comando, si dovrebbe comunque essere in grado di utilizzare lo stesso modello con problemi minimi.Quanta logica GUI è troppo in MVC?

Nella mia app, un'immagine viene visualizzata in un riquadro di uno splitpane. C'è anche una casella di controllo che determina se l'immagine viene ridimensionata o meno dinamicamente mentre l'utente ridimensiona il riquadro. Mi sento come se avessi due possibili soluzioni:

  1. Quando l'utente fa clic sulla casella di controllo, il valore viene memorizzato nel modello . Ogni volta che il riquadro viene ridimensionato, tale valore verrà verificato per verificare se l'immagine deve essere ridimensionata.

  2. Poiché l'opzione riguarda solo come le funzioni GUI, non importunerebbe memorizzazione del valore nel modello, e sarebbe verificare la casella direttamente sul ridimensionamento del riquadro.

Questo è un esempio un po 'tonico, ma illustra il mio problema. Sto prendendo la separazione della logica troppo da un estremo qui?

risposta

3

"logica" possono essere suddivisi in tre categorie per MVC:

  • logica di convalida - questo dovrebbe essere nel modello.
  • Logica business/repository - questo dovrebbe essere nel controller.
  • Logica di visualizzazione e comportamento - questo dovrebbe essere nella vista.

Sembra, nel tuo esempio, che tu sia in logica comportamentale (ad esempio, la vista) a questo punto.

1

Non tutta la logica dovrebbe essere separata dalla vista, ma la logica aziendale dovrebbe essere sicuramente.

Vorrei estrarre la logica relativa all'interfaccia utente anche in classi separate, ma per il Separation of Concerns.

Un'efficace regola empirica per la separazione delle preoccupazioni consiste nel porsi la seguente domanda: "Se un requisito cambia (riguardo all'interfaccia utente, alla convalida ecc.) - quali parti/classi della mia applicazione dovrei cambiare allora?"

1

Dai uno sguardo allo Presentation Model.

Presentazione Modello:

rappresentano lo stato e il comportamento della presentazione indipendentemente i controlli GUI usati nell'interfaccia

che ho incontrato questo problema molte volte. Immagina che ti venga chiesto di fare quanto segue.

Il controllo B deve apparire se il giorno è lunedì.

Bene, questa è la logica aziendale e non dovrebbe essere nella vista. La vista non dovrebbe riguardare questo tipo di logica. Quello che la vista deve solo sapere è se un determinato controllo deve essere visualizzato o meno. Pertanto, per soddisfare questo requisito, è possibile avere una classe che abbia tutte le proprietà necessarie per la visualizzazione e una proprietà denominata BVisible. Quella proprietà èBevisibile potrebbe essere stata riempita da un livello di servizio e restituisce l'oggetto necessario per la visualizzazione alla visualizzazione dei dati.

0

Il primo è vero MVC. Il secondo no. MVC è particolarmente importante per, come ha detto Kostja, la separazione delle preoccupazioni. Nei progetti più grandi questo può essere cruciale per tenere traccia di ciò che sta accadendo dove. Nei progetti più piccoli (che sono una tantum, o non verranno utilizzati in un ambiente di produzione, o sono in strumenti di casa, o qualsiasi altra cosa), è meno di un problema.

Problemi correlati