[Php-avanzado] Propuesta para tesina

Leonardo Tadei - Pegasus Tech Supply leonardot en pegasusnet.com.ar
Mar Mayo 26 21:19:22 ART 2009


Hola Gustavo!

El lun, 25-05-2009 a las 13:14 -0300, LarvaXP escribió:
> Leonardo:
>     
>     Bueno, después de tanto tiempo empezamos a dar la cara. Ya terminé
> con otros proyectos pendientes así que es hora de comenzar con php.

	Me alegra que le puedas dedicar un rato más a esto.
	Sobre todo tratándose de que no es algo que te cueste sobremanera, sino
que al contrario hacés de forma natural.

>     Mi idea de tesis es recrear un sistema de gestión de tareas. Un
> ejemplo de este puede ser el MS Proyect. Todavía no realicé un
> relevamiento de la arquitectura, necesitaría que primero me dieras el
> ok con el tema.

	Por mi no hay problema. Mandame antes el requerimiento, porque no
quiero que te embarques en algo enorme... de última me entregás un
subsistema para aprobar y después seguís con el resto.

>     Mientras tanto ya me puse a investigar los ORM. Estaba entre
> Propel y Doctrine, encaré con el primero de estos. Ya lo tengo
> configurado y funcionando en mi Pc (es tan hermoso hacer un Save() ).
> Es la primera vez que utilizó un ORM, y más o menos yo calculo que el
> ahorro de tiempo es de un 30% del total del proyecto.

	Son puntos de vista... a mi me parece medio terrible por varios
aspectos. Cómo que es responsabilidad del Cliente guardarse??? (en este
ejemplo usaré al Cliente como a un Objeto de un sistema imaginario)
	Uno es que tus clases heredan de "un desconocido para persistir. Si por
ejemplo tenés un Cliente, tiene que heredar del ORM... pero quién dice
que los clientes se guardan siempre? No pudeo crear un Cliente temporal
y luego decidir no guardarlo?  Ahh! Puedo, pero igual tengo todo ese
código de guardado.
	Otro es un colateral de este: tus clases ahora tienen un montón de
comportamiento que no son reglas del negocio, así que tu modelo de
Objetos se resiente.
	Otro más es que te fuerza a pensar en Objeto como un registro en vez de
como una entidad que hace algo en el sistema (y que por accidente
persiste entre corridas). Fijate que un diseño interesante tiene en gral
Objetos cuyos atributos son otros Objetos... y esto no se lleva bien con
Propel.
	Uno horrible es que el objeto Cliente es a su vez una colección de
clientes que te puede devolver todos los datos de la tabla! Espantoso!
Cómo que un Cliente tiene a la vez a todos los Clientes???
	Una más personal es que no me gustan mucho las anotations... los
limpiadores de código sacan los comentarios para optimizar, pero si se
sacan estos comentarios deja todo de andar.

	A mi me gustan más los ORM que se usan así:
...
$c = new Cliente();
$c->setNombre = "Leonardo";
...
$p = new PersistenManager();
$p->save($c);
...
	En este caso, el Objeto Cliente es un Objeto puro de mi negocio, y
luego le digo al ORM que lo persista... si quiero.

	La parte mala de esto es que no hay (todavía) para PHP ORMs que se
comporten de forma decente: no invasivos y que implementen persistencia
por alcance. Por ejemplo Hibernate hace casi todo esto que te cuento
arriba y está probado bien... por ejemplo es el ORM de el Gran DT.
	Por acá tenemos un borrador de un diseño y un prototipo andando con una
prueba de concepto de un bicho así, esperando a conseguir los recursos
para implementarlo...

>     No estoy utilizando ningún Framework de trabajo, de manera que el
> CRUD lo tengo que hacer a mano, la idea es también hacerme un pequeño
> generador de formularios, por lo menos para ahorrar unas horitas de
> tipeado.

	Bueno... técnicamente el ORM es un framework, así que sí estás usando
uno.
	Tener un framework que automatice la presentación de los Objetos
(porque si estás usando un ORM debés estar trabajando con Objetos, y no
con tablas) para las CRUD es cómodo, pero a veces ni vale la pena porque
se suple con un layout decente.

>     Espero tu respuesta Leonardo.

	Uh! Espero que no hayas lamentado leerla :(

	Nos vemos Gustavo!

-- 
Leonardo Tadei
leonardot en pegasusnet.com.ar
http://blog.pegasusnet.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key



Más información sobre la lista de distribución Php-avanzado