Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

como deberían dividirse éstas clases?

Estas en el tema de como deberían dividirse éstas clases? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. soy de los que hacen superclases amontonadas y me decidí a dejar las malas costumbre y empezar bien. Bueno, vi un ejemplo de una pregunta ...
  #1 (permalink)  
Antiguo 07/10/2009, 14:08
 
Fecha de Ingreso: febrero-2008
Ubicación: Bahia Blanca
Mensajes: 173
Antigüedad: 16 años, 2 meses
Puntos: 7
soy de los que hacen superclases amontonadas y me decidí a dejar las malas costumbre y empezar bien. Bueno, vi un ejemplo de una pregunta que hizo un forero acá http://www.forosdelweb.com/f68/login...clases-738229/ y basandome en las respuestas me puse a jugar un poco, dividiendo dos clases, una para manejo de consultas sql y otra para manejo de usuarios que se meten en la db.

Tengo dos clases, una llamada db, que se encarga de las consultas sql que le pasa la otra clase. La otra clase 'user' instancia a la primer clase para pasarle consultas. (lo hice así para dividir el mejor el desarrollo pero creo que es peor).

Un ejemplo

class db

Código PHP:

// acá van los atributos, metodos, constructor , etc

// bla bla bla


// éste es el método que invoco desde otra clase (ver el otro código)

public function sqlInsertUser($nombeUsuario,$password) { 

return 
// consulta SQL que ingresa el user/pass que se asigna desde la otra clase


class user


Código PHP:





<?php

class User {

    private 
$_idUser;
    private 
$_nameUser;
    private 
$_passUser;
    private 
$_db;
    
    public function 
construct($nameUser,$passUser) {
    
    
$this->_nameUser=$nameUser;
    
$this->_passUser=$passuser;
    
$this->_db= new Db();
    
    }
    

// el método InsertUser llama al método sqlInsertUser de la clase 'db' para
// pasarle los argumentos.


    
public function InsertUser(){
    
    return 
$this->_db->sqlInsertUser($this->_nameUser,$this->_passUser);
    
    }

    
    
}
creo que es desastroso.

Como sería un esquema de división de dos clases? osea una que se encargue unicamente de las consultas sql y conexiones y otra que se dedique a las acciones de los usuario.
Lo que busco es que solo la clase 'user' tenga acceso desde el exterior, las demás clases son para uso interno y reciben parámetros desde otras clases unicamente.

Me trabé.

Y agrego lo siguiente, éste método de la clase User, no recibe argumentos, sino que toma los valores del constructor.

Código PHP:
    public function InsertUser(){
    
    return 
$this->_db->sqlInsertUser($this->_nameUser,$this->_passUser);
    
    }

    
    

Y el constructor solo recibe 2 argumentos y los inicializa. Pero qué pasaría si dentro de la clase user, tengo más métodos que reciben más argumentos? los argumentos los tendría pasar directamente al método
Código PHP:
public function InsertUser($argumentos){ } 
en vez de al constructor ?



Pd: Formas de pago a los que respondan:

las gracias, karma o paypal. :P a elección.

Última edición por GatorV; 07/10/2009 a las 14:59
  #2 (permalink)  
Antiguo 07/10/2009, 15:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: como deberían dividirse éstas clases?

Vas bien en tu división, el chiste es que cada clase tenga una tarea específica y pueda ser re-utilizada sin estar duplicando funcionalidad.

Lo de los demás argumentos los puedes pasar como dices en las funciones o usar getters/setters para cambiar los valores de la clase.

Saludos.
  #3 (permalink)  
Antiguo 07/10/2009, 18:55
 
Fecha de Ingreso: febrero-2008
Ubicación: Bahia Blanca
Mensajes: 173
Antigüedad: 16 años, 2 meses
Puntos: 7
Respuesta: como deberían dividirse éstas clases?

Gracias!

bueno, ya es un adelanto saber que mas o menos está bien. En cuanto termine la el codigo completo lo publico para pedir opiniones porque hay cosas que aún no me cierran bine.

saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:16.