Costruire una calcolatrice usando MVC

1

Ho programmato in Java per circa 6 mesi, e ho pensato che un test valido e impegnativo delle mie capacità sarebbe stato quello di costruire un calcolatore GUI. Di recente ho sentito parlare di questa idea di MVC e ho pensato (forse follemente) che sarebbe stato adatto per questo progetto per animali domestici. Ma mi trovo nei guai durante la progettazione, e non sono sicuro di come procedere.

Quindi ho una Model , View e Controller class. Il Model è responsabile di tutto il calcolo effettivo; il View disegna la calcolatrice e il display; e Controller :

  1. passa il clic del pulsante a View
  2. ottiene il valore di visualizzazione da Model e lo passa a View

Ah, ma i pulsanti! Voglio avere un'interfaccia Button , in cui un'istanza Button ha:

  • (unico) numero ID;
  • Nome;
  • funzione.

Quindi vorrei che il mio Controller costruisse un insieme di Button s, e [non sono sicuro di come farlo] lascia che sia View che Model usino quei pulsanti: View per il disegno, Model per il calcolo. Così ho la lista riveduta per Controller :

  1. passa i clic a View
  2. return Button ID a Model
  3. ottieni il valore di visualizzazione da Model e passa a View

Ma più lavoro su questo, più non riesco a capire come tutto questo si possa ottenere. Quindi ho diverse domande correlate:

  1. Dovrebbe essere veramente View responsabile dell'ordinamento su cui Button corrisponde a un clic? Dovrebbe essere fatto in Controller ?
  2. Devo avere più di un tipo di Button ? È necessario distinguere tra numeri, operatori, uguali, ecc.? Quale delle tre classi MVC deve conoscere la differenza?
  3. MVC è anche il modo giusto per andare qui? Esiste un modo più fondamentale e accettato di costruire un calcolatore OOP?
  4. Se MVC è davvero appropriato, cosa sto facendo male? Penso che l'aggiunta di Button s mi abbia davvero buttato fuori.
posta Query 04.12.2014 - 16:48
fonte

3 risposte

1

Invece di avere una singola classe per il modello, la vista e il controller, li renderei 3 diverse cartelle / pacchetti pieni di più classi / viste / controller. Ciò consentirà di associare ciascun pulsante o un gruppo di pulsanti a un listener / controller diverso che esegue diverse operazioni sul modello a seconda dell'ascoltatore.

Una possibile soluzione è che è possibile associare un listener a tutti i numeri, quindi ai singoli controller per ciascuna delle operazioni (+, -, *, =, ecc.)

    
risposta data 04.12.2014 - 23:44
fonte
1

Il grosso problema è decidere cosa è un modello nella tua applicazione. Solitamente MVC viene utilizzato per la presentazione / manipolazione dei dati e non si hanno realmente dati.

Potresti - per divertimento (educazione) - creare per esempio un MathOperationModel che verrebbe scambiato tra Server e Client. Implementazione di azioni tipiche CRUD (Create Read Update Delete) per questo ecc.

La calcolatrice 'gui' sarebbe probabilmente una visualizzazione di MathOperationModel, e tutto il pulsante - spingendo sarebbe a livello di interfaccia grafica. Quindi, dopo aver riempito i campi della calcolatrice (operando a, operando b, operatore) il modello sarebbe stato inviato al controllore e salvato, o semplicemente calcolato (dal Controller o da qualche classe esterna) e l'utente potrebbe essere reindirizzato a una vista semplice per double result o qualcosa che lo incapsula :) O forse il Modello manterrebbe la cronologia e lo reindirizzeresti alla Vista, solo con gli operandi / i campi di operazione cancellati e un elenco che mostra la cronologia.

Per farla breve: potresti fare meglio se pensi a un'applicazione che ha a che fare con uno scenario più orientato ai dati (database di studenti scolastici standard o dipendenti su una busta paga o anche una rubrica). Non è davvero un requisito, ma si adatta bene ...

    
risposta data 04.12.2014 - 18:05
fonte
1

Il pattern MVC è stato originariamente formulato prima che le interfacce grafiche diventassero comuni. In quell'era, era compito dell'applicazione correlare una posizione dello schermo con un particolare pulsante / campo di input. Era compito della parte Controller di MVC eseguire tale mappatura.

Al giorno d'oggi, la traduzione dei clic del mouse con una pressione del pulsante corretto (o la pressione di un tasto su un carattere in un campo di immissione) viene gestita dal sistema operativo. Per questo motivo, per dire qual è il ruolo del Controller nelle moderne applicazioni, in particolare nelle applicazioni desktop. Potrebbe essere utile guardare anche a modelli correlati, come MVVM e MVP .

In tutti questi, il componente View è responsabile dell'interfaccia (grafica) che l'utente vede.
Il componente Modello è responsabile della logica aziendale (i calcoli nel tuo caso) e dovrebbe essere completamente indipendente da come l'utente interagisce con il programma. Per il modello, non deve fare la differenza se l'utente immette un'equazione (come 1 + 2 * 3 ) o preme una sequenza di pulsanti.
La variazione tra MVC, MVP e MVVM si basa sul modo in cui i componenti Model e View sono connessi tra loro. Questo è dove, ad esempio, una stampa su un pulsante + viene tradotta per dire al modello che è stato inserito un +.

    
risposta data 04.12.2014 - 20:19
fonte

Leggi altre domande sui tag