Sinto muito se essa é uma pergunta absolutamente sofisticada, mas estou curiosa para saber quais são as melhores práticas e não consigo encontrar uma boa resposta no Google.
Em Python, eu costumo usar uma classe vazia como um contêiner de estrutura de dados com capacidade super grande (como um arquivo JSON) e adicionar atributos ao longo do caminho:
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]
Isso me dá uma tremenda quantidade de flexibilidade, porque o objeto contêiner pode essencialmente armazenar qualquer coisa. Portanto, se novos requisitos surgirem, vou adicioná-lo como outro atributo ao objeto DataObj (que passo em meu código).
No entanto, recentemente me impressionou (por programadores de FP) que essa é uma prática terrível, porque torna muito difícil a leitura do código. É preciso passar por todo o código para descobrir quais atributos o DataObj realmente possui.
Pergunta : Como posso reescrever isso para maior facilidade de manutenção sem sacrificar a flexibilidade?
Há alguma idéia da programação funcional que eu possa adotar?
Estou procurando as melhores práticas por aí.
Nota : uma idéia é pré-inicializar a classe com todos os atributos que se espera encontrar, por exemplo
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]
Isso é realmente uma boa ideia? E se eu não souber quais são meus atributos a priori?