Esta pregunta es algo independiente del lenguaje, pero no del todo, ya que la Programación Orientada a Objetos (OOP) es diferente, por ejemplo, en Java , que no tiene funciones de primera clase, que en Python .
En otras palabras, me siento menos culpable por crear clases innecesarias en un lenguaje como Java, pero siento que podría haber una mejor manera en los lenguajes menos repetitivos como Python.
Mi programa necesita hacer una operación relativamente compleja varias veces. Esa operación requiere mucha "contabilidad", tiene que crear y eliminar algunos archivos temporales, etc.
Es por eso que también necesita llamar a muchas otras "suboperaciones": poner todo en un método enorme no es muy agradable, modular, legible, etc.
Ahora, estos son los enfoques que me vienen a la mente:
1. Cree una clase que tenga un solo método público y mantenga el estado interno necesario para las suboperaciones en sus variables de instancia.
Se vería algo así:
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.
El problema que veo con este enfoque es que el estado de esta clase tiene sentido solo internamente, y no puede hacer nada con sus instancias excepto llamar a su ú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. Haga un montón de funciones sin una clase y pase las diversas variables internas necesarias entre ellas (como argumentos).
El problema que veo con esto es que tengo que pasar muchas variables entre funciones. Además, las funciones estarían estrechamente relacionadas entre sí, pero no estarían agrupadas.
3. Como 2. pero haga que las variables de estado sean globales en lugar de pasarlas.
Esto no sería bueno en absoluto, ya que tengo que hacer la operación más de una vez, con diferentes entradas.
¿Hay un cuarto enfoque mejor? Si no, ¿cuál de estos enfoques sería mejor y por qué? ¿Se me escapa algo?