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

Slave Class!

Estas en el tema de Slave Class! en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Me gustaría escuchar algunas opiniones referentes al diseño como tal de las siguientes clases, que simplemente buscan abstraer de todo proceso que haga dependiente al ...
  #1 (permalink)  
Antiguo 03/04/2012, 01:42
Avatar de JairLizcano  
Fecha de Ingreso: junio-2008
Ubicación: Santander, Colombia
Mensajes: 608
Antigüedad: 15 años, 10 meses
Puntos: 53
Pregunta Slave Class!

Me gustaría escuchar algunas opiniones referentes al diseño como tal de las siguientes clases, que simplemente buscan abstraer de todo proceso que haga dependiente al objeto usuario con características definidas en la base de datos.

Para ello se resume en una clase esclavo (que a fin de cuentas es un intermediario) donde una propiedad de esta misma es el objeto sobre el cual recaen sus funciones:

Transaction.php

Código PHP:
interface Transaction {
        
        public function 
setConnection(Connection $connection);
        
        public function 
toSave();
        
        public function 
toEdit();
        
        public function 
toDelete();
        
        public function 
isExist();
    } 
Profile.php

Código PHP:
<?php
    
class Profile {

        private 
$id;
        private 
$email;
        private 
$password;
        private 
$nickname;
        private 
$firstname;
        private 
$lastname;
        private 
$sex;
        private 
$birthday;
        private 
$date;
        private 
$about;
        private 
$state;
        
        private 
$session;
        
        public function 
__construct($id){
        
            
$this->id $id;
            
$this->email NULL;
            
$this->password NULL;
            
$this->nickname null;
            
$this->firstname NULL;
            
$this->lastname NULL;
            
$this->sex NULL;
            
$this->birthday NULL;
            
$this->date NULL;
            
$this->about NULL;
            
$this->state TRUE;
            
            
$this->address NULL;
            
$this->now NULL;
        }
        
        public function 
getId() {
        
            return 
$this->id;
        }

        public function 
getEmail() {
        
            return 
$this->email;
        }

        public function 
setEmail($email) {
        
            
$this->email $email;
        
            return 
$this;
        }

        public function 
getPassword() {
        
            return 
$this->password;
        }

        public function 
setPassword($password) {
        
            
$this->password $password;
        
            return 
$this;
        }

        public function 
getNickname() {
        
            return 
$this->nickname;
        }

        public function 
setNickname($nickname) {
        
            
$this->nickname $nickname;
        
            return 
$this;
        }

        public function 
getFirstname() {
        
            return 
$this->firstname;
        }

        public function 
setFirstname($firstname) {
        
            
$this->firstname $firstname;
        
            return 
$this;
        }

        public function 
getLastname() {
        
            return 
$this->lastname;
        }

        public function 
setLastname($lastname) {
        
            
$this->lastname $lastname;
        
            return 
$this;
        }

        public function 
getSex() {
        
            return 
$this->sex;
        }

        public function 
setSex($sex) {
        
            
$this->sex $sex;
        
            return 
$this;
        }

        public function 
getBirthday() {
        
            return 
$this->birthday;
        }

        public function 
setBirthday(Array $birthday) {
        
            
$this->birthday $birthday;
        
            return 
$this;
        }

        public function 
getDate() {
        
            return 
$this->date;
        }

        public function 
setDate($date) {
        
            
$this->date $date;
        
            return 
$this;
        }

        public function 
getAbout() {
        
            return 
$this->about;
        }

        public function 
setAbout($about) {
        
            
$this->about $about;
        
            return 
$this;
        }

        public function 
getState() {
        
            return 
$this->state;
        }

        public function 
setState($state) {
        
            
$this->state $state;
        
            return 
$this;
        }

        public function 
getSession() {
        
            return 
$this->session;
        }
        
        public function 
toSession(Array $session){
                
            
$this->session $session;
            
            return 
$this;
        }
    }
?>
Profiling.php (clase esclavo)

Código PHP:
<?php
    
class Profiling implements Transaction{
        
        private 
$profile;
        private 
$connection;
        
        public function 
__construct(Profile $profile){
            
            
$this->profile $profile;
        }
        
        public function 
getProfile(){
            
            return 
$this->profile;
        }
        
        public function 
getConnection(){
            
            return 
$this->connection;
        }
        
        public function 
setConnection(Connection $connection) {
            
            
$this->connection $connection;
        }
        
        public function 
toSave() {
            
            return 
$this->connection->query("INSERT INTO profile
                                                VALUES ({$this->profile->getId()},
                                                        '{$this->profile->getFirstname()}',
                                                        '{$this->profile->getLastname()}',
                                                        '{$this->profile->getEmail()}',
                                                        '{$this->profile->getPassword()}',
                                                        {$this->profile->getSex()},
                                                        '"
.implode('-',
                                                        
$this->profile->getBirthday())."',
                                                        '{$this->profile->getDate()}',
                                                        1,
                                                        'Tester',
                                                        NULL)"
);
        }

