Esta pregunta es un tanto agnóstica del lenguaje, pero no completamente, ya que la Programación Orientada a Objetos (POO) es diferente en, por ejemplo, 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 creo que podría haber una mejor manera en los lenguajes menos populares como Python.
Mi programa necesita realizar una operación relativamente compleja varias veces. Esa operación requiere una gran cantidad de "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 solo método no es muy agradable, modular, legible, etc.
Ahora estos son los enfoques que vienen a mi 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 como esto:
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 solo tiene sentido 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 que se necesitan internamente 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 se agruparían.
3. Me gusta 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, mejor, enfoque? Si no, ¿cuál de estos enfoques sería mejor y por qué? ¿Hay algo que me falta?