[pyar] Problema de patrones/diseño

Andrés Gattinoni andresgattinoni en gmail.com
Mie Ene 12 18:33:00 ART 2011


2011/1/12 Roberto Alsina <ralsina en netmanagers.com.ar>:
> Dijo Andrés Gattinoni:
>
> Problema: tengo una clase madre (Backend) y una serie de clases hijas
> que implementan distintos backends concretos. La clase Backend define
> la interfaz pública de un backend y las hijas hacen lo necesario para
> cada tipo de backend para llevar a cabo la operación correspondiente.
> Hasta ahí ningún problema. El tema es que hay ciertas operaciones
> comunes (por ejemplo, validaciones de tipos de datos) que yo quisiera
> hacer en todos los métodos públicos, pero no quiero repetir código.
> Cuál es la mejor forma de hacerlo?
>
> Y yo digo...
>
> Porque no descomponés la función en una parte que se reimplementa "adentro"
> y una parte que no se reimplementa "afuera"?
>
> Por ejemplo, algo así:
>
> class madre(object):
>     def metodo_importante(self, args):
>         # hacemos las cosas que siempre hay que hacer
>         self.validar_args(args)
>         self.pasear_perro()
>
>         #Y ahora hacemos las cosas que pueden cambiar
>         self.hacer_trabajo(args)
>
>     def hacer_trabajo(self,args):
>         log.error("Te olvidaste de reimplementar hacer_trabajo")
>
> Y obviamente:
>
> class hija(madre):
>     def hacer_trabajo(self, args):
>         self.picar_piedra(args[0])
>
>         # etc.

Bueno, era básicamente lo que estaba haciendo... con la diferencia de
que en mi caso se llama "_hacer_trabajo", digamos.
Y, sin saberlo, creo que también es la implementación del patrón
plantilla (aunque el método "_hacer_trabajo" no es verdaderamente
abstracto).



More information about the pyar mailing list