MVP (Model-View-Presenter) Applicazione di disegno

0

Sto cercando di creare un'applicazione di disegno semplice con il pattern MVP. Consideriamo che voglio essere in grado di disegnare un cerchio e trascinare (spostare) il cerchio su uno JPanel. Dopo il trascinamento, il modello dovrebbe essere aggiornato. Inoltre, in un secondo pannello dovrebbe essere aggiornata anche la posizione centrale (x, y) del cerchio. Anche se sembra essere eccessivo, mi piacerebbe implementare il secondo pannello anche come MVP.

Attività da eseguire:

  • Trascina un cerchio con il mouse
  • La posizione del cerchio deve essere memorizzata nel modello
  • La vista dovrebbe solo disegnare, cosa c'è nel modello (un cerchio in una posizione specifica)
  • La seconda vista MPV dovrebbe mostrare il valore della posizione xey del cerchio in forma di testo.
  • A un certo punto l'utente può fare clic su un pulsante di salvataggio, che acquisirà i dati dei modelli e li archivierà in un file di testo. All'avvio la posizione dal file di testo verrà scritta sul modello e la vista aggiornata.

Ora ecco le mie domande:

  1. Ho letto molte soluzioni diverse su come implementare il pattern MVP in generale e specifiche con jgoodie. jgoodies sembra essere perfetto per componenti standard di GUI come campi di testo. Per quanto ho capito, lo spettatore dovrebbe essere solo passivo. In questo modo lo spettatore visualizza i valori trattenuti nel modello. Ora, il visualizzatore dovrebbe chiamare il presentatore in un metodo onDrag () o il peresenter dovrebbe chiamare un metodo viewer.getDragPane (). AddListener ()?
  2. Presumo in entrambe le implementazioni, il valore nel modello verrà impostato. Chi sta dicendo alla vista di aggiornare, in base ai nuovi valori nel modello? Con jgoodies la vista viene aggiornata automaticamente, ma come si fa senza jgoodie? Dovrei avere un metodo nella classe di visualizzazione come, viewer.setData (modello). Sto chiedendo perché ho letto, che la vista non dovrebbe sapere nulla del modello.

  3. Ora il secondo MVP (tabella con centroX, centroY come etichetta) deve essere avvisato da qualcuno. Chi dovrebbe essere? Ho letto che i messaggi di messaggistica sono comunemente usati, ma dalla mia esperienza personale è un po '"non cool" per il debug di messaggi di messaggistica. Esiste una best practice?

posta blaster 31.07.2018 - 01:02
fonte

1 risposta

0

Non ho familiarità con jgoodie ma penso che tu abbia due approcci standard al tuo problema di gestione degli eventi

  1. Avere una vista genitore e un presentatore per l'intera finestra che include entrambi i pannelli.

    Ciò ti consentirà di comunicare l'evento drag da un pannello e di inviare gli aggiornamenti del modello a un altro.

  2. Usa lo schema del mediatore

    Avere un bus di messaggi come dici tu, che ti iniettano in ogni presentatore facendoli ascoltare e gestire gli eventi. Ciò consente ai pannelli disconnessi di comunicare tramite il bus.

    È uno schema riconosciuto e utile, ma può aggiungere un accoppiamento lento sotto forma di nomi o tipi di eventi che devi conoscere per poterli ascoltare

risposta data 31.07.2018 - 11:07
fonte

Leggi altre domande sui tag