[pyar] Clases muy grandes (+ Clases Parciales)

Alejandro Santos listas en alejolp.com
Dom Mar 2 08:40:02 ART 2014


2014-03-01 20:44 GMT+01:00 Gonzalo Bonigo <gonzalobonigo en gmail.com>:
> Buenas!
>
> Tengo el problema de una clase muy grande con muchos métodos. No puedo
> dividir mi clase en muchas clases y usar herencia porque mi clase hereda de
> una clase generada automáticamente, e implementa los métodos que faltan,
> además como es código generado no tengo control sobre lo atributos.
>

Probaste composición en vez de herencia?

Decís que tu God Object (la gran clase autogenerada) tambien mantiene
estado, por lo que capaz querés mantener el estado entre diferentes
clases.

Podrías hacer una clase nueva por cada "vision" de la clase, pero que
no extienda la clase God sino que sea una clase independiente que
componga a God, de forma de escoder la clase God original. Lo malo es
esto es que tenés mucho código boilerplate, pero que capaz puedas
autogenerarlo modificando tu generador original, o haciendo uno
quick-and-dirty-hack una única vez.

(esto es una variante del Role Object[1])

class GodObject:
  def m1(self, ...):
  def m2(self, ...):
  def m3(self, ...):
  def mN(self, ...):

class RoleOne:
  def __init__(self, god):
    self.god = god

  def m1(self, *args, **kwargs):
    self.god.m1(self, *args, **kwargs)

class RoleTwo:
  def __init__(self, god):
    self.god = god

  def m2(self, *args, **kwargs):
    self.god.m2(self, *args, **kwargs)

y despues...

class ConcreteRoleOne(RoleOne):
  def m1(self, a, b, c):
    RoleOne.m1(self, a, b, c)


[1] http://hillside.net/plop/plop97/Proceedings/riehle.pdf


-- 
Alejandro Santos


More information about the pyar mailing list