2010-11-24 28 views
0

Je suis en train de tenir en quelque sorte aux règles de la programmation orientée objet. J'ai donc créé une classe d'utilisateurs, qui concerne un utilisateur. Cet utilisateur est chargé depuis l'utilisateur de classe db.Question sur les objets et la recherche de lignes simples

Alors maintenant, je crée une classe userManager avec des fonctions comme: findUserIdByEmail.

Mais quelle est la manière orientée objet correct de faire cela?

Dois-je construire directement une requête à partir de userManager vers la base de données ou dois-je en quelque sorte charger tous les objets utilisateur et les trouver dans les objets?

+0

Qu'entendez-vous par "utilisation"? En entrée, en sortie, ..? – KingCrunch

Répondre

1

Je mettre en œuvre

getUserByEmail ($ email)

qui appellerait la base de données ou tout autre datastore. exemple de base moins Escaping/sécurité

public function getUserByEmail($email) 
{ 
    $sql = "SELECT user_name AS username, user_id AS userId FROM User WHERE email_address = ". $email 
    $result = $this->runQuery($sql); 
    while($r = $result->getAssoc()){ 
     $user = $this->createUserModel($r);  
    } 
    return $user; 
} 

public function createUserModel($row) 
{ 
    $user = new Default_Model_User; 
    $user->setUsername($row['username']); 
    $user->setUserId($row['userId']); 

    return $user; 
} 

La méthode de courriel serait alors appeler une méthode qui crée l'objet qui contient les propriétés et le retourner.

2

Je voudrais construire quelque chose comme getUserByEmail($email) qui renvoie l'objet complet (avec ou sans objets connexes). Dans ce cas, vous pouvez accéder à l'ID avec $ User-> id (ou, mieux, construire un getter agréable pour cela), mais aussi d'autres attributs sans exécuter une autre requête à la base de données. Si vous commencez à des fonctions de construction comme getUserIdByEmail, vous allez bientôt commencer à construire une méthode comme getUserNameByEmail, getUserPasswordByEmail, etc. Voir le problème?

1

Je créerais un utilisateur de classe correspondant à la table où vous stockez les utilisateurs dans la base de données. Je voudrais également créer une classe User simple correspondant à la structure de la table où vous stockez les utilisateurs.

La table Utilisateurs aurait une méthode getSingleByEmail ($ theEmail) qui retournerait un objet Utilisateur ou null si cet utilisateur n'existe pas.

class Users 
{ 
    public function getSingleByEmail($theEmail) 
    { 
     // check that email is valid 
     // if not throw exception 

     // get data from the database 
     // either with bare SQl or with some db wrapper 
     if (null !== theResult) 
     { 
      theResult = new User($theResult); 
     } 
     return theResult; 
    } 
} 

class User 
{ 
    private $id; 
    private email; 
    private $username; 

    public function __construct($theResult) 
    { 
     $this->id = theResult->id; 
     $this->email = theResult->email; 
     $this->username = theResult->username; 
    } 
} 

Ou quelque chose comme ça.