[pyar] Problema de patrones/diseño

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


2011/1/12 Horacio Francisco Sebastian Duran Barrionuevo
<horacio.duran en gmail.com>:
> On Wed, 12 Jan 2011 17:23:08 -0300
> Andrés Gattinoni <andresgattinoni en gmail.com> wrote:
>> Claro, lo pensé, pero lo que no quería era tener que llamar al método
>> del padre en cada subclase, porque en algún método me puedo olvidar y
>> capaz después para darme cuenta dónde pifié es un bardo. En cambio, la
> "me puedo olvidar" no es un buen argumento técnico ni pytónico y se
> soluciona bastante facil:
> * Prestá atencion.
> * TDD (o al menos hace tests)
>> forma que hice ahora, ya de entrada sé que en cada subclase voy a
>> estar re-implementando un método "privado". Si me olvido de
>> reimplementar un método, la acción no va a tener ningún resultado,
>> pero siempre se va a llamar al método de la clase madre porque es el
>> único público.
> Me da la impresion de que asi tambien te podes olvidar de algo, nada
> mas que en vez de no explotar cuando pasas el tipo correcto va a no
> hacer cosas que deberia hacer... por ejemplo persistir los datos.
> Se me ocurre que al menos en el ejemplo ese si tu elemento no es un
> Item va a explotar en algun momento.
> Nuevamente una buena cantidad de testing deberia resolver tu problema
> de olvidarte y ayudarte cuando en el futuro quieras laburar de nuevo en
> tu código.

Seguro, en eso estoy de acuerdo. El tema de las pruebas sin dudas
evitaría muchos errores y sé que debería estar haciendo pruebas.
Pero aún así creo que mi alternativa es un poco más "a prueba de
tontos", porque en vez de tener que repetir siempre la llamada al
método del padre en cada clase, reimplemento siempre un mismo método.
Si fuera PHP, por ejemplo, lo haría así:

abstract class Backend
{
    public function addItem ($item)
    {
        if(!$item instanceof Item) {
            throw new Exception("An Item object was expected");
        }
        $this->_addItem($item);
    }

    abstract protected function _addItem ($item);
}

class SQLBackend extends Backend
{
     protected function _addItem ($item)
     {

     }
}



More information about the pyar mailing list