Que tal Moron
Cita: Por ejemplo, necesito todos los libros del autor josé.
Como primera puntualización, si es un sistema OO deberían existir -por lo menos- los objetos involucrados en el problema, es decir, Autor y Libro.
Luego es un problema de paradigmas distintos, por un lado OO y por otro DER/MER, y cual es la filosofía, si aprovechamos el poder de la base de datos en detrimento de un sistema 100% POO o no nos importa la base de datos y queremos un sistema 100% POO consistente en todas sus capas.
Cita: a: Voy a la base de datos y me traigo todos los libros con sus correspondientes autores y busco en todos los objetos libros cual de ellos tiene como autor a josé.
Más que un tema de OO, es un tema de lógica en la resolución. Si quieres los libros del autor "José", en sí la navegación está definida: debes poder saber primero el nombre del autor para preguntar por sus libros.
Código PHP:
$autor = new Autor('José');
foreach($autor->getLibros() as $libro){
echo $libro;
}
Distinto sería si tienes un conjunto de libros y poder saber a quienes pertenecen (distinta navegación).
Código PHP:
$libros = Libro:getAll();
foreach($libros as $libro){
if($libro->getAutor()->getNombre() == 'José'){
echo $libro;
}
}
El punto está en "la letra del problema que quieres resolver", tratando de definir la navegación según tus necesidades y evitar al máximo tener "bidireccionalidad" entre los objetos: Libro -> Autor y Autor -> Libro (debes decidir por una sola).
Cita: b: voy a la base de datos y busco mediante el motor de la base de datos a josé y genero los objetos libros en función de la relación josé -->libro
Tu capa de persistencia debe poder obtener los datos de los libros filtrados por el autor, pero en algún momento tu dominio debería convertir los datos en objetos.
Lo ideal es ver todo el tema de diseño y relaciones a través de un diagrama UML.