Quale modello si dovrebbe usare per aggiungere dinamicamente più piccole viste ad una grande vista principale?

5

Immagina una piccola GUI della calcolatrice, con operazioni di base ( +,-,/,* ), e nel menu possiamo controllare ad esempio un calcolatore scientifico e una piccola nuova vista con accanto le funzioni extra.

Stavo pensando che il modello di decoratore è la soluzione ma dopo aver letto alcuni documenti su di esso, ora sono confuso. Quale modello sarebbe più adatto per fare cose del genere?

    
posta user1125516 25.12.2012 - 18:52
fonte

4 risposte

1

Ho appena dato un'occhiata al calcolatore di Windows XP. Mentre è vero che i tasti numerici e quelli di memoria appaiono nella stessa posizione generale nella vista standard e scientifica, credo che sia quello di creare un'interfaccia coerente per l'utente.

In sostanza, un calcolatore standard / scientifico presenta due diversi punti di vista all'utente. La vista scientifica è un super set della vista standard.

Un modo per scrivere un'applicazione calcolatrice è scrivere il codice per la vista scientifica. Un modello di strategia o comando potrebbe rivelarsi utile per scrivere il codice della tua calcolatrice.

Puoi quindi utilizzare lo stesso codice per la vista standard, in quanto la vista standard è un sottoinsieme della vista scientifica.

L'applicazione cambierà le visualizzazioni a seconda dell'opzione selezionata dall'utente.

    
risposta data 26.12.2012 - 16:16
fonte
13

Dovresti davvero iniziare a scrivere il programma / app prima di applicare i pattern. Guarda cosa emerge invece di forzare un modello arbitrario. Dato che si tratta di una piccola applicazione per calcolatrice che si desidera creare, non è necessario applicare un motivo ancora.

Di solito questo è il modo in cui lavoro; programma qualcosa, quindi refactoring verso un pattern se ce n'è bisogno. Altrimenti è abbastanza semplice sovra-ingegnerizzare qualcosa.

Nel tuo caso, hai provato ad applicare il pattern di decorazione alla gestione delle visualizzazioni. In termini di dati potrebbe avere senso, tuttavia le visualizzazioni sono completamente diverse. Inizia invece a scrivere una vista di base per eseguire le operazioni di base. Quindi prova a creare la vista scientifica e rifatta il codice in modo da poter riutilizzare le azioni della vista di base. Potresti ritrovarti con una struttura simile a M-V-C .

    
risposta data 25.12.2012 - 19:17
fonte
1

Utilizzare MVC in combinazione con qualcosa come Prism sarebbe una buona scelta in uno scenario come questo.

Non sono un grande fan dell'uso dei pattern, poiché mi sembra molto restrittivo se implementato dall'inizio di un progetto, ma crea un certo senso di stabilità e promuove il riutilizzo del codice in un'azienda se si tratta di criteri aziendali.

    
risposta data 25.12.2012 - 20:20
fonte
1

Penso che in questo caso non sia necessario uno schema, ma un principio. In questo caso, il principio di sostituzione di Liskov . Le tue piccole viste dovrebbero implementare la stessa interfaccia, in modo che la vista grande possa gestirle (nella misura necessaria in base alla lingua che stai utilizzando). Anche le classi di dati dovrebbero utilizzare questo principio, in modo che la vista piccola possa essere passata nei dati e restituirla al codice di cablaggio senza particolare considerazione per ciò che, in particolare, sta succedendo.

Trovo che non sia stato in grado di fare un'applicazione di qualsiasi complessità in cui la sostituzione di Liskov sia perfetta, e ciò è probabilmente dovuto a limitazioni in me rispetto al principio. Ma io tendo a pensarlo come una macchina per la soda in un ristorante. Ti interessa il tipo specifico nella stanza sul retro, dove si collegano i tubi alle scatole di sciroppo, e ti interessa ancora quando è nella tua tazza, ma in mezzo passa tutto attraverso il tubo allo stesso modo.

Quindi di solito avrò il mio tipo di visualizzazione dell'endpoint: controlla IDataObject per assicurarti che sia congruente con la vista. L'altra estremità (la stanza sul retro) per me è tipicamente un Builder e / o un Abstract Factory che ha riferimenti a molte fabbriche specifiche e chiama quelle corrette sulla base di alcune condizioni inerenti ai dati (in genere ho un tag nell'origine dati XML che dice "tira la factory registrata con questo nome" e un hash che contiene le fabbriche).

Ho la fortuna di svilupparmi in Flash, e consento a Flash di essere la Fabbrica dei miei Views e semplicemente raccogliere riferimenti ad essi una volta che sono stati istanziati, ma se devi costruire manualmente Views, puoi probabilmente usare qualcosa di simile a quello che ho descritto per la costruzione dei dati.

Mi congratulo per il fatto che stai pensando al design in prima fila, perché nella vita reale pochi boss ti permetteranno di tornare indietro e strappare i tuoi esperimenti iniziali a favore di un design più robusto / manutenibile. Nota che è sufficiente a breve termine sviluppare le tue viste e il tuo modello in interfacce - dovresti trovare molto più semplice aggiungere qualche tipo di Factory più tardi di quanto non faccia per rifare la logica che la tua gestione può vedere fisicamente.

    
risposta data 25.12.2012 - 20:20
fonte

Leggi altre domande sui tag