Ver Mensaje Individual
  #3 (permalink)  
Antiguo 05/05/2013, 09:18
Avatar de bulter
bulter
 
Fecha de Ingreso: enero-2008
Mensajes: 137
Antigüedad: 16 años, 10 meses
Puntos: 20
Respuesta: Como armar las clases para un login y mensajeria interna

Cita:
Iniciado por pateketrueke Ver Mensaje
¿Y tienen que ser clases/objetos necesariamente?
No veo por que no :/
Si son objetos es mucho mas facil de manipular, usar , mas facil de leer etc.
Ahora si empieza con 3 lineas de código en un futuro a lo mejor quiere seguir desarrollando lo y si tiene 1310923812903 funciones que ni dios sabe lo que hacen, pues lo tiene claro. Otra cosa también es que con el tiempo si tiene la estructura buena puede ir ampliando las cosas. Por ejemplo

Código PHP:
<?php
interface IUserLogin
{
    public function 
Login(array $userLoginData);
    public function 
Logout();
}

abstract class 
User
{
    protected 
$_userName ""//username
    
private $_additionalUserData = array(); // user data
    
    
protected function ValidateUserName($username)
    {
        
/// TO DO
    
}
    
    protected function 
ValidateUserPassword($username)
    {
        
/// TO DO
        
return true;
    }
    
    public function 
getUserName()
    {
        return 
$this->_userName;
    }
    
    protected function 
AddUserData($key$data)
    {
        
// TODO: validate $key and $data
        
$this->_additionalUserData[$key] = $data;
    }
    
    protected function 
GetUserData($key)
    {
        if(!
array_key_exists($key$this->_additionalUserData))
        {
            throw new 
Exception("Key not found");
        }
        
        return 
$this->_additionalUserData[$key];
    }
}

class 
MemberLogin extends User implements IUserLogin
{
    public function 
Login(array $userLoginData)
    {
        if(!
array_key_exists("username"$userLoginData) || !$this->ValidateUserPassword($userLoginData["username"]))
        {
            throw new 
Exception("Username is not defined.");
        }
        
        
// TO DO: Login
        
$this->_userName $userLoginData["username"];
    }
    
    public function 
Logout()
    {
        
// TO DO: Logout
    
}
}

class 
MemberMessages
{
    private 
$_member null;
    
    public function 
__construct(MemberLogin $member)
    {
                if((
$member instanceof IUserLogin) == false)
        {
            throw new 
Exception(".....");
        }

        
$this->_member $member;
    }
    
    public function 
getUnreadedMessages()
    {
        
// TO DO
    
}
}

$member = new MemberLogin();
$member->Login(array("username" => "bulter""password" => "rofl"));
$messages = new MemberMessages($member);
$messages->getUnreadedMessages();
?>
Bue es solo una idea nada en concreto. La idea es que tienes una clase abstracta User que tiene todas las funciones que puedan realizar y todas las variable que deban de tener todos los tipos de usuarios. Ahora si mañana quiero tener un panel de administradores puede hacer tranquilo una clases AdminLogin extends User y ya tendré todo lo necesario, aparte ya que tengo el Admin en otra clase lo puedo tener controlado en una forma completamente distinta: la DB que sea con otra estructura, usar una DB distinta , tener unas reglas diferentes que un usuario normal. Otra cosa. Pepito ya sabe como funciona MemberLogin viene y ve AdminLogin pues AdminLogin hereda User pues ya sabe que puede usar dentro las funciones ValidateUserName y getUserName también implementa el interface UserLogin sabra que la función Logout() esta disponible de una forma u otra y no poner en 20 sitios $this->Logout(); y al arrancar el script 20 Errores de que Logout no existe para Admin. El dia siguiente viene Jose y me dice "Tio quiero que las Noticias de la pagina tengan moderadores de mi empresa". Pues perfecto le doy a el acceso a la clase User y a la interfaz UserLogin y puede trabajar y yo estar tranquilo de que no tocara algo que no es cosa suya y sabre que Jose cumple con mis normas y no podra tocar nada de lo mio y de Pepito :D. Luego para cambiar digamos de un Member normal a un Admin ... facilisimo en la clase del Admin pongo otra funcion que tome de argumento objeto MemberLogin y ya tengo todos los datos del usuario ( nombre , pass , additionalData ).
Bueno es una idea básica, este teme se puede desarrollar mucho, mi idea es que es preferente usar clases/objetos y aun mas si se trabaja en equipo o con un proyecto grande.

Última edición por bulter; 05/05/2013 a las 09:31