Essa pergunta é um pouco independente da linguagem, mas não completamente, pois a Programação Orientada a Objetos (OOP) é diferente em, por exemplo, Java , que não possui funções de primeira classe, do que em Python .
Em outras palavras, me sinto menos culpado por criar classes desnecessárias em uma linguagem como Java, mas sinto que pode haver uma maneira melhor nas linguagens menos padronizadas como o Python.
Meu programa precisa executar uma operação relativamente complexa várias vezes. Essa operação requer muita "contabilidade", tem que criar e excluir alguns arquivos temporários, etc.
É por isso que ele também precisa chamar muitas outras "suboperações" - colocar tudo em um método enorme não é muito bom, modular, legível etc.
Agora, essas são abordagens que vêm à minha mente:
1. Crie uma classe que tenha apenas um método público e mantenha o estado interno necessário para as suboperações em suas variáveis de instância.
Seria algo como isto:
class Thing:
def __init__(self, var1, var2):
self.var1 = var1
self.var2 = var2
self.var3 = []
def the_public_method(self, param1, param2):
self.var4 = param1
self.var5 = param2
self.var6 = param1 + param2 * self.var1
self.__suboperation1()
self.__suboperation2()
self.__suboperation3()
def __suboperation1(self):
# Do something with self.var1, self.var2, self.var6
# Do something with the result and self.var3
# self.var7 = something
# ...
self.__suboperation4()
self.__suboperation5()
# ...
def suboperation2(self):
# Uses self.var1 and self.var3
# ...
# etc.
O problema que vejo com essa abordagem é que o estado dessa classe só faz sentido internamente e não pode fazer nada com suas instâncias, exceto chamar seu único método público.
# Make a thing object
thing = Thing(1,2)
# Call the only method you can call
thing.the_public_method(3,4)
# You don't need thing anymore
2. Crie várias funções sem uma classe e passe as várias variáveis necessárias internamente entre elas (como argumentos).
O problema que vejo com isso é que tenho que passar muitas variáveis entre funções. Além disso, as funções estariam intimamente relacionadas entre si, mas não seriam agrupadas.
3. Como 2., mas torne as variáveis de estado globais em vez de passá-las.
Isso não seria bom, pois tenho que fazer a operação mais de uma vez, com entradas diferentes.
Existe uma quarta abordagem melhor? Caso contrário, qual dessas abordagens seria melhor e por quê? Tem algo que estou perdendo?