Implementazione del modello di osservatore con un osservatore / più editori e più eventi?

3

Sono in una situazione complicata in cui ho bisogno di utilizzare il pattern Observer ma non conosco il modo migliore per farlo.

Ecco un breve briefing sulla mia domanda:

Sto implementando un'applicazione GUI che consente agli utenti di creare diagrammi di flusso e mappe mentali facendo cadere forme su una tela e quindi manipolando le forme facendo clic, trascinando e tenendo premuto. Le mie forme hanno il tipo di classe base di MindMapComponentInstance e il mio canvas ha tipo Canvas . L'oggetto Canvas agisce come una sorta di controller, creando e memorizzando riferimenti a tutti gli oggetti MindMapComponentInstance quando un utente cade sulla tela.

Ora ho bisogno di implementare la funzionalità degli eventi del mouse. Nello specifico, ho bisogno che l'oggetto Canvas "guardi" o "ascolti" tutti gli eventi del mouse registrati sugli oggetti MindMapComponentInstance . Quindi, fondamentalmente ho una quantità indefinita di editori (gli oggetti MindMapComponentInstance ) e un sottoscrittore (l'oggetto Canvas ).

Per rendere le cose leggermente più complicate, devo essere in grado di distinguere tra diversi tipi di eventi del mouse. Un clic, trascinamento, attesa, ecc. Devono essere tutti distinti dall'oggetto Canvas , poiché deve agire in modo diverso a seconda del tipo di evento del mouse registrato dagli oggetti MindMapComponentInstance .

Qual è il modo migliore per implementare ciò di cui ho bisogno? Il modello standard di osservatori sarà sufficiente? O dovrei fare le cose in modo leggermente diverso per ottenere una migliore progettazione del codice?

EDIT: Pensavo di aver menzionato che la mia applicazione è un'app Web e come tale viene scritta in javascript, se questo aiuta.

    
posta PythonNewb 08.01.2017 - 23:19
fonte

1 risposta

2

L'osservatore funzionerà bene qui. Puoi distinguere tra il tipo di clic con il parametro evento che hai superato.

Ciò che mi preoccupa è che sembra che Canvas stia cercando di essere modello, vista e controller tutto in uno. Canvas dovrebbe avere una singola responsabilità. Se Canvas memorizza le istanze di MindMapComponentInstance è un modello. Se ascolta mentre l'utente li manipola è un controller. Se traduce il modello in un modo per presentare lo stato è una vista. Se fa tutte e tre le cose è una grande palla di fango che deve essere spezzata.

Ci sono molti modi per implementare MVC e molte varianti di esso . Ecco quello che trovo interessante .

Lo schema di osservazione è solo una piccola parte del design di una buona architettura. Non aspettarti di aggiungerlo semplicemente per aggiustare tutto.

    
risposta data 09.01.2017 - 05:51
fonte

Leggi altre domande sui tag