Sto usando una classe (chiamiamola ClientImpl
) che ascolta un socket per i messaggi e poi aggiorna un listener per far sapere a% co_de che un messaggio è arrivato al socket. Il listener non è implementato all'interno di ClientImpl
, ma viene passato dalle classi utilizzando ClientImpl
. Chiamiamo la mia classe ClientImpl
per rendere il problema più facile da discutere. Una cosa importante da notare è che ClientUser
ha la proprietà del listener.
Quindi al problema: quando arriva un messaggio, voglio elaborarlo e memorizzarlo per poterlo leggere più tardi. Dato che lavoro con un framework, non posso semplicemente archiviarlo in un file. Deve essere memorizzato nell'heap per essere letto più tardi.
Quindi la domanda "è considerata una cattiva pratica avere un contenitore (array, collezione, ...) all'interno di un listener?". L'ascoltatore è molto specifico e non verrà utilizzato per nessun altro scopo. Altrimenti, ci sono buone opzioni per evitare questo?
Ho provato a pensare ad alcune opzioni, ma tutte queste sarebbero state complicate da implementare (leggi questo come: aggiungi complessità al codice.). Ad esempio, in questo modo è possibile avviare una discussione che verifica continuamente gli aggiornamenti in un buffer listener o rendere ClientUser
un Observer. Nessuno di questi modi è molto allettante. Un altro modo sarebbe iniettare una dipendenza a una raccolta esterna. Non mi piace neanche perché creerebbe una responsabilità condivisa per gestire la Collezione. Ciò probabilmente causerà problemi di concorrenza.