Miglior design per una classe "Command Executor"

3

Scusate per il vago titolo, non potevo pensare a un modo per condensare la domanda.

Sto costruendo un'applicazione che verrà eseguita come servizio in background e raccoglierò a intermittenza i dati sul sistema su cui è in esecuzione. Una seconda applicazione per controller Android interrogherà il sistema su tcp / ip per le statistiche sul sistema.

Attualmente, il servizio in background ha una classe listener TCP che legge / scrive byte da un socket. Quando i dati vengono ricevuti, solleva un evento per notificare il servizio. Il servizio prende i byte, li alimenta in un parser di comandi per capire cosa viene richiesto e quindi passa il comando analizzato a una classe executer di comando. Quando il servizio riceve un comando "query statistics", dovrebbe restituire le statistiche tramite la connessione tcp / ip.

Attualmente, tutte queste classi sono completamente separate l'una dall'altra. Ma per il comando executer per restituire le statistiche, ovviamente avrà bisogno di accedere al socket in qualche modo. Per ragioni che non riesco ad articolare completamente, sembra errato che il comando executer abbia un riferimento diretto al socket. Sto cercando strategie e / o schemi di progettazione che posso utilizzare per restituire i dati tramite socket mantenendo le classi disaccoppiate, se possibile.

Spero che questo abbia senso, per favore fatemi sapere se posso includere qualsiasi informazione che renderebbe la domanda più facile da capire.

    
posta ConditionRacer 03.11.2012 - 19:10
fonte

2 risposte

3

Forse implementando una coda di messaggi tra qualsiasi cosa sia responsabile della connessione TCP / IP & la tua classe di parser fornirebbe un modo carino e pulito per disaccoppiare completamente tutto.

Inoltre, avrai il vantaggio aggiuntivo di qualsiasi problema di comunicazione di rete che non debba essere gestito dalla tua classe di parser. Potrebbe semplicemente aggiungere messaggi alla coda e dimenticarli - una buona separazione delle preoccupazioni. : -)

    
risposta data 03.11.2012 - 20:15
fonte
2

Ok, quindi questo è quello per cui sono andato per ora. Qualsiasi critica è gradita. Fondamentalmente ho appena modificato il comando executer per restituire un oggetto response se è richiesta una risposta, altrimenti null. In questo modo l'esecutore non ha bisogno di sapere dove sta andando la risposta. Il mediatore di servizio che si trova tra il socket e il resto delle classi controlla se la risposta è nullo e in caso contrario la codifica e la spedisce tramite la connessione tcp / ip.

    
risposta data 03.11.2012 - 21:01
fonte

Leggi altre domande sui tag