Mi dispiace se questa è una domanda assolutamente sofisticata, ma sono curioso di sapere quali sono le migliori pratiche disponibili e non riesco a trovare una buona risposta su Google.
In Python, di solito uso una classe vuota come un contenitore di strutture dati super-catchall (un po 'come un file JSON), e aggiungo attributi lungo la strada:
class DataObj:
"Catch-all data object"
def __init__(self):
pass
def processData(inputs):
data = DataObj()
data.a = 1
data.b = "sym"
data.c = [2,5,2,1]
Questo mi dà un'enorme flessibilità, perché l'oggetto contenitore può essenzialmente archiviare qualsiasi cosa. Quindi, se emergono nuovi requisiti, lo aggiungerò semplicemente come un altro attributo all'oggetto DataObj (che passo nel mio codice).
Tuttavia, recentemente mi è stato impressionato (dai programmatori della FP) che questa è una pratica terribile, perché rende molto difficile leggere il codice. Uno deve passare attraverso tutto il codice per capire quali attributi ha effettivamente DataObj.
Domanda : come posso riscrivere ciò per maggiore manutenibilità senza sacrificare la flessibilità?
Ci sono idee dalla programmazione funzionale che posso adottare?
Sto cercando le migliori pratiche là fuori.
Nota : un'idea è quella di preinizializzare la classe con tutti gli attributi che ci si aspetta di incontrare, ad es.
class DataObj:
"Catch-all data object"
def __init__(self):
data.a = 0
data.b = ""
data.c = []
def processData(inputs):
data = DataObj()
data.a = 1
data.b = "sym"
data.c = [2,5,2,1]
Questa è davvero una buona idea? Cosa succede se non so quali sono i miei attributi a priori?