[Madrid-pm] SocorrOO!

Diego Kuperman diego en kuperman.com.ar
Jue Mar 22 09:06:19 PDT 2007


Bruno wrote:
> Hola todos!
> 
> Tengo problema con diseño de mis objetos. Uso Rose::DB::Object - el
> ORM más rapido de todos - y he creado mis modules (automaticamente)
> con Loader, entonces todo el código de capa de BdD está en modulos de
> [namespace] MyApp::DB.
> 
> Pues, el resto de código está en [namespace] MyApp e injere [no estoy
> seguro de palabra - en Inglés "inherits"] de su parte en MyApp::DB. El
inherits => hereda
> problema es, que cuando yo creo el objeto de tipo MyApp::Cerdo, que
> está relacionada con MyApp::Corral, puedo hacerlo:
> 
>         $cerdo->corral->nombre;
> 
> cuando "nombre" es un campo en tabla "corral", pero no puedo hacerlo:
> 
>         $cerdo->corral->demolish('irrevertible');
> 
> cuando "demolish" es un metodo añadido de MyApp::Corral, porque el
> metodo "corral" del MyApp::Cerdo siempre punta al MyApp::DB::Corral (y
> no al MyApp::Corral).
> 
No he usado Rose::DB nunca, pero a ver si entiendo el problema:

Tu quieres que el metodo ->demolish() sea del objeto corral. El objeto 
corral (MyApp::Corral) hereda de MyApp::DB::Corral. Si esto es asi 
cualquier metodo que pongas en MyApp::Corral va a ir primero que los de 
MyApp::DB::Corral, no?

La herencia la haces con "use base MyApp::DB::Corral;" ?

hmmm... aunque... se me ocurre porque puede pasar esto. Quizas el metodo 
new() en MyApp::DB::Corral esta metiendo el nombre de la clase 
"hardcoded" y rompe la herencia. Esto imagino que tiene arreglo a menos 
que a su vez lo herede de una clase base de Rose::DB :(

> Los soluciones, que veo:
>  1) cambiar las referencias en las clases generados automaticamente,
> que la solucion es más feo, que el cerdo en corral;
>  2) quitar las clases de MyApp y usar solo MyApp::DB con código
> añadido - pues, es mejor, pero
> 
Supongo que desde MyApp::Corral tambien podrias meter la funcion 
(metodo) ->demolish() en el namespace de MyApp::DB::Corral, pero ademas 
de parecerme un poco guarro entiendo que no deberia hacer falta por lo 
que te comentaba arriba...

> me gustaría no tocar las clases de MyApp::DB.
> 
> Si quiero comer el pastel y tenerlo - pues, es imposible y tengo que
> acceptarlo. Pero si teneis algunas sugerencias, os escucho con
> atención.
> 
> 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 :)

Un abrazo!
Diego



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