        public function 
toEdit() {
        }

        public function 
toDelete() {
        }
        
        public function 
isExist() {
            
            
$result =  $this->connection->query("SELECT p.id
                                                    FROM profile p
                                                    WHERE p.email LIKE '{$this->profile->getEmail()}'
                                                        AND p.state = 1"
);
            
            return !(empty(
$result->num_rows));
        }
        
        public function 
toSaveSession(){
            
            list(
$address$datetime) = $this->profile->getSession();
            
            return 
$this->connection->query("INSERT INTO session
                                                VALUES (NULL,
                                                        {$this->profile->getId()},
                                                        '{$address}',
                                                        '{$datetime}')"
);
        }
    }
?>
En cuestión hay una clase esclavo por cada objeto, dependiendo de la función del objeto.

Gracias de antemano.
__________________
Programar dejó de ser una profesión acusada en la oscuridad y disfrutada fríamente... para convertirse en un arte.
  #2 (permalink)  
Antiguo 03/04/2012, 06:09
Avatar de ahaugas  
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 249
Antigüedad: 12 años, 8 meses
Puntos: 21
Respuesta: Slave Class!

Gracias, muy buena explicacion me ha echo ver mas cosas, y sobre todo corregir mis fallos, aun soy un novato en esto y ya me he puesto enserio, antes el copy paste ahora me doy cuenta de lo que hace cada cosa.... jejeje

suerte aver si puedes publicar mas cosas
  #3 (permalink)  
Antiguo 03/04/2012, 06:34
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: Slave Class!

JairLizcano muy interesante la clase, en lo personal quitaria todos los get por un getProfile (Profile.php). Algo como esto:

Código PHP:
Ver original
  1. <?php
  2. // codigo.....
  3. $profile = new Profile();
  4. //.............
  5.  
  6. echo "Email: ". $profile-> getEmail(); ."<br>";
  7. echo "ID: ". $profile-> getId(); ."<br>";
  8.  
  9. // Cambiara por:
  10.  
  11. $datos = $profile-> getProfile();
  12.  
  13. echo "Email: ".$datos['email']."<br>";
  14. echo "ID: ".$datoss['id']."<br>";
  15.  
  16. // Ó
  17.  
  18. echo "Email: ". $profile-> getProfile('email'); ."<br>";
  19. echo "ID: ". $profile-> getProfile('id'); ."<br>";

Creo que seria mejor, ya que sacas 11 funciones de tu codigo y las remplazas por una.
Ademas con un solo llamado, tenes todos los datos disponible en todo el codigo. (Opcion $datos = $profile-> getProfile();)
Tambien (si bien el codigo es pequeño) optimizas en Kb,caracteres, lineas a procesar por PHP.
__________________
Mono programando!
twitter.com/eguimariano

Última edición por SirDuque; 03/04/2012 a las 06:59 Razón: aclaraciones
  #4 (permalink)  
Antiguo 03/04/2012, 11:14
Avatar de JairLizcano  
Fecha de Ingreso: junio-2008
Ubicación: Santander, Colombia
Mensajes: 608
Antigüedad: 15 años, 10 meses
Puntos: 53
Exclamación Respuesta: Slave Class!

Cita:
Iniciado por SirDuque Ver Mensaje
JairLizcano muy interesante la clase, en lo personal quitaria todos los get por un getProfile (Profile.php). Algo como esto:

Código PHP:
Ver original
  1. <?php
  2. // codigo.....
  3. $profile = new Profile();
  4. //.............
  5.  
  6. echo "Email: ". $profile-> getEmail(); ."<br>";
  7. echo "ID: ". $profile-> getId(); ."<br>";
  8.  
  9. // Cambiara por:
  10.  
  11. $datos = $profile-> getProfile();
  12.  
  13. echo "Email: ".$datos['email']."<br>";
  14. echo "ID: ".$datoss['id']."<br>";
  15.  
  16. // Ó
  17.  
  18. echo "Email: ". $profile-> getProfile('email'); ."<br>";
  19. echo "ID: ". $profile-> getProfile('id'); ."<br>";

Creo que seria mejor, ya que sacas 11 funciones de tu codigo y las remplazas por una.
Ademas con un solo llamado, tenes todos los datos disponible en todo el codigo. (Opcion $datos = $profile-> getProfile();)
Tambien (si bien el codigo es pequeño) optimizas en Kb,caracteres, lineas a procesar por PHP.
Para el comportamiento que defines se hace evidente el uso del método mágico __toString que permite definir el comportamiento cuando a una clase se le manipula como string... y que sinceramente, la había pasado por alto, no sé el porqué... pero se me iba como olvidando.

Gracias por sus opiniones.
__________________
Programar dejó de ser una profesión acusada en la oscuridad y disfrutada fríamente... para convertirse en un arte.

Etiquetas: slave, usuarios
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 19:54.