[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