[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