entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

Estoy construyendo un sistema y he usado phpActiveRecord como OMR.

Querría saber la opinión que tienen sobre él y si hay algún OMR mejor. Gracias!

0voto

daniel_uribe_ayvar comentado

Es de hecho ORM(Object-Relational Mapping) y no OMR ;)

1 Respuesta

3votos

Leonardo-Tadei Puntos227320

Hola Diego,

es un tema largo, pero intentaré ser breve...

Primero ninguna estrategia ActiveRecord es un ORM (Mapeador Objeto/Relacional). Los Active Record entran entre los tópicos de Martin Fowler como "las prácticas que hacen las empresas", pero justamente Fowler las recoge como cosas mal hechas, que se usan igual porque funcionan, y no como ejemplo a seguir!

La cuestión es que Active Record consiste en que cada estructura de tabla se convierta en una clase, y que cada campo en un atributo, pero por el desajuste por impedancia entre el paradigma relacional y la POO, no hay forma directa de ir de un modelo al otro.

Los Active Record además llevan a un problema enorme de diseño que es el del Modelo Anémico: terminas con un montón de clases que no tienen comportamiento y son solamente campos de tablas: se lleva el modelo relacional a la jerarquía de clases alegremente, sin tener en cuenta que los principios de diseño de uno y otro con completamente diferentes.

Ahí es donde entran en juego los ORM: permiten mapear las complejidades de una jerarquía de clases en un almacenamiento relacional, de forma más o menos decente, porque, repito, son mundos distintos y no hay como llegar de un lado al otro.

Si vas a usar el modelo ActiveRecord, yo te diría que uses directamente los PDO (PHP Data Object) que provee el lenguaje, y no agregues una capa de software más. Los PDO son un ActiveRecord.

Si en cambio vas a modelar en Objetos y usarás un ORM, actualmente PHP es lo suficientemente maduro para permitir implementar Persistencia No Invasiva y por Alcance. Te recomiendo algún ORM moderno que soporte esto. En este breve apunte se explican las cualidades que debería tener un ORM y las desventajas de usar los que no cumplen con la POO: http://www.pegasusnet.com.ar/difusion/2012-10-ORM/CISL2012-MapeadorObjetoRelacional.pdf

Si querés usar un ORM que cumpla con los principios de la POO, podrías usar este https://github.com/PegasusTech/Persistent Acá lo estamos usando hace un par de años ya en proyectos en producción, y se comporta mucho mejor de la idea que da ver el código escrito ;-)

A propósito de este ORM, se aceptan ejemplos de uso sencillos para mejorar el manual. Tiene además como ventaja que podés consultar con el autor en EntreDesarrolladores ;-)

Saludos!

0voto

diego comentado

Hola Leo

Primero, gracias por tu tan esmerada respuesta.
Sobre el tema de los ORM tengo todo un dilema. Estoy desarrollando un marco de desarrollo interno desde hace 1 año y pico para la empresa en la que trabajo, y ahora, luego de algunos proyectos en los que se aplico con éxito -walmart, por ejemplo-, estoy en etapa de revisión de código. Asta ahora he estado usando php.activerecord (http://www.phpactiverecord.org), pero no me convence, o mejor dicho, quiero probar otros. Por ahí viene mi consulta.
Respecto de los orm, es todo un tema. Es absolutamente cierto todo lo que decís. La industria del soft, lamentablemente no escapa a a las modas, entre ellas, usar si o si algún orm -doctrine, propel, php.activerecord-. Cuando en alguna reunión me lo preguntan con expresión sesuda, les digo mi perorata de que hay no se cuantas capas de abstracción que hacen a aplicación segura.

En esta etapa de revisión de códigos, voy a aplicar el orm que me recomendaste y te voy a poner al tanto de los progresos. Gracias.
pd: fuí alumno tuyo en los cursos de php. Me fuí a bs. as. y me recibí de analista de sistemas, estoy especializado en php. Fuiste una gran guía.

0voto

Leonardo-Tadei comentado

Hola Diego!

pero qué chico es el mundo! Me da gusto saber que estás trabajando escribiendo software y sobre todo que seguiste con tu formación.

Respecto a los ORM, sí, son todo un tema. De hecho escribí la primer versión del que te recomiendo cuando ví que usar los existentes implicaba violar el paradigma de la POO !

Cuando tengas esas reuniones tan sesudas, mostrales el PDF de presentación del proyecto en el Congreso Internacional de Software Libre, en dónde se discuten los aspectos metodológicos, las denventajas de los demás y la rigurosidad respecto de la OO que tiene este.

Me encantará saber de tus avances. Si hacés alguna prueba ficticia cuando lo usás, te agradeceré una copia para ponerla como ejemplo de uso en GitHub. Debería ser bajo licencia GPL o compatible, así la puedo compartir.

Seguimos!

PD: luego de un tiempo prudencial marcá alguna respuesta como "seleccionada" así la pregunta queda cerrada en el foro.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta