Nel tentativo di consolidare la mia comprensione dello schema di comando, ho deciso di scrivere un'applicazione per la calcolatrice che l'ha utilizzata.
Dopo aver fatto alcuni progressi, mi sono reso conto che la mia scelta di applicazione potrebbe non essere stata la scelta ideale.
Hoiseguenticomponenti:
View.xml
Questaèl'interfacciautentedellacalcolatriceedèequivalenteal"client" nel diagramma. Questo è il mio livello di vista.
Controller.cs
Questo è l'equivalente del "invocatore" nel diagramma, questo contiene i comandi e le chiamate vengono eseguite su di essi. Questo è il mio controller layer
Model.cs
Questo è l'equivalente del "ricevitore" sul diagramma.
commandOne.cs, comandTwo.cs, commandMinus.cs ...... etc
Questi sono i miei comandi concreti, che definiscono un legame tra un'azione e il modello.
Oltre a eseguire i comandi, il controller inserisce anche una coda di comandi allo scopo di annullare e ripristinare.
Nell'applicare il modello di comando a un calcolatore, mi sono reso conto che l'esecuzione dei comandi è differita fino a quando l'intera espressione è stata creata e gli uguali sono stati premuti. Ho quindi impostato la ricodifica della sequenza di pressioni dei pulsanti nel livello del modello prima di rendermi conto che avevo già un contenitore che li memorizza nella forma della coda di annullamento / ripristino nel controller.
Quindi, la mia domanda è, dovrei passare il mio controller / invoker al livello del modello quando l'espressione è stata completata in modo che i comandi in coda possano essere eseguiti in sequenza per calcolare il risultato.
O devo mantenere una coda simile nel livello del modello allo scopo di valutare l'espressione quando il pulsante equals è stato premuto.