Cercherò di essere il più generale e specifico possibile in questa domanda- So che gli effetti collaterali sono generalmente visti come un odore di codice e di recente ho ricevuto un riscontro sul fatto che questo era un problema in una sfida di codice. Ho risposto in ruby e in termini generali è passato attraverso un processo come questo:
# used a specific csv parsing class for this to return a new Data() object with various @attributes
$> data = parse_input_from_csv(path_to_file)
# do my first bit of processing, changing some @attribute within data
$> data.process_step_a!
$> data.process_step_b! # etc... obv there were better method names
$> data.write_result
La mia domanda - in un linguaggio rigidamente Object-oriented come ruby, quale modo migliore è lì per incapsulare ciò che è fondamentalmente uno script che manipola diverse variabili? Il mio unico pensiero è quello di restituire esplicitamente i dati da ogni passaggio come
data_step_a = process_step_a(data)
data_step_b = process_step_b(data_step_a); #etc
Ma a questo punto mi sembra che inizi a spingere contro il design della classe.