Maggiore espressività in un'applicazione console

Nell'ultimo periodo mi sono concentrato non su architetture tradizionali (web o desktop), ma su processori ed elaboratori che macinano grossissime quantità di informazioni in background in modo asincrono.

In questo genere di progetti, l'interazione utente non è la cosa più importante; lo sono invece la gestione degli errori, il tracciamento dei vari step applicativi in tutte le fasi dell'elaborazione e, più di tutto, le prestazioni. Lo scopo finale è ottenere un sistema che sia in grado di completare il workflow attraverso una sequenza ben definita di semplici passi logici, tutti tracciabili e ben evidenti anche in fase di analisi dei log.

Un'applicazione console è la scelta più indicata per iniziare a sviluppare (e testare) un elaboratore massivo, perchè rimuove i "fronzoli" di un sistema tradizionale, permettendo di concentrarsi sul lavoro che deve essere portato a termine.

Ben presto ci si rende però conto che la semplice "WriteLine" della console di .NET non è così tanto "espressiva", e spesso si fa molta fatica a riconoscere nell'enorme sequenza di stringhe di testo che scorre sullo schermo, i messaggi rilevanti. In particolare è molto complesso evidenziare eventuali errori rilevati a "runtime", oppure step intermedi di elaborazione completati correttamente.

Non volendo passare ad un'applicazione desktop per risolvere la questione, mi sono chiesto se fosse possibile utilizzare in maniera più costruttiva il "minimalismo" della standard console. Dopo qualche ricerca in rete, ho individuato un'opzione dello "standard output" che non conoscevo; in ogni istante è possibile modificare il colore del "foreground" semplicemente intervenendo sulla proprietà statica di "Console".

Il meccanismo è in realtà molto semplice, ma richiede un paio di righe di codice che, sparse per un'applicazione tradizionale, risultano ripetitive. Quindi ho realizzato un semplice helper, che vi riporto qui sotto. Queste poche e semplici righe di codice, ve lo posso assicurare, hanno contribuito ad aumentare esponenzialmente l'espressività della mia soluzione; niente di trascendentale, devo ammetterlo, ma mi ha aiutato ad identificare facilmente eventuali errori scaturiti dal processo, oppure monitorare facilmente l'avanzamento dell'intero flusso. Spero possa essere utile anche a voi...

M.

Commenti

Post popolari in questo blog

Cancellazione fisica vs cancellazione logica dei dati

Restore di un database SQL Server in un container Docker

Costruire una DataSession custom con Chakra.Core