[Madrid-pm] SocorrOO!

Bruno brunorc en gmail.com
Jue Mar 22 10:11:11 PDT 2007


Gracias por respuesta

2007/3/22, Diego Kuperman <diego at kuperman.com.ar>:
> > Y como siempre: OO puede solver muchos problemas... y añadir los nuevos :-)
> >
> Je!, si... tengo la sensacion de que me estoy perdiendo algo, pero ya me
> dices si voy por buen camino por mi interpretacion del problema :)

Pues... hay cosas que te ayudan. Despues meditar un poco he encontrado
una solución bastante elegante. Aparte de sintáxis directo:

      $cerdo->corral

Rose::DB::Object también te ofrece una subclase, que se llama
Tu::Clase::Manager y sirve para obtener mas objetos de un tipo. Pues,
yo subclasé también los Managers y ahora puedo hacer esto:

    $corral = MyApp::Corral::Manager->get_corrals(
        query => [ id => $cerdo->corral_id ]
    );

Este metodo siempre se llama "get_classname" (o
"get_classname_iterator" y te da el metodo "next" para obtener el
siguiente objeto) y te devuelve un arrayref de objetos. Porque cada
cerdo tiene solo un corral, ya podemos:

     $corral->[0]->demolish;

BURN! BURN! BURN!

Lo que me viene a la cabeza es, que se puede tapar los accesores de
relaciones en MyApp clases - por ejemplo en Cerdo.pm:

sub corral {
    my $self = shift;
    $corral = MyApp::Corral::Manager->get_corrals(
        query => [ id => $self->corral_id ]
    );
    return $corral->[0];
}

Alguna otra posibilidad es re-blessing accessor:

sub _corral {
    my $self = shift;
    my $class = (ref($self->corral)) =~ s/DB:://;
    return bless $self->corral, $class;
}

que se pudiera hacer con AUTOLOAD. Perl worst practices...

Saludos, Bruno


Más información sobre la lista de distribución Madrid-pm