Estoy estudiando sobre POO y la relacion entre objetos (y como representar las relaciones entre tablas). Por lo que estuve leyendo mi problema esta relacionado con "ORM".
La verdad entiendo perfecto la teoria, lei bastante y todo va bien pero cuando me siento en la PC y paso a la práctica aparecen mis dudas...
Para practicar arme un sistema super simplificado: NOTICIAS y COMENTARIOS...
En mi base de datos tenga estas dos tablas, con una relacion tipica y simple:
Código:
NOTICIAS -id_noticia -titulo -cuerpo COMENTARIOS_X_NOTICIAS -id_comentario -id_noticia -titulo -cuerpo
En el plano de la programación, los objetos, tengo lo siguiente:
Objeto "adm_noticia" que aplica el patron ActiveTable
Objeto "noticia" que aplica el patron ActiveRecord
"adm_noticia" puede buscar todas las noticias y armar un array de objetos de tipo "noticia".
Este objeto se encarga de OPERAR en la BD: consultar, crear, actualizar, borrar.
"noticia" tiene un array con todas sus propiedades -> valores (campos de BD).
Todo objeto de este tipo depende necesariamente de un objeto "adm_noticia" para poder actualizarse, eliminarse, duplicarse, etc.
Hasta este punto está todo bien... yo puedo crear un listado de noticias y para cada caso imprimir FECHA, TITULO, CUERPO.
Ahora se me presenta un problema en cuanto a relaciones... ¿como integro los comentarios?
Mi primer aproach es repetir el modelo anterior y luego buscar cómo lo relaciono:
"adm_comentario" me permite buscar los comentarios para una noticia especifica, crear objetos de tipo "comentario" y rellenarlos.
"comentario" contiene toda la información de un comentario (titulo, cuerpo y a qué noticia pertenece).
Depende necesariamente de un objeto "adm_comentario".
"noticia" este objeto ahora tiene un array de objetos tipo "comentario".
Esto parece razonable, pero me preocupa que a simple vista pedir una noticia tenga que necesariamente involucrar el pedido de los comentarios de la misma. Y si yo quiero listar 100 noticias y solo quiero el NUMERO de comentarios para cada una, no quiero pedir los comentarios propiamente dichos... (¿esto se llama carga retardada, puede ser?).
Les paso cual es mi aproach, ante nada:
- El "adm_noticia" crea un objeto de tipo "adm_comentario" y por medio de él crea objetos de tipo "comentario" y se los carga a los objetos tipo "noticia".
- Cada objeto "comentario" depende a su vez necesariamente de un "adm_comentario" para realizar operaciones.
Entonces, si tengo que listar NOTICIAS y quiero para cada caso mostrar:
FECHA -TITULO - CUERPO - NRO. de COMENTARIOS
"adm_noticia" --- GENERA ---> "noticia"
"adm_noticia" --- GENERA ---> "adm_comentario"
"adm_noticia->adm_comentario" --- GENERA ---> "noticia->comentario[n]"
Creo que esto lo puedo programar... pero AHORA me cuelga que pasa si yo quiero alterar el CUERPO de un comentario ¿tendria que cargar TODO el arbol hasta llegar al "comentario"? es decir... ¿tendria que cargar todos los objetos con sus relaciones hasta llegar al comentario, para poder hacer "comentario->update();"?
Bueno, espero haber podido ser medianamente claro, les pido disculpas pero la verdad estoy algo mareado ya con este tema.
Espero me puedan ayudar, con que me tiren una punta con la cual yo pueda investigar ya voy a estar agradecido!!!
Un saludo y GRACIAS de antemano !!!