Ho fatto software per molto tempo, ma quasi tutto è stato back-end centrico.
Recentemente ho deciso di imparare Swing e ho cercato di applicare i principi MVC. Mi rendo conto che in Swing the View è gestito per te dai componenti che aggiungi alla finestra / frame / pannello, e il controller è il tuo codice che risponde agli eventi. Tuttavia, quando si tratta di Model, ho scoperto rapidamente che avevo bisogno di due modelli. Uno è il modello di back-end che rappresenta l'universo di dati sottostanti. Quel modello è completamente inconsapevole dell'interfaccia utente e del fatto che sia addirittura visualizzato. Il secondo è una versione del modello con attributi aggiuntivi che regolano gli aspetti relativi alla visualizzazione.
Ad esempio, il progetto che ho scelto era uno strumento che rimandava le istanze, gli schemi e le tabelle del database in un'enorme applicazione aziendale contenente 140 istanze db, diverse centinaia di schemi e migliaia di tabelle. A volte, quando guardi un codice sconosciuto, hai un nome di tabella ma trovi l'istanza e lo schema in cui si trova è un lavoro ingrato.
Lo strumento visualizza 3 colonne: Istanza, schema e tabella DB e ogni colonna contiene solo nomi univoci. Quando si fa clic su un nome di tabella (ad esempio) lo schema e le colonne di istanza vengono filtrati mostrando dove si trova la tabella specifica. Facendo clic sul nome dello schema o sul nome dell'istanza si ottiene un comportamento di filtro simile sulle altre due colonne.
Hounmodellodiback-endchecontieneunastrutturaatrelivelli(Instance,Schema,Table)manonèappropriatoperl'interfacciautentechevogliovisualizzare.Quindihounsecondo"modello di visualizzazione" che è stato creato dal modello di back-end e supporta le tre colonne. È qui che memorizzo i flag che indicano quali voci sono visibili in base all'input dell'utente. I due modelli sono significativamente diversi nella struttura e le voci del modello di visualizzazione contengono riferimenti alle voci del modello di backend. In un certo senso le voci del modello di visualizzazione sono adattatori che consentono di gestire le voci del modello di backend in modo appropriato per la visualizzazione.
Non ho trovato riferimenti a questo, ma il mio istinto è che questo deve essere un problema molto comune. Qualcun altro si è imbattuto in questo problema e quali sono i modi di programmazione "accettati" dell'interfaccia utente per raggiungere l'obiettivo?