[Madrid-pm] SocorrOO!
Diego Kuperman
diego en kuperman.com.ar
Jue Mar 22 10:18:19 PDT 2007
Bruno wrote:
> Gracias por respuesta
>
por nada, fue recreativo la verdad ;)
> 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...
>
Buff... worst, worst, worst :)
Abrazo!
Más información sobre la lista de distribución Madrid-pm