2014-01-15 49 views
0

好的。我正在設計我的應用程序中的類。設計一個用戶類 - oop php

我有一個用戶類。現在我需要列表中的用戶,獲取有關特定用戶等

起初我試圖做的信息是這樣的:

class User 
    { 

    private $userId; 
    private $name; 
    private $age; 

    function __construct() 
    { 
     // the code to get the user details from db and assign it to the properties. 
    } 

    // get the list of all the users 
    public function getUserList() 
    { 
    } 

    // add a new user 
    public function addUser() 
    { 
    } 

    // gets the username 
    public function getUserName($userId) 
    { 
    return $this->name; 
    } 


} 

這是我的疑惑:

  1. 你認爲從 構造函數中的數據庫填充屬性是一個好主意?如果不是,你可以建議一個更好的方法來做到這一點?

  2. 函數getUserList()和addUser()是否真的屬於這個類?或者我應該創建一個單獨的類來獲取用戶列表,添加,刪除用戶,然後另一個類來存儲特定用戶的信息?我應該如何去設計這個?

感謝

+2

您的域對象不應該關心甚至不知道數據庫。您可能想看看Data Mapper模式:http://www.martinfowler.com/eaaCatalog/dataMapper.html – lafor

回答

1

我認爲更好的選擇是創建兩個類,用戶和用戶。

class Users implements IteratorAggregate { 
    /** 
    * @return User[] 
    */ 
    public function getUserList() {} 

    public function addUser(User $user) {} 

    /** 
    * @return User 
    */ 
    public function getUser($userId) {} 

    public function getIterator() { 
     return new ArrayIterator($this->getUserList()); 
    } 
} 

class User { 
    public $userId; 
    public $name; 

    public function __construct() {} 
} 
+0

在User類中破解封裝有什麼意義? – Yang

+0

@Jannis:你能告訴我你爲什麼使用IteratorAggregate。如果我直接調用返回數組的getUSerList()會怎麼樣? – user1285659

+0

@ user1285659您可以直接對該類進行foreach,如下所示:$ list = new UserList(); foreach($ list爲$ user){} –