Passaggio di un'istanza della porta seriale

0

Sfondo

Sto pensando di progettare un'interfaccia a schema di comando (GoF / comportamentale). Potrei decidere di chiamare questa cosa ICommand . Sto pensando che avrei una specie di coda che contiene un mucchio di oggetti dell'interfaccia di comando. Vorrei esercitare la coda, chiamando il metodo di interfaccia Execute per ciascuno degli elementi in questa coda come segue ...

DequeuedItem.Execute(); // invoke the command-pattern

Per ogni singolo articolo in coda, fino a esaurirlo.

L'implementazione per il calcestruzzo associato a Execute può sembrare ...

// concrete implementation of execute
public void Execute()
{
    mySerialPort.ReadExisting(); // read data from a serial port
}

Da quanto ho capito, usare le porte COM può essere complicato quando si tratta di chi possiede effettivamente la porta.

Inoltre, vi sono altri motivi per cui non dichiaro solo il SerialPort all'interno dell'implementazione concreta. Ad esempio ... un sacco di comandi dovranno usare quella stessa porta (ma non allo stesso tempo). Quindi avrò bisogno di passare la porta seriale al concreto implementando ICommand . Questo mi porta nella mia domanda ...

Domanda

Una porta seriale aperta funzionerà ancora dopo averla passata a un altro oggetto?

Anche se funzionasse, ci sono altre implicazioni di cui ho bisogno di essere consapevole?

    
posta Snoop 14.04.2016 - 17:05
fonte

1 risposta

1

Passaggio del riferimento

Sì, funzionerebbe comunque perché stai solo passando il riferimento e quindi non altera l'oggetto di riferimento (né ne crea una copia)

Responsabilità per l'apertura / chiusura

Ci sono 3 possibili casi:

Un solo comando utilizza la porta seriale. La porta seriale è completamente incapsulata nel comando e viene aperta all'inizio del comando e chiusa alla fine.

Almeno 2 comandi usano la porta seriale e le prestazioni non sono un problema (non hai tempistiche per garantire). Ogni comando ha un'istanza della porta seriale (che punta alla stessa porta COM). Ogni comando è responsabile dell'apertura / chiusura. Poiché i comandi vengono eseguiti in sequenza ( DequeuedItem ) non c'è conflitto sulla porta seriale.

Almeno 2 comandi usano la porta seriale ma non puoi permetterti di aprire / chiudere la porta seriale per ogni comando. La porta seriale deve essere istanziata a un livello più alto e assegnata a tutti i comandi che ne hanno bisogno. I comandi non decidono di aprire / chiudere la porta seriale, presumono che ricevano una porta già aperta e che non dovrebbero alterarne lo stato. La porta seriale potrebbe essere aperta nel momento in cui un comando che richiede la porta seriale viene aggiunto alla coda. La porta potrebbe essere chiusa al termine della coda per eseguire l'ultimo comando che richiede la porta seriale.

In questi 3 casi, penso che non ci sia una soluzione sbagliata. Ogni caso è appropriato (o meno) a seconda dell'uso che fai (scarsamente, intensamente, accuratamente, ...). Il modo in cui usi la porta seriale mi sembra a posto.

    
risposta data 14.04.2016 - 18:25
fonte

Leggi altre domande sui tag