Sto sviluppando un programma che comunica con diversi tipi di dispositivi (con i rispettivi protocolli). Dovrebbe contemporaneamente acquisire i messaggi dai dispositivi e scriverli in un file con un formato specifico. Il tempismo è molto severo, quindi si decide di essere implementato come 2 thread: uno riceve i messaggi dal dispositivo e il secondo li scrive. L'oggetto comune per entrambi i thread è una coda di messaggi.
C'è una discussione DeviceHandler
, che avvia il thread di acquisizione DeviceDriver
. A mio parere, messageQueue
oggetto dovrebbe appartenere a DeviceHandler
ed è ridondante per essere a DeviceDriver
e aumenta l'accoppiamento. Ho deciso di passarlo al metodo DeviceDriver
acquire
che dovrebbe iniziare questo thread, ma non so come combinarli entrambi senza creare messageQueue
una variabile di istanza.
Inoltre, dal momento che ottenere messaggi da dispositivi è un compito importante, gli implementatori di DeviceDriver
usano i propri richiedenti messaggi, che a loro volta dovrebbero in qualche modo ottenere la coda e in effetti riempirla di messaggi. Lo stesso problema qui. Inoltre, a causa dei dettagli di implementazione, DeviceBDriverRequestor
potrebbe essere eseguito come thread.
Quindi ho delle domande:
- Ho ragione di evitare di rendere
messageQueue
una variabile di istanza di DeviceDriver? O è accettabile averlo ovunque? - Quale sarebbe un buon modo per implementare la classe
DeviceDriver
(combinazione di metodirun()
eacquire(Queue messageQueue)
) in un modo che ho proposto? - Ci sono forse delle buone pratiche nell'affrontare tali situazioni?
Grazie in anticipo!