Ver Mensaje Individual
  #3 (permalink)  
Antiguo 21/03/2007, 06:01
kaS_aPPeaL
 
Fecha de Ingreso: septiembre-2003
Mensajes: 96
Antigüedad: 21 años, 3 meses
Puntos: 3
Información Re: Capa de acceso a datos

Veamos, mi consulta va por otros tiros. Imaginemos los post de un foro y los usuarios. Evidentemente son tablas diferentes, lo único que en los post se guarda el id del usuario que lo creo.

Entonces tenemos que las tablas son así (por ejemplo):

Posts: id (int), user_id(int), texto(text)
Usuarios: id(int), nombre(varchar(50))

Y en clases lo representaríamos así:

Código PHP:
class post {
 
// atributos
 
var $id;
 var 
$user_id;
 var 
$texto;
 
// métodos
 /* los metodos que sean */
}
class 
user{
 
// atributos
 
var $id;
 var 
$nombre;
 
// métodos
 /* los metodos que sean */

Para luego manejar estas clases para por ejemplo hacer un listado, tendríamos que tener unas clases globales que manejaran a estas. Es decir

Código PHP:
class managerPost {
 
// atributos
 
var $aPosts/* array de posts */
 // metodos
 
function listarPost() { /* codigo */ }

Para los usuarios ser haría lo mismo.

Bien entonces teniendo el ejemplo de los post, es lógico que la función listar fuera así:
Código PHP:
function listarPost($oBaseDeDatos) { 
 
$sql "select * from posts;"
 
$resultado $oBaseDeDatos->query($sql);
 
/* hacemos lo que sea con el resultado */

Bien, con esto tengo una función que me lista todos los post. Guay, pero..y si yo quiero que en el listado aparezca el nombre del usuario que lo hizo?

En SQL es bien sencillo, se puede hacer un join de las tablas de usuarios y post y solucionado. Pero haciendo esto con SQL, el tema de los objetos me lo paso por el arco del triunfo y claro, teniendo un gestor de base de datos por debajo (MySQL o lo que sea), veo una tontería tener que recuperar el post y luego hacer otra llamada SQL sólo para recuperar el nombre del usuario. De ahí la necesidad de la capa de enlace de datos que interactuara sin violar el tema de los objetos.

Por más que he buscado no he encontrado nada que me dé solución, por lo que creo que la solución pasaría por dar un atributo más a la clase post, que sea por ejemplo $nombreUsuario, y que sólo cuando haga un listado, coga valor.

¿Qué os parece esta solución?

Última edición por kaS_aPPeaL; 21/03/2007 a las 06:05 Razón: Posteé antes de terminar (:S)