La mia domanda è: come posso massimizzare l'incapsulamento per le classi wrapper che si interfacciano con l'hardware.
L'hardware è collegato a un PC tramite COM-Ports o porte USB e sto leggendo / scrivendo direttamente o tramite un'API. In entrambi i casi voglio concludere un corso.
Ho letto dello sviluppo del software e dell'architettura in generale (in C #), ma non ho ancora un'idea di come le classi e gli oggetti dell'architettura possano essere collegati all'hardware.
Le cose che mi sono passate per la testa in questo senso sono i seguenti aspetti:
- Quando e come devo inizializzare l'hardware, in modo che i client della classe incapsulante non debbano preoccuparsi di questo (o il più piccolo possibile), ad esempio: è OK inizializzare l'hardware / port una volta all'avvio del programma e chiuderlo alla fine (che è quello che sto facendo attualmente) o dovrei sempre aprire e chiudere l'hardware / la porta secondo necessità.
- In relazione al primo punto: quando e come dovrei rilasciare e distruggere l'hardware e il relativo pacchetto / classe correlata.
- Devo memorizzare lo stato dell'hardware nella classe o eseguire sempre una query sul dispositivo?
- Come gestire errori / eccezioni hardware (con garbo)? In questo momento, dal momento che sto inizializzando l'hardware all'avvio, se non viene trovato un po ', il mio programma non si avvierà correttamente. Preferirei l'avvio e segnalare che non è stato trovato alcun hardware, in modo che possa essere collegato. Ma non riesco a pensare ad un'architettura decente per raggiungere questo obiettivo.
- Come posso adattarmi all'inversione di dipendenza: attualmente sto usando le fabbriche per inizializzare l'hardware e distribuire le classi wrapper attraverso un DI-container. Ciò tuttavia significa che sto inizializzando solo una volta all'avvio.
Mi rendo conto che questo è un argomento ampio con vari argomenti secondari, ma questi punti sono tutti strettamente correlati tra loro e trovo difficile trovare informazioni valide e coerenti su questo argomento.
FYI: Sono uno sviluppatore C #, ma sono interessato ai concetti generali.