A volte quando scrivo una classe o un pezzo di codice che deve occuparsi di analisi o elaborazione dei dati, devo chiedermi se potrebbe esserci una soluzione migliore al problema.
Esempio 1: In un recente esame abbiamo dovuto scrivere una simulazione per un servizio di car sharing. Ci è stata data una città che è stata divisa in diversi (n * n) distretti. Ogni distretto ha lavorato in modo indipendente e ha avuto due funzioni. Il primo rappresentava la quantità di auto che erano state prese in prestito e la seconda la quantità di auto che erano state restituite (in questo specifico distretto, all'ora). Ora dovevamo calcolare alcuni valori per ogni distretto.
Ovviamente avevo una classe di città e una classe di distretto. La domanda è: Dove trovo la parte di simulazione? Potrei scrivere una funzione all'interno della classe distrettuale o scrivere una classe dedicata (simulatore) che gestisca tutta l'elaborazione.
Quindi in pratica:
City.Simulate()
foreach District in City
District.Simulate
return results
o
Simulator(City)
Simulate
Get all district objects
do simulation & collect results
return results
Alla fine ho deciso di andare con la prima opzione, ma non sono davvero soddisfatto di questo approccio.
Esempio 2: Forse il problema si chiarisce con questo esempio. Attualmente sto scrivendo un broker MQTT e sto lavorando al parser di pacchetti. Esiste una classe per ogni tipo di pacchetto (Connect, Publish, Subscribe, ecc.). Dove devo eseguire l'analisi?
Per questo progetto ho creato una classe dedicata per l'analisi che ha una funzione per ogni tipo. Tuttavia, in un progetto precedente (simile), ogni classe di pacchetti ha fornito una funzione di analisi personalizzata.
Quindi una domanda più generale sarebbe: A che punto posso esternalizzare l'elaborazione dei dati / a quale punto posso elaborare i dati all'interno della classe stessa?